CWS-TOOLING: integrate CWS layoutdialogs2

2009-04-09 10:11:14 +0200 mba  r270680 : defective merge sets seem to have brought config_office back
2009-04-02 18:00:52 +0200 mba  r270429 : #i100503#: make tralay work without LD_LIBRARY_PATH
2009-04-01 13:27:58 +0200 mba  r270320 : warning on Solaris fixed
2009-03-31 22:15:03 +0200 mba  r270293 : CWS-TOOLING: rebase CWS layoutdialogs2 to trunk@270033 (milestone: DEV300:m45)
2009-03-16 13:05:08 +0100 mba  r269526 : fixed some compiler warnings of the Sun compiler
2009-03-11 15:32:42 +0100 mba  r269337 : some problems for ENABLE_LAYOUT fixed
2009-03-09 16:05:32 +0100 mba  r269197 : merge conflict solved
2009-03-09 15:09:55 +0100 mba  r269194 : merge conflict solved
2009-03-09 15:09:35 +0100 mba  r269193 : merge conflict solved
2009-03-06 22:12:47 +0100 mba  r269052 : compilation error fixed
2009-03-06 17:36:37 +0100 mba  r269033 : integer warning fixed
2009-03-06 10:31:19 +0100 mba  r268983 : CWS-TOOLING: rebase CWS layoutdialogs2 to trunk@268395 (milestone: DEV300:m42)
2009-03-03 20:03:59 +0100 jcn  r268777 : Add Notes checkbox to find-and-replace dialog in anticipation of m40 resync.
2009-03-03 15:56:20 +0100 jcn  r268737 : Apply layout-find-dialog-crash-fix.diff -- fixes crasher.
From http://svn.gnome.org/viewvc/ooo-build?view=revision&revision=15378
2009-02-06 17:41:24 +0100 mba  r267479 : arrrrgh - svx headers must be included behind the magic define
2009-02-05 19:44:42 +0100 mba  r267439 : seems that msvc preprocessor is thick as a brick
2009-02-05 15:15:16 +0100 mba  r267425 : pch added
2009-02-05 08:14:01 +0100 mba  r267409 : double defined symbols fixed
2009-02-05 08:13:14 +0100 mba  r267408 : compile Languagebox and FontListbox with ENABLE_LAYOUT
2009-02-05 08:07:35 +0100 mba  r267406 : warning fixed
2009-02-05 08:06:42 +0100 mba  r267405 : warnings and errors fixed
2009-01-30 15:51:52 +0100 mba  r267206 : export Container class to compile code in sfx2
2009-01-30 15:51:14 +0100 mba  r267205 : remove LAYOUT_EXPERIMENTAL from sfx2, everything now compiles with ENABLE_LAYOUT
2009-01-28 17:01:27 +0100 mba  r267069 : fixed namespace problems in sfx2
2009-01-28 16:59:48 +0100 mba  r267068 : fixed namespace problems
2009-01-24 13:57:06 +0100 mba  r266877 : move svx stuff to experimental
2009-01-24 13:56:11 +0100 mba  r266876 : move svx stuff to experimental
2009-01-24 13:52:09 +0100 mba  r266875 : put sfx stuff into experimental
2009-01-24 13:28:08 +0100 mba  r266874 : put sfx stuff into experimental
2009-01-24 13:26:38 +0100 mba  r266873 : help msvc++ compiler a bit
2009-01-24 13:24:43 +0100 mba  r266872 : warning removed
2009-01-24 13:23:21 +0100 mba  r266871 : moved svx stuff to svx; put sfx stuff into experimental
2009-01-24 13:22:04 +0100 mba  r266870 : moved svx stuff to svx
2009-01-05 16:35:34 +0100 jcn  r265879 : config_office/configure: Regenerate.  Fixes naive builds.
2008-12-17 16:06:25 +0100 jcn  r265638 : Wordcount: minor HIG tweaks.
2008-12-17 16:06:21 +0100 jcn  r265637 : Zoom: minor HIG spacing tweaks.
2008-12-17 16:06:16 +0100 jcn  r265636 : Zoom: fix align-test and update zoom.xml.
2008-12-17 16:06:12 +0100 jcn  r265635 : Zoom: add align-test.xml to illustrate zoom alignment bug.
2008-12-17 16:06:07 +0100 jcn  r265634 : Find-and-Replace: request font-style-name="Bold", does not seem to work.
2008-12-17 16:06:03 +0100 jcn  r265633 : Find-and-Replace: Add alignment for combobox labels.
2008-12-17 16:05:59 +0100 jcn  r265632 : Find-and-Replace: Replace pairs of <flow> with <align>. Fixes ugly non-emptiness of more-<hbox>.
2008-12-17 16:05:56 +0100 jcn  r265631 : Find-and-Replace: add nice 12pt border.
2008-12-17 16:05:51 +0100 jcn  r265630 : Find-and-Replace: also add rowsep at lower fixedline.
2008-12-17 16:05:47 +0100 jcn  r265629 : Find-and-Replace: Add poor man's colsep and rowsep substitute spaces.
2008-12-17 16:05:43 +0100 jcn  r265628 : Find-and-Replace: use <vbox cnt:x-expand="false"> for buttons.
2008-12-17 16:05:40 +0100 jcn  r265627 : Find-and-Replace: add <vbox>s and use cnt:expand="false" to stop vertical button expansion.
2008-12-17 16:05:36 +0100 jcn  r265626 : Find-and-Replace: use sc icon. Fixes FIND button height.
2008-12-17 16:05:31 +0100 jcn  r265625 : Bugfix have empty/invisible containers not take up space.
2008-12-17 16:05:27 +0100 jcn  r265624 : Find-and-replace: Fix/remove most property errors.
2008-12-17 16:05:23 +0100 jcn  r265623 : Table: make x, y expand default.
2008-12-17 16:05:18 +0100 jcn  r265622 : Use OSL_TRACE rather than printf. Fixes warning visibility.
2008-12-17 16:05:14 +0100 jcn  r265621 : Boxtest: add <vbox><table x-expand="true"> pair to trigger property errors.
2008-12-17 16:05:10 +0100 jcn  r265620 : Junk extra <table> from boxtest. Fixes visual output.
2008-12-17 16:05:05 +0100 jcn  r265619 : Eradicate PROPHELPER_SET_INFO: junk static caching.
2008-12-17 16:05:01 +0100 jcn  r265618 : Update awk+sed localize generation rules. Fixes multiple (wrong) titles in Find & Replace.
2008-12-17 16:04:56 +0100 jcn  r265617 : Use dash (-) instead of underscore (_) to separate language modifiers. Fixes en_GB etc.
2008-12-17 16:04:51 +0100 jcn  r265616 : Add "defbutton=true" to dialogs. Fixes ENTER doing default action: n#439222.
2008-12-17 16:04:45 +0100 jcn  r265615 : Michael's new table-based find and replace.
2008-12-17 16:04:40 +0100 jcn  r265614 : Apply Michael's boxtest patch.
2008-12-17 16:04:36 +0100 jcn  r265613 : Make sort-options experimental. Part II. Fixes crasher n-44.patch. Fixes crasher: n#442036.
2008-12-17 16:04:31 +0100 jcn  r265612 : Make sort-options experimental. Part I.
2008-12-17 16:04:26 +0100 jcn  r265611 : Add --enable-layout-experimental configure switch. Part II. Typo in configure.in, add set_soenv entry.
2008-12-17 16:04:21 +0100 jcn  r265610 : Add --enable-layout-experimental configure switch. Default off.
2008-11-26 16:25:18 +0100 mba  r264417 : fixed compiler warnings
2008-11-26 15:52:02 +0100 mba  r264407 : fixed compiler warnings
2008-11-26 15:40:44 +0100 mba  r264402 : fixed compiler warnings
2008-11-26 14:50:47 +0100 mba  r264395 : fixed compiler warnings
2008-11-26 14:39:12 +0100 mba  r264393 : fixed compiler warnings
2008-11-26 14:38:49 +0100 mba  r264392 : fixed compiler warnings
2008-11-26 14:38:31 +0100 mba  r264391 : fixed compiler warnings
2008-11-26 14:38:13 +0100 mba  r264390 : fixed compiler warnings
2008-11-26 14:37:38 +0100 mba  r264389 : fixed compiler warnings
2008-11-26 10:11:17 +0100 mba  r264352 : fixed compiler warnings
2008-11-26 10:06:12 +0100 mba  r264351 : fixed compiler warnings
2008-11-26 09:58:28 +0100 mba  r264347 : fixed compiler warnings
2008-11-26 09:50:41 +0100 mba  r264345 : fixed compiler warnings
2008-11-26 09:46:10 +0100 mba  r264343 : fixed compiler warnings
2008-10-22 10:57:09 +0200 mba  r262584 : fixed small error resulting from resolved merged conflicts
2008-10-22 10:56:21 +0200 mba  r262583 : fixed some small errors resulting from resolved merged conflicts
2008-10-20 19:29:27 +0200 jcn  r262557 : layoutdialogs2: Remove stray patches.
2008-10-20 19:29:22 +0200 jcn  r262556 : layoutdialogs2: Force resize also on second show after hiding.
2008-10-20 19:29:17 +0200 jcn  r262555 : layoutdialogs2: Do not trigger handlers for api calls.
2008-10-20 19:29:13 +0200 jcn  r262554 : layoutdialogs2: Use disable/enable instead of hide/show for currency box. Fixes monster lisbox.
2008-10-20 19:29:09 +0200 jcn  r262553 : layoutdialogs2: Use line-count instead of linecount. Fixes sizing of listboxes.
2008-10-20 19:29:04 +0200 jcn  r262552 : layoutdialogs2: vcl: respect line-count also for non-dropdown listbox.
2008-10-20 19:28:59 +0200 jcn  r262551 : layoutdialogs2: Update to svn:r14142 patched.
2008-10-20 19:28:51 +0200 jcn  r262550 : layoutdialogs2: Manual tweaks in number-format.xml.
2008-10-20 19:28:45 +0200 jcn  r262549 : layoutdialogs2: Integrate Number Format tabpage into Format Cell dialog.
2008-10-20 19:28:36 +0200 jcn  r262548 : layoutdialogs2: Windows build fixes. Thanks Noel.
2008-10-20 19:28:31 +0200 jcn  r262547 : layoutdialogs2: Layout Format Cells/Number Format tabpage.
2008-10-20 19:28:24 +0200 jcn  r262546 : layoutdialogs2: Remove sc/uiconfig/layout/localize.sdf.
2008-10-20 19:28:20 +0200 jcn  r262545 : layoutdialogs2: --enable-debug link fix
2008-10-20 19:28:16 +0200 jcn  r262544 : layoutdialogs2: Add missing localize.sdf dependency. Thanks, Petr.
2008-10-20 19:28:12 +0200 jcn  r262543 : layoutdialogs2: svx linx fixlet.
2008-10-20 19:28:06 +0200 jcn  r262542 : layoutdialogs2: Move layout/* to layout/core, vclcompat to layout/vcl. Distribute layout headers. Fixes sfx2 layout core includes.
2008-10-20 19:27:58 +0200 jcn  r262541 : layoutdialogs2: Build fix for --enable-layout.
2008-10-20 19:27:54 +0200 jcn  r262540 : layoutdialogs2: Generate localize.sdf files in uiconfig.
2008-10-20 19:27:47 +0200 jcn  r262539 : layoutdialogs2: Minimalize deprecated String use further by using OUString.
2008-10-20 19:27:42 +0200 jcn  r262538 : layoutdialogs2: Implement LocalizedString.GetToken and use it for aCalcBtn. Fixes empty label.
2008-10-20 19:27:36 +0200 jcn  r262537 : layoutdialogs2: Add layout::Sfx*Dialog wrapper.
2008-10-20 19:27:29 +0200 jcn  r262536 : layoutdialogs2: Introduce Closing*Dialog wrappers fixing closing with ESC.
2008-10-20 19:27:24 +0200 jcn  r262535 : layoutdialogs2: Support <sfxmodelessdialog> from sfx2.
2008-10-20 19:27:17 +0200 jcn  r262534 : layoutdialogs2: Rename find-&-replace.xml to find-and-replace.xml. Fixes split build with failing solenv patch.
2008-10-20 19:27:12 +0200 jcn  r262533 : layoutdialogs2: Do not build sfx2 when --disable-layout.
2008-10-20 19:27:08 +0200 jcn  r262532 : layoutdialogs2: Ignore ja/ too.
2008-10-20 19:27:04 +0200 jcn  r262531 : layoutdialogs2: Add destructors for VCLXButton, VCLXComboBox.
2008-10-20 19:26:58 +0200 jcn  r262530 : layoutdialogs2: Make dialogs closable with ESC: wordcount, zoom, message-box, move-copy-sheet, insert-sheet.
2008-10-20 19:26:52 +0200 jcn  r262529 : layoutdialogs2: Move some implementations to .cxx.
2008-10-20 19:26:47 +0200 jcn  r262528 : layoutdialogs2: Fix simple editor crasher.
2008-10-20 19:26:43 +0200 jcn  r262527 : layoutdialogs2: Further cleanup: remove clean & delete from wrapperGone.
2008-10-20 19:26:38 +0200 jcn  r262526 : layoutdialogs2: Add reset logic to ~WindowImpl, plugs ComboBox and Dialog leaks.
2008-10-20 19:26:34 +0200 jcn  r262525 : layoutdialogs2: Interesting hack: only leaks ::ComboBox and ::Dialog.
2008-10-20 19:26:29 +0200 jcn  r262524 : layoutdialogs2: Build fix.
2008-10-20 19:26:24 +0200 jcn  r262523 : layoutdialogs2: Find&Replace duplicate disposal workaround inside layout.
2008-10-20 19:26:19 +0200 jcn  r262522 : layoutdialogs2: Revert "Terrible crasher-fix hack. Do not dispose Dialog or any FocusHandler owners."
This reverts commit 5222b5b123a2e6c88494983bd875de574f365bae.
2008-10-20 19:26:14 +0200 jcn  r262521 : layoutdialogs2: Terrible crasher-fix hack. Do not dispose Dialog or any FocusHandler owners.
2008-10-20 19:26:08 +0200 jcn  r262520 : layoutdialogs2: Revert "ComboBox: crash down to (Dialog's) VCLXWindowImpl::DestroyOutputDevice();"
This reverts commit b423129aca295e84ef5986149b6ee71eb7ba0aa3.
2008-10-20 19:26:03 +0200 jcn  r262519 : layoutdialogs2: ComboBox: crash down to (Dialog's) VCLXWindowImpl::DestroyOutputDevice();
2008-10-20 19:25:57 +0200 jcn  r262518 : layoutdialogs2: Handler and debug cleanup.
2008-10-20 19:25:52 +0200 jcn  r262517 : layoutdialogs2: Minimally remove FixedText workaround.
2008-10-20 19:25:47 +0200 jcn  r262516 : layoutdialogs2: Preparations for FocusHdl fix.
2008-10-20 19:25:42 +0200 jcn  r262515 : layoutdialogs2: Remove vclxwindows patch by using handler hackery.
2008-10-20 19:25:38 +0200 jcn  r262514 : layoutdialogs2: Don't call deleted dialog. Hdler reset tweaks. Fixes Find&Replace.
2008-10-20 19:25:34 +0200 jcn  r262513 : layoutdialogs2: Hdler and disposing cleanups.
2008-10-20 19:25:29 +0200 jcn  r262512 : layoutdialogs2: Prevent Find&Replace window from being deleted twice.
2008-10-20 19:25:24 +0200 jcn  r262511 : layoutdialogs2: Add destructor to SvxSearchDialogWrapper. Fixes second invocation crasher.
2008-10-20 19:25:19 +0200 jcn  r262510 : layoutdialogs2: Make Find&Replace work (once) with minimal client code changes.
2008-10-20 19:25:13 +0200 jcn  r262509 : layoutdialogs2: Add ComboBox/FixedText debug switching.
2008-10-20 19:25:08 +0200 jcn  r262508 : layoutdialogs2: Add destructors resetting handlers.
2008-10-20 19:25:03 +0200 jcn  r262507 : layoutdialogs2: Static cast fixes.
2008-10-20 19:24:59 +0200 jcn  r262506 : layoutdialogs2: Always set button handler. Fixes pushbuttons.
2008-10-20 19:24:55 +0200 jcn  r262505 : layoutdialogs2: Revert "Move FocusHandlers from Control down to ListBox, ComboBox, FixedText."
This reverts commit 8bc4b991539a74373bfb1ef8792276ada8c958e4.
2008-10-20 19:24:50 +0200 jcn  r262504 : layoutdialogs2: Disable Timer for ENABLE_LAYOUT.
2008-10-20 19:24:45 +0200 jcn  r262503 : layoutdialogs2: Move FocusHandlers from Control down to ListBox, ComboBox, FixedText.
2008-10-20 19:24:40 +0200 jcn  r262502 : layoutdialogs2: Wider small symbol.
2008-10-20 19:24:36 +0200 jcn  r262501 : layoutdialogs2: Listener and SetHandler cleanup.
2008-10-20 19:24:31 +0200 jcn  r262500 : layoutdialogs2: Clear mxWindow upon deletion. Fixes Find&Replace crasher.
2008-10-20 19:24:27 +0200 jcn  r262499 : layoutdialogs2: Typo, fixes build.
2008-10-20 19:24:22 +0200 jcn  r262498 : layoutdialogs2: Ignore .log files too.
2008-10-20 19:24:19 +0200 jcn  r262497 : layoutdialogs2: By default, work around #define protected public Resource hack.
2008-10-20 19:24:15 +0200 jcn  r262496 : layoutdialogs2: Sw:Find&Replace: Remove wrong static cast. Fixes crasher.
2008-10-20 19:24:10 +0200 jcn  r262495 : layoutdialogs2: Find&Replace: do not vertically expand buttons, add title.
2008-10-20 19:24:06 +0200 jcn  r262494 : layoutdialogs2: Find&Replace: Remove need for ResId, set help id.
2008-10-20 19:24:01 +0200 jcn  r262493 : layoutdialogs2: MoreButton: redraw upon resize, fix labels, use small symbol.
2008-10-20 19:23:57 +0200 jcn  r262492 : layoutdialogs2: Support setting and querying small symbol on vcl:button.
2008-10-20 19:23:52 +0200 jcn  r262491 : layoutdialogs2: Support redrawing of only this, make parent optional.
2008-10-20 19:23:48 +0200 jcn  r262490 : layoutdialogs2: Add Kohei's wfield patch https://bugzilla.novell.com/attachment.cgi?id=235398. Fixes n#417840.
2008-10-20 19:23:44 +0200 jcn  r262489 : layoutdialogs2: Redraw [parent] upon first time visibility.
Fixes weird listbox dropdown sizing in Find & Replace.
2008-10-20 19:23:39 +0200 jcn  r262488 : layoutdialogs2: Add manual layouting for Find & Replace.
2008-10-20 19:23:35 +0200 jcn  r262487 : layoutdialogs2: src2xml: use label instead of text for buttons.
Run on Find & Replace; fixes button texts.
2008-10-20 19:23:31 +0200 jcn  r262486 : layoutdialogs2: Add initial auto-translated find-&-replace-.xml.
2008-10-20 19:23:26 +0200 jcn  r262485 : layoutdialogs2: layout importer: handle ModelessDialog.
Fixes Find & Replace parsing error.
2008-10-20 19:23:22 +0200 jcn  r262484 : layoutdialogs2: src2xml: Handle multiple widgets at same x,y.
Fixes silent removal of widgets in Find & Replace dialog.
2008-10-20 19:23:18 +0200 jcn  r262483 : layoutdialogs2: src2xml: Handle hide= attribute, translate to show=.
2008-10-20 19:23:14 +0200 jcn  r262482 : layoutdialogs2: Only use __PRETTY_FUNCTION__ on gcc. Fixes Windows build. Thanks Tor!
2008-10-20 19:23:10 +0200 jcn  r262481 : layoutdialogs2: Add two missing SAL_CALL decorations. Fixes Windows build. Thanks Tor!
2008-10-20 19:23:05 +0200 jcn  r262480 : layoutdialogs2: Build fixes for layout'ed Find & Replace dialog.
2008-10-20 19:22:54 +0200 jcn  r262479 : layoutdialogs2: Do not use layout::SfxTabDialog for now.
2008-10-20 19:22:47 +0200 jcn  r262478 : layoutdialogs2: Crufty sizing tweaks.
2008-10-20 19:22:42 +0200 jcn  r262477 : layoutdialogs2: More debugging cleanups.
2008-10-20 19:22:37 +0200 jcn  r262476 : layoutdialogs2: More cleanups that result in constant manual resizing...
2008-10-20 19:22:33 +0200 jcn  r262475 : layoutdialogs2: Tabdlg cleanups.
2008-10-20 19:22:28 +0200 jcn  r262474 : layoutdialogs2: Add GetOptimalSize () to InPlug. Fixes auto-sizing of tabcontrol.
2008-10-20 19:22:21 +0200 jcn  r262473 : layoutdialogs2: Get VCLXTabControl to resize automatically (too tall), not mousable.
2008-10-20 19:22:13 +0200 jcn  r262472 : layoutdialogs2: Respect show=false property; do not show everything.
2008-10-20 19:22:09 +0200 jcn  r262471 : layoutdialogs2: Add show=false on buttons. Fixes displaying everything.
2008-10-20 19:22:05 +0200 jcn  r262470 : layoutdialogs2: Move some code to reduce namespace and #if hacking.
2008-10-20 19:22:00 +0200 jcn  r262469 : layoutdialogs2: Cleanup, remove unneeded #defines.
2008-10-20 19:21:56 +0200 jcn  r262468 : layoutdialogs2: Replace static casts with dynamic_cast, fixes layout::SfxTabDialog.
Explicitly add 2 tabpages while adding tabpages, instead of relying on ResId.
2008-10-20 19:21:51 +0200 jcn  r262467 : layoutdialogs2: Use cpp hacking to remove layout-tabdialog.hxx duplication.
2008-10-20 19:21:45 +0200 jcn  r262466 : layoutdialogs2: Minimize diff between layout-tabdialog.hxx and tabdlg.hxx.
2008-10-20 19:21:41 +0200 jcn  r262465 : layoutdialogs2: Remove copy of SfxTabDialog; use cpp logic to create both flavours.
2008-10-20 19:21:36 +0200 jcn  r262464 : layoutdialogs2: Minimize diff between layout/sfxtabdialog.cxx and source/tabdlg.cxx.
This enables the next step: use cpp logic instead of code duplication.
2008-10-20 19:21:31 +0200 jcn  r262463 : layoutdialogs2: Hello world on layout::SfxTabDialog.
2008-10-20 19:21:24 +0200 jcn  r262462 : layoutdialogs2: Nice `Compiling:' message that shows the file being compiled.
2008-10-20 19:21:20 +0200 jcn  r262461 : layoutdialogs2: Use layout::SfxTabDialog for sort options.
2008-10-20 19:21:15 +0200 jcn  r262460 : layoutdialogs2: Update sort options tab.
2008-10-20 19:21:10 +0200 jcn  r262459 : layoutdialogs2: Add layout::SfxTabDialog.
2008-10-20 19:21:04 +0200 jcn  r262458 : layoutdialogs2: Cleanup previous attempt using layout::SfxTabPage == layout::TabPage.
2008-10-20 19:20:57 +0200 jcn  r262457 : layoutdialogs2: Windows 2003 compile fixes, i#92397.
2008-10-20 19:20:52 +0200 jcn  r262456 : layoutdialogs2: Set default radiogroup when none provided.
2008-10-20 19:20:48 +0200 jcn  r262455 : layoutdialogs2: Add radiogroup to sort-options. Fixes crasher.
2008-10-20 19:20:43 +0200 jcn  r262454 : layoutdialogs2: Cleanup ParentSet fix.
2008-10-20 19:20:36 +0200 jcn  r262453 : layoutdialogs2: Add debugging in ParentSet. Works standalone, not integrated.
2008-10-20 19:20:31 +0200 jcn  r262452 : layoutdialogs2: Revert "Have InPlug not derive from Window, but have as member."
This reverts commit 50ea26eec3fe14943f24900081ad923e72550345.
2008-10-20 19:20:25 +0200 jcn  r262451 : layoutdialogs2: Have InPlug not derive from Window, but have as member.
2008-10-20 19:20:20 +0200 jcn  r262450 : layoutdialogs2: Move layout plugin implementation from layout::SfxTabPage to InPlug.
2008-10-20 19:20:14 +0200 jcn  r262449 : layoutdialogs2: Get all widgets to display in sfxtabpage plugin with Window::SetParent hack.
2008-10-20 19:20:09 +0200 jcn  r262448 : layoutdialogs2: Two-button manual hello world with sfxtabpage plugin.
2008-10-20 19:20:03 +0200 jcn  r262447 : layoutdialogs2: WIP: layout::SfxTabPage derived from SfxTabPage.
2008-10-20 19:19:55 +0200 jcn  r262446 : layoutdialogs2: Always set parent after construction, fixes listbox dropdown.
2008-10-20 19:19:51 +0200 jcn  r262445 : layoutdialogs2: Fix radio button crasher.
2008-10-20 19:19:47 +0200 jcn  r262444 : layoutdialogs2: Implement ListBox method wrappers. Fixes filling of listbox.
2008-10-20 19:19:42 +0200 jcn  r262443 : layoutdialogs2: Convert Move/Copy sheet to layout engine.
2008-10-20 19:19:35 +0200 jcn  r262442 : layoutdialogs2: Also hide yes/no buttons if not used.
2008-10-20 19:19:31 +0200 jcn  r262441 : layoutdialogs2: Elaborate on changing client code.
2008-10-20 19:19:26 +0200 jcn  r262440 : layoutdialogs2: Implement winbits client-code compatibility for Message Boxes.
2008-10-20 19:19:21 +0200 jcn  r262439 : layoutdialogs2: Add localize.sdf to toolkit uiconfig. Fixes build.
2008-10-20 19:19:17 +0200 jcn  r262438 : layoutdialogs2: Do not use ti_layout twice in toolkit build.lst. Fixes build.
2008-10-20 19:19:13 +0200 jcn  r262437 : layoutdialogs2: Oops, also dist toolkit-layout.zip.
2008-10-20 19:19:09 +0200 jcn  r262436 : layoutdialogs2: Move layout.mk to solenv.
2008-10-20 19:19:03 +0200 jcn  r262435 : layoutdialogs2: Add handy TEST file.
2008-10-20 19:18:58 +0200 jcn  r262434 : layoutdialogs2: Implement MessageBox and wrappers ErrorBox, InfoBox, QueryBox, WarningBox.
2008-10-20 19:18:52 +0200 jcn  r262433 : layoutdialogs2: QueryBox without image used for Delete Sheet dialog.
2008-10-20 19:18:46 +0200 jcn  r262432 : layoutdialogs2: WIP QueryBox.
2008-10-20 19:18:39 +0200 jcn  r262431 : layoutdialogs2: Add insert-sheet localization.
2008-10-20 19:18:34 +0200 jcn  r262430 : layoutdialogs2: Run indent-region on zoom.xml, distribute it.
2008-10-20 19:18:30 +0200 jcn  r262429 : layoutdialogs2: Dist xml files too.
2008-10-20 19:18:26 +0200 jcn  r262428 : layoutdialogs2: Add insert-sheet.xml to workben.
2008-10-20 19:18:22 +0200 jcn  r262427 : layoutdialogs2: Update layout TODO.
2008-10-20 19:18:18 +0200 jcn  r262426 : layoutdialogs2: Cleanups and add comments.
2008-10-20 19:18:13 +0200 jcn  r262425 : layoutdialogs2: Keep RadioButtons::RadioButton callback at HEAD of list.
Fixes radiobutton grouping.
2008-10-20 19:18:07 +0200 jcn  r262424 : layoutdialogs2: Remove IMPORT_RADIOGROUP cruft.
2008-10-20 19:18:02 +0200 jcn  r262423 : layoutdialogs2: Have code check fire event for radio button.
Fixes radio button grouping.
2008-10-20 19:17:58 +0200 jcn  r262422 : layoutdialogs2: Enable IMPORT_RADIOGROUP flag.
2008-10-20 19:17:54 +0200 jcn  r262421 : layoutdialogs2: Add radio groups to zoom.xml.
2008-10-20 19:17:50 +0200 jcn  r262420 : layoutdialogs2: Move RadioGroup implementation to cxx file.
2008-10-20 19:17:45 +0200 jcn  r262419 : layoutdialogs2: Manually set help id for insert table.
2008-10-20 19:17:41 +0200 jcn  r262418 : layoutdialogs2: Cosmetic fixes for insert-sheet.
2008-10-20 19:17:37 +0200 jcn  r262417 : layoutdialogs2: FindAndRemove now also skips translation prefix.
Fixes setting of title etc. from nontranslated xml.
2008-10-20 19:17:32 +0200 jcn  r262416 : layoutdialogs2: Manually set help id for zoom and wordcount dialogs.
2008-10-20 19:17:27 +0200 jcn  r262415 : layoutdialogs2: Set help-id from xml.
2008-10-20 19:17:21 +0200 jcn  r262414 : layoutdialogs2: Move -DENABLE_LAYOUT from stray makefiles to settings.mk.
2008-10-20 19:17:13 +0200 jcn  r262413 : layoutdialogs2: Initial conversion of insert-sheet dialog.
2008-10-20 19:17:08 +0200 jcn  r262412 : layoutdialogs2: Add wrappers for {Get,Set}{Pointer,Text}.
2008-10-20 19:17:04 +0200 jcn  r262411 : layoutdialogs2: Toolkit layout dialog copy updates.
2008-10-20 19:16:59 +0200 jcn  r262410 : layoutdialogs2: Cleanup #include <layout*> disaster.
Fixes multiple inclusions of layout-pre, layout-post.
2008-10-20 19:16:53 +0200 jcn  r262409 : layoutdialogs2: Implement Get,Set{,Smart}HelpId ().
2008-10-20 19:16:49 +0200 jcn  r262408 : layoutdialogs2: Make some getters const.
2008-10-20 19:16:45 +0200 jcn  r262407 : layoutdialogs2: Manual tweaks for string-input.xml.
2008-10-20 19:16:40 +0200 jcn  r262406 : layoutdialogs2: Add string-input.xml.
2008-10-20 19:16:36 +0200 jcn  r262405 : layoutdialogs2: Add dummy implementation for SetHelpId etc.
2008-10-20 19:16:32 +0200 jcn  r262404 : layoutdialogs2: Actually say *what* file cannot be copied *where*. Sigh.
2008-10-20 19:16:27 +0200 jcn  r262403 : layoutdialogs2: Thinko in macro name. Fixes compilation of strindlg.cxx.
2008-10-20 19:16:22 +0200 jcn  r262402 : layoutdialogs2: Add layout includes to stringdlg and makefile.
2008-10-20 19:16:17 +0200 jcn  r262401 : layoutdialogs2: Add sc/uiconfig/layout/localize.sdf
2008-10-20 19:16:13 +0200 jcn  r262400 : layoutdialogs2: Oops, build sc/uiconfig/layout.
2008-10-20 19:16:09 +0200 jcn  r262399 : layoutdialogs2: Have virtual destructor on Context, delete TabPage when deleting TabDialog.
2008-10-20 19:16:04 +0200 jcn  r262398 : layoutdialogs2: Actually delete layout::TabPage objects when deleting SfxTabdialog.
2008-10-20 19:16:00 +0200 jcn  r262397 : layoutdialogs2: Workaround for second invocation crash of sort dialog options tab.
2008-10-20 19:15:56 +0200 jcn  r262396 : layoutdialogs2: Handle Reset button.
2008-10-20 19:15:51 +0200 jcn  r262395 : layoutdialogs2: Also install sc xml zip file.
2008-10-20 19:15:46 +0200 jcn  r262394 : layoutdialogs2: Integrate sort-options into sc.
2008-10-20 19:15:41 +0200 jcn  r262393 : layoutdialogs2: Revert "Fix sfx2 compile warnings."
This reverts commit 8b55d402af7bd217db35f67b02dc92f93f3ada5d.
2008-10-20 19:15:34 +0200 jcn  r262392 : layoutdialogs2: Remove debuging.
2008-10-20 19:15:30 +0200 jcn  r262391 : layoutdialogs2: Pass set argument to layout::TabPage. Fixes OO.o integration crasher.
2008-10-20 19:15:24 +0200 jcn  r262390 : layoutdialogs2: Ignore more.
2008-10-20 19:15:20 +0200 jcn  r262389 : layoutdialogs2: Oops, make just one (1) sort-options tab.
2008-10-20 19:15:15 +0200 jcn  r262388 : layoutdialogs2: Revert macroconf compile warnings.
2008-10-20 19:15:09 +0200 jcn  r262387 : layoutdialogs2: Fix sfx2 compile warnings.
2008-10-20 19:15:01 +0200 jcn  r262386 : layoutdialogs2: Collapsed tabpage and sort-options development.
2008-10-20 19:14:51 +0200 jcn  r262385 : layoutdialogs2: Make dev300/src680 install layout switchable at compile time.
2008-10-20 19:14:47 +0200 jcn  r262384 : layoutdialogs2: Update README, add README.
2008-10-20 19:14:43 +0200 jcn  r262383 : layoutdialogs2: Repainting, hiding stuff.
2008-10-20 19:14:38 +0200 jcn  r262382 : layoutdialogs2: Add allocateArea to VCLXTabPage.
2008-10-20 19:14:34 +0200 jcn  r262381 : layoutdialogs2: Revert "Use VCLXContainer as base for VCLXTabPage."
This reverts commit 06a984434d0d2c356fd0cdaf96d6d613d5147b7c.
2008-10-20 19:14:30 +0200 jcn  r262380 : layoutdialogs2: Use VCLXContainer as base for VCLXTabPage.
2008-10-20 19:14:26 +0200 jcn  r262379 : layoutdialogs2: Revert "Derive VCLXTabPage from VBox."
This reverts commit 8ab66364bdc08151ce2c982c1aa03f7881d86b84.
2008-10-20 19:14:22 +0200 jcn  r262378 : layoutdialogs2: Derive VCLXTabPage from VBox.
2008-10-20 19:14:17 +0200 jcn  r262377 : layoutdialogs2: More cleanups and testing.
2008-10-20 19:14:12 +0200 jcn  r262376 : layoutdialogs2: Get layout tabpage to nicely select. No content visible, though.
2008-10-20 19:14:07 +0200 jcn  r262375 : layoutdialogs2: Support ScTabPageSortOptions in standalone test.
2008-10-20 19:14:02 +0200 jcn  r262374 : layoutdialogs2: Support tabpage creation from xml.
2008-10-20 19:13:56 +0200 jcn  r262373 : layoutdialogs2: Remove most TEST_LAYOUT conditionals.
2008-10-20 19:13:52 +0200 jcn  r262372 : layoutdialogs2: Remove Args effort.
2008-10-20 19:13:48 +0200 jcn  r262371 : layoutdialogs2: Attempt to create ArgSet.
2008-10-20 19:13:44 +0200 jcn  r262370 : layoutdialogs2: Compile more.
2008-10-20 19:13:39 +0200 jcn  r262369 : layoutdialogs2: Add sortdlg.
2008-10-20 19:13:35 +0200 jcn  r262368 : layoutdialogs2: Oops, ID fix.
2008-10-20 19:13:30 +0200 jcn  r262367 : layoutdialogs2: Build fix.
2008-10-20 19:13:26 +0200 jcn  r262366 : layoutdialogs2: Revert "Use ::Window for plugin base iso ::Control."
This reverts commit 919ddaf2f52ad5e4df877a094cd1e336888d6210.
2008-10-20 19:13:21 +0200 jcn  r262365 : layoutdialogs2: Plugin dialog cleanups.
2008-10-20 19:13:17 +0200 jcn  r262364 : layoutdialogs2: Use ::Window for plugin base iso ::Control.
2008-10-20 19:13:12 +0200 jcn  r262363 : layoutdialogs2: Use cstdio, remove cruft.
2008-10-20 19:13:07 +0200 jcn  r262362 : layoutdialogs2: Remove cruft.
2008-10-20 19:13:02 +0200 jcn  r262361 : layoutdialogs2: Remove sizing mess.
2008-10-20 19:12:57 +0200 jcn  r262360 : layoutdialogs2: Trigger [re]draw of DialControl.
2008-10-20 19:12:53 +0200 jcn  r262359 : layoutdialogs2: DialControl window behaves nicely and invisible.
2008-10-20 19:12:48 +0200 jcn  r262358 : layoutdialogs2: Revert adding of setparent.
2008-10-20 19:12:43 +0200 jcn  r262357 : layoutdialogs2: Add dialog::setparent to plugin.
2008-10-20 19:12:39 +0200 jcn  r262356 : layoutdialogs2: Add a setProperty for VCLXPlugin.
2008-10-20 19:12:34 +0200 jcn  r262355 : layoutdialogs2: Unhide plugin.
2008-10-20 19:12:30 +0200 jcn  r262354 : layoutdialogs2: Revert.
2008-10-20 19:12:25 +0200 jcn  r262353 : layoutdialogs2: Use window instead of control.
2008-10-20 19:12:20 +0200 jcn  r262352 : layoutdialogs2: Lots of plugin settings.
2008-10-20 19:12:16 +0200 jcn  r262351 : layoutdialogs2: More hacks.
2008-10-20 19:12:11 +0200 jcn  r262350 : layoutdialogs2: Compile fixes.
2008-10-20 19:12:05 +0200 jcn  r262349 : layoutdialogs2: Use c++ includes.
2008-10-20 19:12:00 +0200 jcn  r262348 : layoutdialogs2: Junk UnoTunnel nonsense.
2008-10-20 19:11:55 +0200 jcn  r262347 : layoutdialogs2: Remove more cruft.
2008-10-20 19:11:50 +0200 jcn  r262346 : layoutdialogs2: Remove cruft.
2008-10-20 19:11:44 +0200 jcn  r262345 : layoutdialogs2: Rename wrap to plugin.
2008-10-20 19:11:39 +0200 jcn  r262344 : layoutdialogs2: All sorry tries.
2008-10-20 19:11:33 +0200 jcn  r262343 : layoutdialogs2: Rename plugin to wrap.
2008-10-20 19:11:28 +0200 jcn  r262342 : layoutdialogs2: Add ifdefs, no UNOTUNNEL, no crash on exit.
2008-10-20 19:11:23 +0200 jcn  r262341 : layoutdialogs2: Redo all kind of Uno and XIface weirdness.
2008-10-20 19:11:17 +0200 jcn  r262340 : layoutdialogs2: Remove extra UnoTunnel.
2008-10-20 19:11:12 +0200 jcn  r262339 : layoutdialogs2: Plugin hello world. TODO: parenting/owning/sizing, ... etc.
2008-10-20 19:11:06 +0200 jcn  r262338 : layoutdialogs2: Zoom updates.
2008-10-20 19:11:01 +0200 jcn  r262337 : layoutdialogs2: Add missing controls.
2008-10-20 19:10:56 +0200 jcn  r262336 : layoutdialogs2: Add .gitignore.
This commit is contained in:
Ivo Hinkelmann
2009-04-21 16:06:18 +00:00
parent e16c311aba
commit 0b291919ca
129 changed files with 9126 additions and 3593 deletions

View File

@@ -52,6 +52,10 @@ SHL1TARGET= $(TARGET)$(DLLPOSTFIX)
SHL1IMPLIB= i$(TARGET)
SHL1STDLIBS= $(TOOLSLIB) $(CPPULIB) $(SALLIB) $(VCLLIB) $(COMPHELPERLIB) $(CANVASTOOLSLIB) $(CPPUHELPERLIB) $(BASEGFXLIB)
.IF "$(debug)$(dbgutil)"!=""
SHL1STDLIBS += $(CPPUHELPERLIB)
.ENDIF # "$(debug)$(dbgutil)"!=""
SHL1LIBS= $(SLB)$/$(TARGET).lib
SHL1DEF= $(MISC)$/$(SHL1TARGET).def

View File

@@ -323,12 +323,12 @@ typedef USHORT TabBarPageBits;
// - TabBar-Types -
// ----------------
#define TAB_APPEND ((USHORT)0xFFFF)
#define TAB_PAGE_NOTFOUND ((USHORT)0xFFFF)
#define TABBAR_APPEND ((USHORT)0xFFFF)
#define TABBAR_PAGE_NOTFOUND ((USHORT)0xFFFF)
#define TAB_RENAMING_YES ((long)TRUE)
#define TAB_RENAMING_NO ((long)FALSE)
#define TAB_RENAMING_CANCEL ((long)2)
#define TABBAR_RENAMING_YES ((long)TRUE)
#define TABBAR_RENAMING_NO ((long)FALSE)
#define TABBAR_RENAMING_CANCEL ((long)2)
// ----------
// - TabBar -
@@ -427,7 +427,7 @@ public:
void InsertPage( USHORT nPageId, const XubString& rText,
TabBarPageBits nBits = 0,
USHORT nPos = TAB_APPEND );
USHORT nPos = TABBAR_APPEND );
void RemovePage( USHORT nPageId );
void MovePage( USHORT nPageId, USHORT nNewPos );
void Clear();
@@ -456,7 +456,7 @@ public:
void SelectPage( USHORT nPageId, BOOL bSelect = TRUE );
void SelectPageRange( BOOL bSelect = FALSE,
USHORT nStartPos = 0,
USHORT nEndPos = TAB_APPEND );
USHORT nEndPos = TABBAR_APPEND );
USHORT GetSelectPage( USHORT nSelIndex = 0 ) const;
USHORT GetSelectPageCount() const;
BOOL IsPageSelected( USHORT nPageId ) const;

View File

@@ -1543,7 +1543,7 @@ void TabBar::InsertPage( USHORT nPageId, const XubString& rText,
TabBarPageBits nBits, USHORT nPos )
{
DBG_ASSERT( nPageId, "TabBar::InsertPage(): PageId == 0" );
DBG_ASSERT( GetPagePos( nPageId ) == TAB_PAGE_NOTFOUND,
DBG_ASSERT( GetPagePos( nPageId ) == TABBAR_PAGE_NOTFOUND,
"TabBar::InsertPage(): PageId already exists" );
DBG_ASSERT( nBits <= TPB_SPECIAL, "TabBar::InsertPage(): nBits is wrong" );
@@ -1570,7 +1570,7 @@ void TabBar::RemovePage( USHORT nPageId )
USHORT nPos = GetPagePos( nPageId );
// Existiert Item
if ( nPos != TAB_PAGE_NOTFOUND )
if ( nPos != TABBAR_PAGE_NOTFOUND )
{
if ( mnCurPageId == nPageId )
mnCurPageId = 0;
@@ -1605,7 +1605,7 @@ void TabBar::MovePage( USHORT nPageId, USHORT nNewPos )
return;
// Existiert Item
if ( nPos != TAB_PAGE_NOTFOUND )
if ( nPos != TABBAR_PAGE_NOTFOUND )
{
// TabBar-Item in der Liste verschieben
ImplTabBarItem* pItem = mpItemList->Remove( nPos );
@@ -1643,7 +1643,7 @@ void TabBar::Clear()
if ( IsReallyVisible() && IsUpdateMode() )
Invalidate();
CallEventListeners( VCLEVENT_TABBAR_PAGEREMOVED, (void*) TAB_PAGE_NOTFOUND );
CallEventListeners( VCLEVENT_TABBAR_PAGEREMOVED, (void*) TABBAR_PAGE_NOTFOUND );
}
// -----------------------------------------------------------------------
@@ -1652,7 +1652,7 @@ void TabBar::EnablePage( USHORT nPageId, BOOL bEnable )
{
USHORT nPos = GetPagePos( nPageId );
if ( nPos != TAB_PAGE_NOTFOUND )
if ( nPos != TABBAR_PAGE_NOTFOUND )
{
ImplTabBarItem* pItem = mpItemList->GetObject( nPos );
@@ -1675,7 +1675,7 @@ BOOL TabBar::IsPageEnabled( USHORT nPageId ) const
{
USHORT nPos = GetPagePos( nPageId );
if ( nPos != TAB_PAGE_NOTFOUND )
if ( nPos != TABBAR_PAGE_NOTFOUND )
return mpItemList->GetObject( nPos )->mbEnable;
else
return FALSE;
@@ -1687,7 +1687,7 @@ void TabBar::SetPageBits( USHORT nPageId, TabBarPageBits nBits )
{
USHORT nPos = GetPagePos( nPageId );
if ( nPos != TAB_PAGE_NOTFOUND )
if ( nPos != TABBAR_PAGE_NOTFOUND )
{
ImplTabBarItem* pItem = mpItemList->GetObject( nPos );
@@ -1708,7 +1708,7 @@ TabBarPageBits TabBar::GetPageBits( USHORT nPageId ) const
{
USHORT nPos = GetPagePos( nPageId );
if ( nPos != TAB_PAGE_NOTFOUND )
if ( nPos != TABBAR_PAGE_NOTFOUND )
return mpItemList->GetObject( nPos )->mnBits;
else
return FALSE;
@@ -1745,7 +1745,7 @@ USHORT TabBar::GetPagePos( USHORT nPageId ) const
pItem = mpItemList->Next();
}
return TAB_PAGE_NOTFOUND;
return TABBAR_PAGE_NOTFOUND;
}
// -----------------------------------------------------------------------
@@ -1770,7 +1770,7 @@ Rectangle TabBar::GetPageRect( USHORT nPageId ) const
{
USHORT nPos = GetPagePos( nPageId );
if ( nPos != TAB_PAGE_NOTFOUND )
if ( nPos != TABBAR_PAGE_NOTFOUND )
return mpItemList->GetObject( nPos )->maRect;
else
return Rectangle();
@@ -1783,7 +1783,7 @@ void TabBar::SetCurPageId( USHORT nPageId )
USHORT nPos = GetPagePos( nPageId );
// Wenn Item nicht existiert, dann nichts machen
if ( nPos != TAB_PAGE_NOTFOUND )
if ( nPos != TABBAR_PAGE_NOTFOUND )
{
// Wenn sich aktuelle Page nicht geaendert hat, dann muessen wir
// jetzt nichts mehr machen
@@ -1875,7 +1875,7 @@ void TabBar::MakeVisible( USHORT nPageId )
USHORT nPos = GetPagePos( nPageId );
// Wenn Item nicht existiert, dann nichts machen
if ( nPos != TAB_PAGE_NOTFOUND )
if ( nPos != TABBAR_PAGE_NOTFOUND )
{
if ( nPos < mnFirstPos )
SetFirstPageId( nPageId );
@@ -1924,7 +1924,7 @@ void TabBar::SetFirstPageId( USHORT nPageId )
USHORT nPos = GetPagePos( nPageId );
// Wenn Item nicht existiert, dann FALSE zurueckgeben
if ( nPos != TAB_PAGE_NOTFOUND )
if ( nPos != TABBAR_PAGE_NOTFOUND )
{
if ( nPos != mnFirstPos )
{
@@ -1958,7 +1958,7 @@ void TabBar::SelectPage( USHORT nPageId, BOOL bSelect )
{
USHORT nPos = GetPagePos( nPageId );
if ( nPos != TAB_PAGE_NOTFOUND )
if ( nPos != TABBAR_PAGE_NOTFOUND )
{
ImplTabBarItem* pItem = mpItemList->GetObject( nPos );
@@ -2039,7 +2039,7 @@ USHORT TabBar::GetSelectPageCount() const
BOOL TabBar::IsPageSelected( USHORT nPageId ) const
{
USHORT nPos = GetPagePos( nPageId );
if ( nPos != TAB_PAGE_NOTFOUND )
if ( nPos != TABBAR_PAGE_NOTFOUND )
return mpItemList->GetObject( nPos )->mbSelect;
else
return FALSE;
@@ -2050,7 +2050,7 @@ BOOL TabBar::IsPageSelected( USHORT nPageId ) const
BOOL TabBar::StartEditMode( USHORT nPageId )
{
USHORT nPos = GetPagePos( nPageId );
if ( mpEdit || (nPos == TAB_PAGE_NOTFOUND) || (mnLastOffX < 8) )
if ( mpEdit || (nPos == TABBAR_PAGE_NOTFOUND) || (mnLastOffX < 8) )
return FALSE;
mnEditId = nPageId;
@@ -2126,11 +2126,11 @@ void TabBar::EndEditMode( BOOL bCancel )
if ( !bCancel )
{
long nAllowRenaming = AllowRenaming();
if ( nAllowRenaming == TAB_RENAMING_YES )
if ( nAllowRenaming == TABBAR_RENAMING_YES )
SetPageText( mnEditId, maEditText );
else if ( nAllowRenaming == TAB_RENAMING_NO )
else if ( nAllowRenaming == TABBAR_RENAMING_NO )
bEnd = FALSE;
else // nAllowRenaming == TAB_RENAMING_CANCEL
else // nAllowRenaming == TABBAR_RENAMING_CANCEL
mbEditCanceled = TRUE;
}
@@ -2271,7 +2271,7 @@ void TabBar::SetSelectTextColor( const Color& rColor )
void TabBar::SetPageText( USHORT nPageId, const XubString& rText )
{
USHORT nPos = GetPagePos( nPageId );
if ( nPos != TAB_PAGE_NOTFOUND )
if ( nPos != TABBAR_PAGE_NOTFOUND )
{
mpItemList->GetObject( nPos )->maText = rText;
mbSizeFormat = TRUE;
@@ -2289,7 +2289,7 @@ void TabBar::SetPageText( USHORT nPageId, const XubString& rText )
XubString TabBar::GetPageText( USHORT nPageId ) const
{
USHORT nPos = GetPagePos( nPageId );
if ( nPos != TAB_PAGE_NOTFOUND )
if ( nPos != TABBAR_PAGE_NOTFOUND )
return mpItemList->GetObject( nPos )->maText;
else
return XubString();
@@ -2300,7 +2300,7 @@ XubString TabBar::GetPageText( USHORT nPageId ) const
void TabBar::SetHelpText( USHORT nPageId, const XubString& rText )
{
USHORT nPos = GetPagePos( nPageId );
if ( nPos != TAB_PAGE_NOTFOUND )
if ( nPos != TABBAR_PAGE_NOTFOUND )
mpItemList->GetObject( nPos )->maHelpText = rText;
}
@@ -2309,7 +2309,7 @@ void TabBar::SetHelpText( USHORT nPageId, const XubString& rText )
XubString TabBar::GetHelpText( USHORT nPageId ) const
{
USHORT nPos = GetPagePos( nPageId );
if ( nPos != TAB_PAGE_NOTFOUND )
if ( nPos != TABBAR_PAGE_NOTFOUND )
{
ImplTabBarItem* pItem = mpItemList->GetObject( nPos );
if ( !pItem->maHelpText.Len() && pItem->mnHelpId )
@@ -2330,7 +2330,7 @@ XubString TabBar::GetHelpText( USHORT nPageId ) const
void TabBar::SetHelpId( USHORT nPageId, ULONG nHelpId )
{
USHORT nPos = GetPagePos( nPageId );
if ( nPos != TAB_PAGE_NOTFOUND )
if ( nPos != TABBAR_PAGE_NOTFOUND )
mpItemList->GetObject( nPos )->mnHelpId = nHelpId;
}
@@ -2339,7 +2339,7 @@ void TabBar::SetHelpId( USHORT nPageId, ULONG nHelpId )
ULONG TabBar::GetHelpId( USHORT nPageId ) const
{
USHORT nPos = GetPagePos( nPageId );
if ( nPos != TAB_PAGE_NOTFOUND )
if ( nPos != TABBAR_PAGE_NOTFOUND )
return mpItemList->GetObject( nPos )->mnHelpId;
else
return 0;

View File

@@ -2,19 +2,15 @@ Layout engine for OpenOffice.org - Work in Progress
Simple dialogs have been ported now: zoom and wordcount.
Code lives in "layout" CWS.
New code lives in "layoutdialogs" CWS or ooo-build trunk.
* Ceckout layout cws.
* Checkout layoutdialogs cws.
* Configure using --enable-layout.
* dmake all
* [d]make all
* dmake install DESTDIR=$(pwd)/ooo-layout/
* Source refresh in workben/layout, do something like
cd toolkit/workben/layout && . ./refresh --inst .../ooo-layout/
* [d]make install DESTDIR=$(pwd)/ooo-layout/
Integration into OOo:
@@ -24,3 +20,5 @@ Integration into OOo:
./soffice.bin
Start a [Writer] document and choose View/Zoom or Extra/Word count.
* Also See workben/layout/README.

View File

@@ -4,6 +4,11 @@
** Move everything & development into new layout-dialogs CWS
** cleanups
*** Add XRadioButton2 and layout::VCLXRadioButton with
{get,set}RadioGroup. Remove import.cxx RadioGroups::RadioGroup,
VCLXRadioButton::getFirstActionListener () and [actionListener
juggling in] layout::RadioButton_impl::SetClickHdl() and
EnableRadioCheck() layout::RadioButton_impl::Check.
*** layout/import.hxx: what's this generator stuff?
#if 0
// generator
@@ -87,7 +92,6 @@ but keep using yes/no on Windows, eg?
*** remove -DTEST_LAYOUT=1 from util/makefile.mk?
** fixes
*** mpRadioGroup HACK --> use radiogroup property
*** missing properties
'title' -> 'Set Zoom'
Missing prop Title
@@ -102,12 +106,18 @@ fHorAlign = fVerAlign = 0.5; --> float const [CENTER?] = 0.5;
** include full translations
*** zoom
grep zoom.src svx/source/dialog/localize.sdf | awk -F'\t' '{printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "layout", "janneke\\vc\\layout-cws\\toolkit\\workben\\layout\\zoom.xml", $3, "layout", $6 "_label", "", "", $8, "0", $10, $11, $12, "", $14, $15}' | sed -e 's/FL_\(ZOOM\)_label/FL_\1_text/' -e 's/\t_label/\tRID_SVXDLG_ZOOM_title/'
**** done, except for View Layout update: no strings in localize.sdf yet,
must redo.
grep zoom.src svx/source/dialog/localize.sdf | awk -F'\t' '{printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "layout", "janneke\\vc\\layout-cws\\toolkit\\workben\\layout\\zoom.xml", $3, "layout", $6 "_label", "", "", $8, "0", $10, $11, $12, "", $14, $15}' | sed -e 's/\(\(FL\|STR\)_[^\t]*\)_label/\1_text/' -e 's/\t_label/\tRID_SVXDLG_ZOOM_title/'
*** wordcount
grep wordcountdialog.src sw/source/ui/dialog/localize.sdf | awk -F'\t' '{printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "layout", "janneke\\vc\\layout-cws\\toolkit\\workben\\layout\\workben.xml", $3, "layout", $6 "_label", "", "", $8, "0", $10, $11, $12, "", $14, $15}' | sed -e 's/FL_\([A-Z]*\)_label/FL_\1_text/' -e 's/\t_label/\tDLG_WORDCOUNT_title/'s
*** sortdlg
grep sortdlg.src ../../../sc/source/ui/src/localize.sdf | awk -F'\t' '{printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "layout", "janneke\\vc\\layout-cws\\toolkit\\workben\\layout\\sort-options.xml", $3, "layout", $6 "_label", "", "", $8, "0", $10, $11, $12, "", $14, $15}' | sed -e 's/\(\(FL\|STR\)_[^\t]*\)_label/\1_text/' -e 's/\t_label/\tRID_SCDLG_SORT_title/' | grep -E ' (nl|de|en-US) ' > localize-str.sdf
grep sortdlg.src sc/source/ui/src/localize.sdf | awk -F'\t' '{printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "layout", "sc\\uiconfig\\layout\\sort-options.xml", $3, "layout", $6 "_label", "", "", $8, "0", $10, $11, $12, "", $14, $15}' | sed -e 's/\(\(FL\|STR\)_[^\t]*\)_label/\1_text/' -e 's/\t_label/\tRID_SCDLG_SORT_title/' > sc/uiconfig/layout/localize-sort-options.sdf
*** insert-sheet
grep instbdlg.src sc/source/ui/miscdlgs/localize.sdf | awk -F'\t' '{printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "layout", "sc\\uiconfig\\layout\\insert-sheet.xml", $3, "layout", $6 "_label", "", "", $8, "0", $10, $11, $12, "", $14, $15}' | sed -e 's/\(\(FL\|STR\)_[^\t]*\)_label/\1_text/' -e 's/\t_label/\tRID_SCDLG_INSERT_TABLE_title/' > sc/uiconfig/layout/localize-insert-sheet.sdf
*** move-copy-sheet
grep -E 'miscdlgs.src.*(FT_DEST|FT_INSERT|STR_NEWDOC|RID_SCDLG_MOVETAB|BTN_COPY)' sc/source/ui/src/localize.sdf | awk -F'\t' '{printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "layout", "sc\\uiconfig\\layout\\move-copy-sheet.xml", $3, "layout", $6 "_label", "", "", $8, "0", $10, $11, $12, "", $14, $15}' | sed -e 's/\(\(FL\|STR\)_[^\t]*\)_label/\1_text/' -e 's/\t_label/\tRID_SCDLG_MOVETAB_title/' > sc/uiconfig/layout/localize-move-copy-sheet.sdf
*** find-and-replace
grep srchdlg.src svx/source/dialog/localize.sdf | awk -F'\t' '{printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "layout", "svx\\uiconfig\\layout\\find-and-replace.xml", $3, "layout", $6 "_label", "", "", $8, "0", $10, $11, $12, "", $14, $15}' | sed -e 's/\(\(FL\|STR\)_[^\t]*\)_label/\1_text/' -e 's/\t_label/\tRID_SVXDLG_SEARCH_title/' > svx/uiconfig/layout/localize-find-and-replace.sdf
* i18n
+ forget java property files nonsense

View File

@@ -34,40 +34,73 @@
#if ENABLE_LAYOUT
/* Allow re-inclusion for cxx file. */
#undef _LAYOUT_PRE_HXX
#undef AdvancedButton
#undef ApplyButton
#undef Box
#undef Button
#undef CancelButton
#undef CheckBox
#undef ComboBox
#undef Container
#undef Control
#undef Dialog
#undef Edit
#undef ErrorBox
#undef FixedImage
#undef FixedInfo
#undef FixedLine
#undef FixedText
#undef HelpButton
#undef HBox
#undef HelpButton
#undef IgnoreButton
#undef ImageButton
#undef InfoBox
#undef ListBox
#undef MessBox
#undef MessageBox
#undef MetricField
#undef MetricFormatter
#undef MoreButton
#undef MultiLineEdit
#undef MultiListBox
#undef NoButton
#undef NumericField
#undef NumericFormatter
#undef OKButton
#undef Plugin
#undef ProgressBar
#undef PushButton
#undef QueryBox
#undef RadioButton
#undef SfxModalDialog
#undef ResetButton
#undef RetryButton
#undef SfxTabPage
#undef SfxTabDialog
#undef SpinField
#undef TabDialog
#undef TabControl
#undef TabPage
#undef Table
#undef VBox
#undef WarningBox
#undef YesButton
#undef SvxFontListBox
#undef SvxLanguageBox
#undef ModalDialog
#undef ModelessDialog
#undef ScExpandedFixedText
#undef SfxDialog
#undef SfxModalDialog
#undef SfxModelessDialog
#undef Window
#undef SVX_RES
#define SVX_RES(i) ResId(i,DIALOG_MGR())
#undef SW_RES
#define SW_RES(i) ResId(i,SWDIALOG_MGR())
/* Allow re-inclusion for cxx file. */
#undef _LAYOUT_PRE_HXX
#endif /* ENABLE_LAYOUT */
#endif /* _LAYOUT_POST_HXX */

View File

@@ -34,83 +34,78 @@
#if ENABLE_LAYOUT
//#if !LAYOUT
//#define LAYOUT 1
//#endif
//#define LAYOUT_NS layout
// TWBN, but find that SfxModalDialog and FixedLine are already defined, eg compiling
// dlgfact.cxx
//typedef layout::Dialog SfxModalDialog;
//typedef layout::FixedLine FixedLine;
///* Allow re-inclusion for next hxx file. */
#undef _LAYOUT_POST_HXX
#define AdvancedButton layout::AdvancedButton
#define ApplyButton layout::ApplyButton
#define Box layout::Box
#define Button layout::Button
#define CancelButton layout::CancelButton
#define CheckBox layout::CheckBox
#define ComboBox layout::ComboBox
#define Container layout::Container
#define Control layout::Control
#define Dialog layout::Dialog
#define Edit layout::Edit
#define ErrorBox layout::ErrorBox
#define FixedImage layout::FixedImage
#define FixedInfo layout::FixedInfo
#define FixedLine layout::FixedLine
#define FixedText layout::FixedText
#define HBox layout::HBox
#define HelpButton layout::HelpButton
#define IgnoreButton layout::IgnoreButton
#define ImageButton layout::ImageButton
#define InfoBox layout::InfoBox
#define LocalizedString layout::LocalizedString
#define ListBox layout::ListBox
#define MessBox layout::MessBox
#define MessageBox layout::MessageBox
#define MetricField layout::MetricField
#define MetricFormatter layout::MetricFormatter
#define MoreButton layout::MoreButton
#define MultiLineEdit layout::MultiLineEdit
#define MultiListBox layout::MultiListBox
#define NoButton layout::NoButton
#define NumericField layout::NumericField
#define NumericFormatter layout::NumericFormatter
#define OKButton layout::OKButton
#define Plugin layout::Plugin
#define ProgressBar layout::ProgressBar
#define PushButton layout::PushButton
#define QueryBox layout::QueryBox
#define RadioButton layout::RadioButton
#define SfxModalDialog layout::Dialog
#define ResetButton layout::ResetButton
#define RetryButton layout::RetryButton
#define SfxTabDialog layout::SfxTabDialog
#define SfxTabPage layout::SfxTabPage
#if ENABLE_LAYOUT
#define SvxFontListBox layout::SvxFontListBox
#define SvxLanguageBox layout::SvxLanguageBox
#endif
#define SpinField layout::SpinField
#define TabControl layout::TabControl
#define TabPage layout::TabPage
#define Table layout::Table
#define VBox layout::VBox
#define WarningBox layout::WarningBox
#define YesButton layout::YesButton
/* FIXME: why are we defaulting to layout::Window?
/home/janneke/vc/ooo-build/build/hack/sw/source/ui/dialog/wordcountdialog.cxx:87: error: no matching function for call to 'layout::Dialog::Dialog(Window*&, const char [14], const char [7])'
../../../../layout/inc/layout/layout.hxx:304: note: candidates are: layout::Dialog::Dialog(layout::Window*, const char*, const char*, sal_uInt32)
../../../../layout/inc/layout/layout.hxx:300: note: layout::Dialog::Dialog(const layout::Dialog&)
*/
#define ModalDialog Dialog
#define ModelessDialog Dialog
#define ScExpandedFixedText FixedText
#define SfxDialog Dialog
#define SfxModalDialog Dialog
#define SfxModelessDialog Dialog
#define TabDialog Dialog
#define Window ::Window
#undef SVX_RES
#define SVX_RES(x) #x
#undef SW_RES
#define SW_RES(x) #x
#else
/* Hmm. This hack makes zoom.cxx, wordcountdialog.cxx diffs smaller
* but is not scalable. */
#ifdef _LAYOUT_POST_HXX
#define LocalizedString String
#ifdef _SVX_RECOVER_CXX
#undef SfxModalDialog
// 3rd parameter must match ID in <modaldialog> "RID_SVXDLG_RECOVER", localize.sdf
#define SfxModalDialog( pParent, SVX_RES_RID ) layout::Dialog( pParent, "recover.xml", "RID_SVXDLG_RECOVER" )
//#define _SVX_RECOVER_HRC
#endif /* _SVX_RECOVER_CXX */
#ifdef SW_WORDCOUNTDIALOG_HXX
#undef SfxModalDialog
// 3rd parameter must match ID in <modaldialog> "DLG_WORDCOUNT", localize.sdf
#define SfxModalDialog( pParent, SW_RES_RID ) layout::Dialog( pParent, "wordcount.xml", "DLG_WORDCOUNT" )
#define SW_WORDCOUNTDIALOG_HRC
#endif /* SW_WORDCOUNTDIALOG_HXX */
#ifdef _SVX_ZOOM_CXX
#undef SfxModalDialog
// 3rd parameter must match ID in <modaldialog> "RID_SVXDLG_ZOOM", localize.sdf
#define SfxModalDialog( pParent, SVX_RES_RID ) layout::Dialog( pParent, "zoom.xml", "RID_SVXDLG_ZOOM" )
#define _SVX_ZOOM_HRC
#endif /* _SVX_ZOOM_CXX */
#endif /* _LAYOUT_POST_HXX */
#else /* !ENABLE_LAYOUT */
#define LAYOUT_PRE_POST
#endif /* !ENABLE_LAYOUT */
#endif /* ENABLE_LAYOUT */
#endif /* _LAYOUT_PRE_HXX */

View File

@@ -32,21 +32,54 @@
#ifndef _LAYOUT_HXX
#define _LAYOUT_HXX
#include <com/sun/star/uno/XInterface.hpp>
#include <com/sun/star/awt/XLayoutContainer.hpp>
#include <com/sun/star/uno/XInterface.hpp>
#include <com/sun/star/util/Color.hpp>
#include <i18npool/lang.h>
#include <toolkit/dllapi.h>
#include <tools/gen.hxx>
#include <tools/link.hxx>
#include <tools/string.hxx>
// FIXME: eventually wrap FieldUnit
#include <vcl/bitmap.hxx>
#include <vcl/combobox.h>
#include <vcl/fldunit.hxx>
// FIXME: eventually wrap this too ...
#include <vcl/lstbox.h>
#include <vcl/smartid.hxx>
#include <vcl/wintypes.hxx>
#include <toolkit/dllapi.h>
class Window;
class Button;
class ComboBox;
class Color;
class Control;
class Dialog;
class Edit;
class Font;
class Image;
class ListBox;
class MapMode;
class MultiListBox;
class NotifyEvent;
class Pointer;
class PushButton;
class RadioButton;
class ResId;
struct SfxChildWinInfo;
//class SvxFontListBox;
//class SvxLanguageBox;
class TabControl;
class TabPage;
class VCLXRadioButton;
class VCLXWindow;
class Window;
namespace layoutimpl
{
class VCLXTabControl;
}
class VCLXTabControl;
namespace com { namespace sun { namespace star { namespace awt { class XWindow; } } } }
namespace layout
{
@@ -60,8 +93,8 @@ class TOOLKIT_DLLPUBLIC Context
ContextImpl *pImpl;
public:
Context( char const* pPath );
~Context();
PeerHandle GetPeerHandle( char const* pId, sal_uInt32 nId = 0 ) const;
virtual ~Context();
PeerHandle GetPeerHandle( char const* id, sal_uInt32 nId = 0 ) const;
void setToplevel( PeerHandle xToplevel );
PeerHandle getToplevel();
PeerHandle getRoot();
@@ -74,36 +107,95 @@ public:
par( pImpl ) {} \
char const* GetUnoName() const; \
public: \
t( Context *pCtx, char const* pId, sal_uInt32 nId = 0 ); \
t( Window *pParent, WinBits nStyle = defaultWinBit )
t( Context *context, char const* id, sal_uInt32 nId = 0 ); \
t( Window *parent, WinBits nStyle = defaultWinBit ); \
t (Window *parent, ResId const &res)
#define DECL_GET_IMPL(t) \
inline t##Impl &getImpl() const
#define DECL_GET_WINDOW( cls ) ::cls* Get##cls() const
#define IMPL_GET_WINDOW( cls ) ::cls* cls::Get##cls() const { return dynamic_cast< ::cls*>( GetWindow() ); }
#define DECL_GET_VCLXWINDOW( cls ) ::VCLX##cls* GetVCLX##cls() const
#define IMPL_GET_VCLXWINDOW( cls ) ::VCLX##cls* cls::Get##VCLX##cls() const { return dynamic_cast< ::VCLX##cls*>( GetVCLXWindow() ); }
#define DECL_GET_LAYOUT_VCLXWINDOW( cls ) ::layoutimpl::VCLX##cls* GetVCLX##cls() const
#define IMPL_GET_LAYOUT_VCLXWINDOW( cls ) ::layoutimpl::VCLX##cls* cls::Get##VCLX##cls() const { return dynamic_cast< ::layoutimpl::VCLX##cls*>( GetVCLXWindow() ); }
// follows the VCL inheritance hierarchy ...
class WindowImpl;
class TOOLKIT_DLLPUBLIC Window
{
protected:
friend class WindowImpl;
WindowImpl *mpImpl;
static PeerHandle CreatePeer( Window *pParent, WinBits nStyle,
static PeerHandle CreatePeer( Window *parent, WinBits nStyle,
char const* pName);
virtual void setRes (ResId const& res);
public:
PeerHandle GetPeer();
Context *getContext();
DECL_GET_IMPL( Window );
explicit Window( WindowImpl *pImpl );
virtual ~Window();
PeerHandle GetPeer() const;
Context *getContext();
void Enable( bool bEnable = true );
inline void Disable() { Enable( false ); }
void Show( BOOL bVisible = TRUE );
inline void Hide() { Show( FALSE ); }
void Show( bool bVisible = true );
inline void Hide() { Show( false ); }
void GrabFocus();
void FreeResource() {}
void SetParent( ::Window *parent );
virtual void ParentSet (Window *window);
void SetParent( Window *parent );
css::uno::Reference<css::awt::XWindow> GetRef() const;
VCLXWindow* GetVCLXWindow() const;
::Window* GetWindow() const;
::Window* GetParent() const;
void SetPointer( Pointer const& pointer );
Pointer const& GetPointer() const;
WinBits GetStyle();
void SetStyle( WinBits nStyle );
void SetText( rtl::OUString const& str );
String GetText() const;
void SetStyle( WinBits style );
void SetUpdateMode( bool mode );
void SetHelpId( sal_uIntPtr id );
sal_uIntPtr GetHelpId() const;
void SetSmartHelpId( SmartId const&, SmartIdUpdateMode mode=SMART_SET_SMART );
SmartId GetSmartHelpId() const;
void EnterWait ();
void LeaveWait ();
bool IsWait () const;
//void Enable (bool enable=true, bool child=true);
//void Disable (bool child=true);
bool IsEnabled () const;
void EnableInput (bool enable=true, bool child=true);
bool IsInputEnabled () const;
bool IsVisible () const;
bool HasChildPathFocus (bool systemWindow=false) const;
void SetPosPixel (Point const&);
Point GetPosPixel () const;
void SetSizePixel (Size const&);
Size GetSizePixel () const;
void SetPosSizePixel (Point const&, Size const&);
sal_Int32 GetCtrlTextWidth (rtl::OUString const& str) const;
sal_Int32 GetTextHeight () const;
Size LogicToPixel( Size const& size ) const;
Size LogicToPixel( Size const& size, MapMode const& mapMode ) const;
bool HasFocus () const;
Font& GetFont () const;
void SetFont (Font const& font);
virtual void Invalidate (sal_uInt8 flags=0);
};
class ControlImpl;
@@ -111,34 +203,39 @@ class TOOLKIT_DLLPUBLIC Control : public Window
{
DECL_GET_IMPL( Control );
DECL_CONSTRUCTORS( Control, Window, 0 );
public:
// void SetText( String const& rStr ); - can't do this here ...
~Control ();
void SetGetFocusHdl (Link const& link);
Link& GetGetFocusHdl ();
void SetLoseFocusHdl (Link const& link);
Link& GetLoseFocusHdl ();
};
class FixedLineImpl;
class TOOLKIT_DLLPUBLIC FixedLine : public Control
{
friend class FixedLineImpl;
DECL_GET_IMPL( FixedLine );
DECL_CONSTRUCTORS( FixedLine, Control, WB_HORZ );
public:
bool IsEnabled();
bool IsEnabled() const;
};
class FixedTextImpl;
class TOOLKIT_DLLPUBLIC FixedText : public Control
{
friend class FixedTextImpl;
DECL_GET_IMPL( FixedText );
DECL_CONSTRUCTORS( FixedText, Control, 0 );
public:
void SetText( String const& rStr );
~FixedText ();
void SetText( rtl::OUString const& rStr );
};
class FixedImageImpl;
class TOOLKIT_DLLPUBLIC FixedImage : public Control
{
friend class FixedImageImpl;
DECL_GET_IMPL( FixedImage );
DECL_CONSTRUCTORS( FixedImage, Control, 0 );
public:
@@ -148,7 +245,6 @@ public:
class FixedInfoImpl;
class TOOLKIT_DLLPUBLIC FixedInfo : public FixedText
{
friend class FixedInfoImpl;
DECL_GET_IMPL( FixedInfo );
DECL_CONSTRUCTORS( FixedInfo, FixedText, 0 );
};
@@ -166,16 +262,21 @@ public:
class ButtonImpl;
class TOOLKIT_DLLPUBLIC Button : public Control
{
friend class ButtonImpl;
DECL_GET_IMPL( Button );
DECL_CONSTRUCTORS( Button, Control, 0 );
DECL_GET_WINDOW (Button);
public:
void SetText( String const& rStr );
BOOL SetModeImage( const Image& rImage );
~Button ();
static String GetStandardText (sal_uInt16 button_type);
void SetText( rtl::OUString const& rStr );
bool SetModeImage (Image const& image);
bool SetModeImage (::Image const& image, BmpColorMode mode=BMP_COLOR_NORMAL);
void SetImageAlign( ImageAlign eAlign );
void SetClickHdl( Link const& rLink );
virtual void Click() /* pure virtual? */;
Link& GetClickHdl ();
};
class PushButtonImpl;
@@ -183,9 +284,12 @@ class TOOLKIT_DLLPUBLIC PushButton : public Button
{
DECL_GET_IMPL( PushButton );
DECL_CONSTRUCTORS( PushButton, Button, 0 );
DECL_GET_WINDOW (PushButton);
public:
void Check( BOOL bCheck = TRUE );
BOOL IsChecked() const;
~PushButton ();
void Check( bool bCheck=true );
bool IsChecked() const;
void Toggle();
void SetToggleHdl( Link const& rLink );
@@ -227,6 +331,10 @@ class TOOLKIT_DLLPUBLIC HelpButton : public PushButton
{
DECL_CONSTRUCTORS( HelpButton, PushButton, 0 );
};
class TOOLKIT_DLLPUBLIC ImageButton : public PushButton
{
DECL_CONSTRUCTORS( ImageButton, PushButton, 0 );
};
class AdvancedButtonImpl;
class TOOLKIT_DLLPUBLIC AdvancedButton : public PushButton
@@ -238,6 +346,12 @@ class TOOLKIT_DLLPUBLIC AdvancedButton : public PushButton
void AddSimple( Window* w );
void RemoveAdvanced( Window* w );
void RemoveSimple( Window* w );
void SetAdvancedText (rtl::OUString const& text);
void SetSimpleText (rtl::OUString const& text);
rtl::OUString GetAdvancedText () const;
rtl::OUString GetSimpleText () const;
void SetDelta (int);
};
class MoreButtonImpl;
@@ -247,6 +361,11 @@ class TOOLKIT_DLLPUBLIC MoreButton : public AdvancedButton
DECL_GET_IMPL( MoreButton );
void AddWindow( Window* w );
void RemoveWindow( Window* w );
void SetMoreText (rtl::OUString const& text);
void SetLessText (rtl::OUString const& text);
rtl::OUString GetMoreText () const;
rtl::OUString GetLessText () const;
};
class RadioButtonImpl;
@@ -254,9 +373,12 @@ class TOOLKIT_DLLPUBLIC RadioButton : public Button
{
DECL_GET_IMPL( RadioButton );
DECL_CONSTRUCTORS( RadioButton, Button, 0 );
DECL_GET_WINDOW( RadioButton );
DECL_GET_VCLXWINDOW( RadioButton );
public:
void Check( BOOL bCheck = TRUE );
BOOL IsChecked() const;
~RadioButton ();
void Check( bool bCheck=true );
bool IsChecked() const;
void Toggle();
void SetToggleHdl( Link const& rLink );
@@ -267,9 +389,11 @@ class TOOLKIT_DLLPUBLIC CheckBox : public Button
{
DECL_GET_IMPL( CheckBox );
DECL_CONSTRUCTORS( CheckBox, Button, 0 );
public:
void Check( BOOL bCheck = TRUE );
BOOL IsChecked() const;
~CheckBox ();
void Check( bool bCheck=true );
bool IsChecked() const;
void Toggle();
void SetToggleHdl( Link const& rLink );
@@ -280,10 +404,14 @@ class TOOLKIT_DLLPUBLIC Edit : public Control
{
DECL_GET_IMPL( Edit );
DECL_CONSTRUCTORS( Edit, Control, WB_BORDER );
DECL_GET_WINDOW (Edit);
public:
void SetText( XubString const& rStr ) const;
XubString GetText() const;
~Edit ();
void SetText( rtl::OUString const& rStr );
String GetText() const;
void SetModifyHdl( Link const& rLink );
void SetSelection( Selection const& rSelection );
};
class MultiLineEditImpl;
@@ -305,8 +433,7 @@ class TOOLKIT_DLLPUBLIC FormatterBase
{
protected:
FormatterBaseImpl *mpFormatImpl;
FormatterBase( FormatterBaseImpl *pFormatImpl )
: mpFormatImpl( pFormatImpl ) {}
FormatterBase( FormatterBaseImpl *pFormatImpl );
};
class NumericFormatterImpl;
@@ -331,8 +458,8 @@ class TOOLKIT_DLLPUBLIC NumericField : public SpinField, public NumericFormatter
{
DECL_GET_IMPL( NumericField );
public:
NumericField( Context *pCtx, char const* pId, sal_uInt32 nId = 0 );
NumericField( Window *pParent, WinBits nStyle );
NumericField( Context *context, char const* id, sal_uInt32 nId=0 );
NumericField( Window *parent, WinBits nStyle );
};
class MetricFormatterImpl;
@@ -343,12 +470,12 @@ class TOOLKIT_DLLPUBLIC MetricFormatter : public FormatterBase
explicit MetricFormatter( FormatterBaseImpl *pImpl );
MetricFormatterImpl &getFormatImpl() const;
public:
void SetMin( sal_Int64 nNewMin, FieldUnit nUnit = FUNIT_NONE );
void SetMax( sal_Int64 nNewMax, FieldUnit nUnit = FUNIT_NONE );
void SetFirst( sal_Int64 nNewFirst, FieldUnit nUnit = FUNIT_NONE );
void SetLast( sal_Int64 nNewLast, FieldUnit nUnit = FUNIT_NONE );
void SetValue( sal_Int64 nNewValue, FieldUnit nUnit = FUNIT_NONE );
sal_Int64 GetValue( FieldUnit nUnit = FUNIT_NONE ) const;
void SetMin( sal_Int64 nNewMin, FieldUnit nUnit=FUNIT_NONE );
void SetMax( sal_Int64 nNewMax, FieldUnit nUnit=FUNIT_NONE );
void SetFirst( sal_Int64 nNewFirst, FieldUnit nUnit=FUNIT_NONE );
void SetLast( sal_Int64 nNewLast, FieldUnit nUnit=FUNIT_NONE );
void SetValue( sal_Int64 nNewValue, FieldUnit nUnit=FUNIT_NONE );
sal_Int64 GetValue( FieldUnit nUnit=FUNIT_NONE ) const;
void SetSpinSize( sal_Int64 nNewSize );
};
@@ -358,73 +485,209 @@ class TOOLKIT_DLLPUBLIC MetricField : public SpinField, public MetricFormatter
{
DECL_GET_IMPL( MetricField );
public:
MetricField( Context *pCtx, char const* pId, sal_uInt32 nId = 0 );
MetricField( Window *pParent, WinBits nStyle );
MetricField( Context *context, char const* id, sal_uInt32 nId=0 );
MetricField( Window *parent, WinBits nStyle );
};
#define COMBOBOX_APPEND ((USHORT)0xFFFF)
#define COMBOBOX_ENTRY_NOTFOUND ((USHORT)0xFFFF)
class ComboBoxImpl;
class TOOLKIT_DLLPUBLIC ComboBox : public Edit
{
DECL_GET_IMPL( ComboBox );
DECL_GET_WINDOW (ComboBox );
DECL_CONSTRUCTORS( ComboBox, Edit, 0 );
public:
USHORT InsertEntry( XubString const& rStr, USHORT nPos = COMBOBOX_APPEND );
void RemoveEntry( XubString const& rStr );
void RemoveEntry( USHORT nPos );
~ComboBox ();
sal_uInt16 InsertEntry( String const& rStr, sal_uInt16 nPos=COMBOBOX_APPEND );
void RemoveEntry( String const& rStr );
void RemoveEntry( sal_uInt16 nPos );
void Clear();
USHORT GetEntryPos( XubString const& rStr ) const;
XubString GetEntry( USHORT nPos ) const;
USHORT GetEntryCount() const;
sal_uInt16 GetEntryPos( String const& rStr ) const;
String GetEntry( sal_uInt16 nPos ) const;
sal_uInt16 GetEntryCount() const;
void SetClickHdl( Link const& rLink );
void SetSelectHdl( Link const& rLink );
void EnableAutocomplete (bool enable, bool matchCase=false );
};
#define LISTBOX_APPEND ((USHORT)0xFFFF)
#define LISTBOX_ENTRY_NOTFOUND ((USHORT)0xFFFF)
class ListBoxImpl;
class TOOLKIT_DLLPUBLIC ListBox : public Control
{
DECL_GET_IMPL( ListBox );
DECL_CONSTRUCTORS( ListBox, Control, WB_BORDER );
public:
USHORT InsertEntry( XubString const& rStr, USHORT nPos = LISTBOX_APPEND );
DECL_GET_WINDOW (ListBox);
void RemoveEntry( XubString const& rStr );
void RemoveEntry( USHORT nPos );
public:
~ListBox ();
sal_uInt16 InsertEntry( String const& rStr, sal_uInt16 nPos=LISTBOX_APPEND );
void RemoveEntry( String const& rStr );
void RemoveEntry( sal_uInt16 nPos );
void Clear();
USHORT GetEntryPos( XubString const& rStr ) const;
XubString GetEntry( USHORT nPos ) const;
USHORT GetEntryCount() const;
sal_uInt16 GetEntryPos( String const& rStr ) const;
String GetEntry( sal_uInt16 nPos ) const;
sal_uInt16 GetEntryCount() const;
void SelectEntry( XubString const& rStr, BOOL bSelect = TRUE );
void SelectEntryPos( USHORT nPos, BOOL bSelect = TRUE );
void SelectEntry( String const& rStr, bool bSelect=true );
void SelectEntryPos( sal_uInt16 nPos, bool bSelect=true );
USHORT GetSelectEntryCount() const;
XubString GetSelectEntry( USHORT nSelIndex = 0 ) const;
USHORT GetSelectEntryPos( USHORT nSelIndex = 0 ) const;
sal_uInt16 GetSelectEntryCount() const;
String GetSelectEntry( sal_uInt16 nSelIndex=0 ) const;
sal_uInt16 GetSelectEntryPos( sal_uInt16 nSelIndex=0 ) const;
void SetSelectHdl( Link const& rLink );
void SetClickHdl( Link const& rLink );
void SetSelectHdl (Link const& link);
Link& GetSelectHdl ();
void SetClickHdl (Link const& link);
Link& GetClickHdl ();
void SetDoubleClickHdl (Link const& link);
Link& GetDoubleClickHdl ();
void SetEntryData (sal_uInt16 pos, void* data);
void* GetEntryData (sal_uInt16 pos) const;
virtual void SetNoSelection ();
};
class MultiListBoxImpl;
class TOOLKIT_DLLPUBLIC MultiListBox : public ListBox
{
DECL_GET_IMPL( MultiListBox );
DECL_CONSTRUCTORS( MultiListBox, ListBox, 0 );
DECL_GET_WINDOW( MultiListBox );
};
class DialogImpl;
class TOOLKIT_DLLPUBLIC Dialog : public Context, public Window
{
DECL_GET_IMPL( Dialog );
void SetParent( Window *pParent );
void SetParent( ::Window *pParent );
DECL_GET_WINDOW (Dialog);
public:
Dialog( Window *pOptParent, char const* pXMLPath, char const* pId, sal_uInt32 nId = 0 );
Dialog( ::Window *pOptParent, char const* pXMLPath, char const* pId, sal_uInt32 nId = 0 );
short Execute();
void EndDialog( long nResult = 0 );
void SetText( String const& rStr );
DECL_GET_IMPL (Dialog);
Dialog( Window *parent, char const* xml_file, char const* id, sal_uInt32 nId=0 );
Dialog( ::Window *parent, char const* xml_file, char const* id, sal_uInt32 nId=0 );
~Dialog ();
virtual short Execute();
void EndDialog( long nResult=0 );
void SetText( rtl::OUString const& rStr );
void SetTitle (rtl::OUString const& rStr );
bool Close ();
long Notify (NotifyEvent & event);
// Sxf*Dialog
bool bConstruct;
void Initialize (SfxChildWinInfo*);
};
#define DECL_MESSAGE_BOX_CTORS(Name)\
public:\
Name##Box (::Window *parent, char const* message,\
char const* yes=0, char const* no=0, sal_uIntPtr help_id=0,\
char const* xml_file="message-box.xml", char const* id="message-box");\
Name##Box (::Window *parent, rtl::OUString const& message,\
rtl::OUString yes=String (),\
rtl::OUString no=String (),\
sal_uIntPtr help_id=0,\
char const* xml_file="message-box.xml", char const* id="message-box");\
Name##Box (::Window *parent, WinBits, char const* message,\
char const* yes=0, char const* no=0, sal_uIntPtr help_id=0,\
char const* xml_file="message-box.xml", char const* id="message-box");\
Name##Box (::Window *parent, WinBits, rtl::OUString const& message,\
rtl::OUString yes=String (),\
rtl::OUString no=String (),\
sal_uIntPtr help_id=0,\
char const* xml_file="message-box.xml", char const* id="message-box")\
class TOOLKIT_DLLPUBLIC MessageBox : public Dialog
{
DECL_MESSAGE_BOX_CTORS(Message);
protected:
FixedImage imageError;
FixedImage imageInfo;
FixedImage imageQuery;
FixedImage imageWarning;
FixedText messageText;
CancelButton cancelButton;
HelpButton helpButton;
IgnoreButton ignoreButton;
NoButton noButton;
RetryButton retryButton;
YesButton yesButton;
void bits_init (WinBits bits, rtl::OUString const& message,
rtl::OUString yes, rtl::OUString, sal_uIntPtr help_id);
void init (rtl::OUString const& message,
rtl::OUString const& yes, rtl::OUString const& no, sal_uIntPtr help_id);
void init (char const* message, char const* yes, char const* no, sal_uIntPtr help_id);
};
#define CLASS_MESSAGE_BOX(Name)\
class TOOLKIT_DLLPUBLIC Name##Box : public MessageBox\
{\
DECL_MESSAGE_BOX_CTORS (Name);\
}
//CLASS_MESSAGE_BOX (Mess);
typedef MessageBox MessBox;
CLASS_MESSAGE_BOX (Error);
CLASS_MESSAGE_BOX (Info);
CLASS_MESSAGE_BOX (Query);
CLASS_MESSAGE_BOX (Warning);
#undef CLASS_MESSAGE_BOX
#undef TAB_APPEND
class TabControlImpl;
class TOOLKIT_DLLPUBLIC TabControl : public Control
{
//#ifndef TAB_APPEND
#define TAB_APPEND 0xFFFF
//#endif /* !TAB_APPEND */
DECL_GET_IMPL (TabControl);
DECL_CONSTRUCTORS (TabControl, Control, 0);
DECL_GET_WINDOW (TabControl);
DECL_GET_LAYOUT_VCLXWINDOW (TabControl);
public:
~TabControl ();
void InsertPage (sal_uInt16 id, rtl::OUString const& title, sal_uInt16 pos=TAB_APPEND);
void RemovePage (sal_uInt16 id);
sal_uInt16 GetPageCount () const;
sal_uInt16 GetPageId (sal_uInt16 pos) const;
sal_uInt16 GetPagePos (sal_uInt16 id) const;
void SetCurPageId (sal_uInt16 id);
sal_uInt16 GetCurPageId () const;
void SetTabPage (sal_uInt16 id, ::TabPage* page);
::TabPage* GetTabPage (sal_uInt16 id) const;
void SetActivatePageHdl (Link const& link);
Link& GetActivatePageHdl () const;
void SetDeactivatePageHdl (Link const& link);
Link& GetDeactivatePageHdl () const;
void SetTabPageSizePixel (Size const& size);
Size GetTabPageSizePixel () const;
};
class TabPageImpl;
class TOOLKIT_DLLPUBLIC TabPage : public Context, public Window
{
DECL_GET_IMPL( TabPage );
public:
static ::Window* global_parent;
static TabControl* global_tabcontrol;
TabPage( Window *parent, char const* xml_file, char const* id, sal_uInt32 nId=0 );
TabPage( ::Window *parent, char const* xml_file, char const* id, sal_uInt32 nId=0 );
~TabPage();
DECL_GET_WINDOW( TabPage );
virtual void ActivatePage();
virtual void DeactivatePage();
};
class ProgressBarImpl;
@@ -450,7 +713,7 @@ protected:
css::uno::Reference< css::awt::XLayoutContainer > mxContainer;
Container( rtl::OUString const& rName, sal_Int32 nBorder );
public:
Container( Context const* pCtx, char const* pId );
Container( Context const* context, char const* id );
void Add( Window *pWindow );
void Add( Container *pContainer );
@@ -474,11 +737,11 @@ class TOOLKIT_DLLPUBLIC Table : public Container
protected:
Table( sal_Int32 nBorder, sal_Int32 nColumns );
public:
Table( Context const* pCtx, char const* pId );
Table( Context const* context, char const* id );
void Add( Window *pWindow, bool bXExpand, bool bYExpand,
sal_Int32 nXSpan = 1, sal_Int32 nYSpan = 1 );
sal_Int32 nXSpan=1, sal_Int32 nYSpan=1 );
void Add( Container *pContainer, bool bXExpand, bool bYExpand,
sal_Int32 nXSpan = 1, sal_Int32 nYSpan = 1 );
sal_Int32 nXSpan=1, sal_Int32 nYSpan=1 );
private:
void setProps( css::uno::Reference< css::awt::XLayoutConstrains > xChild,
@@ -490,7 +753,7 @@ class TOOLKIT_DLLPUBLIC Box : public Container
protected:
Box( rtl::OUString const& rName, sal_Int32 nBorder, bool bHomogeneous );
public:
Box( Context const* pCtx, char const* pId );
Box( Context const* context, char const* id );
void Add( Window *pWindow, bool bExpand, bool bFill, sal_Int32 nPadding);
void Add( Container *pContainer, bool bExpand, bool bFill, sal_Int32 nPadding);
@@ -502,16 +765,69 @@ private:
class TOOLKIT_DLLPUBLIC HBox : public Box
{
public:
HBox( Context const* pCtx, char const* pId );
HBox( Context const* context, char const* id );
HBox( sal_Int32 nBorder, bool bHomogeneous );
};
class TOOLKIT_DLLPUBLIC VBox : public Box
{
public:
VBox( Context const* pCtx, char const* pId );
VBox( Context const* context, char const* id );
VBox( sal_Int32 nBorder, bool bHomogeneous );
};
class PluginImpl;
class TOOLKIT_DLLPUBLIC Plugin : public Control
{
DECL_GET_IMPL( Plugin );
//DECL_CONSTRUCTORS( Plugin, Control, 0 );
public:
::Control *mpPlugin;
Plugin( Context *context, char const* id, ::Control *plugin );
};
class LocalizedStringImpl;
class TOOLKIT_DLLPUBLIC LocalizedString : public Window
{
DECL_GET_IMPL( LocalizedString );
public:
LocalizedString( Context *context, char const* id );
rtl::OUString operator= (rtl::OUString const&);
rtl::OUString operator+= (sal_Unicode );
rtl::OUString operator+= (rtl::OUString const&);
operator rtl::OUString ();
operator rtl::OUString const& ();
operator String();
String getString ();
rtl::OUString getOUString ();
String GetToken (USHORT i, sal_Char c);
};
class InPlugImpl;
class TOOLKIT_DLLPUBLIC InPlug : public Context, public Window
{
DECL_GET_IMPL (InPlug);
public:
InPlug ( Window *parent, char const* xml_file, char const* id, sal_uInt32 nId=0);
InPlug ( ::Window *parent, char const* xml_file, char const* id, sal_uInt32 nId=0);
void ParentSet (Window *window);
};
} // end namespace layout
#if ENABLE_LAYOUT
#define LAYOUT_NS layout::
#define LAYOUT_DIALOG_PARENT\
VCLXWindow::GetImplementation( uno::Reference <awt::XWindow> ( GetPeer(), uno::UNO_QUERY ) )->GetWindow()
#define LAYOUT_THIS_WINDOW( this ) this->GetWindow ()
#else /* !ENABLE_LAYOUT */
#define LAYOUT_NS
#define LAYOUT_DIALOG_PARENT this
#define LAYOUT_THIS_WINDOW( this ) this
#endif /* !ENABLE_LAYOUT */
#endif /* _LAYOUT_HXX */

View File

@@ -181,6 +181,7 @@ protected:
public:
VCLXButton();
~VCLXButton();
// ::com::sun::star::lang::XComponent
void SAL_CALL dispose( ) throw(::com::sun::star::uno::RuntimeException);
@@ -346,6 +347,8 @@ public:
static void ImplGetPropertyIds( std::list< sal_uInt16 > &aIds );
virtual void GetPropertyIds( std::list< sal_uInt16 > &aIds ) { return ImplGetPropertyIds( aIds ); }
::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getFirstActionListener ();
};
// ----------------------------------------------------
@@ -764,6 +767,7 @@ protected:
public:
VCLXComboBox();
~VCLXComboBox();
// ::com::sun::star::uno::XInterface
::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException);

View File

@@ -2,10 +2,11 @@ ti toolkit : vcl NULL
ti toolkit usr1 - all ti_mkout NULL
ti toolkit\prj get - all ti_prj NULL
ti toolkit\inc nmake - all ti_inc NULL
ti toolkit\uiconfig\layout nmake - all ti_uiconfig_layout NULL
ti toolkit\source\helper nmake - all ti_helper ti_inc NULL
ti toolkit\source\awt nmake - all ti_awt ti_inc NULL
ti toolkit\source\controls nmake - all ti_controls ti_inc NULL
ti toolkit\source\controls\tree nmake - all ti_tree NULL
ti toolkit\source\layout nmake - all ti_layout NULL
ti toolkit\source\vclcompat nmake - all ti_vclcompat NULL
ti toolkit\util nmake - all ti_util ti_awt ti_controls ti_layout ti_helper ti_tree ti_vclcompat NULL
ti toolkit\source\layout\core nmake - all ti_layout_core NULL
ti toolkit\source\layout\vcl nmake - all ti_layout_vcl NULL
ti toolkit\util nmake - all ti_util ti_awt ti_controls ti_layout_core ti_helper ti_tree ti_layout_vcl NULL

View File

@@ -22,7 +22,9 @@ mkdir: %_DEST%\inc%_EXT%\toolkit\controls
..\inc\toolkit\awt\vclxdevice.hxx %_DEST%\inc%_EXT%\toolkit\awt\vclxdevice.hxx
..\inc\toolkit\awt\vclxfont.hxx %_DEST%\inc%_EXT%\toolkit\awt\vclxfont.hxx
..\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
..\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
@@ -53,3 +55,9 @@ mkdir: %_DEST%\inc%_EXT%\layout
..\%__SRC%\lib\*.dylib %_DEST%\lib%_EXT%\*.dylib
..\inc\layout\*.hxx %_DEST%\inc%_EXT%\layout\*.hxx
mkdir: %_DEST%\inc%_EXT%\layout\core
..\source\layout\core\*.hxx %_DEST%\inc%_EXT%\layout\core\*.hxx
mkdir: %_DEST%\inc%_EXT%\layout\vcl
..\source\layout\vcl\*.hxx %_DEST%\inc%_EXT%\layout\vcl\*.hxx
..\%__SRC%\bin\*-layout.zip %_DEST%\pck%_EXT%\*.*

View File

@@ -43,9 +43,6 @@ ENABLE_EXCEPTIONS=TRUE
# --- Files --------------------------------------------------------
# FIXME: This is bad, hmkay
CFLAGS+= -I$(PRJ)/source
.IF "$(GUIBASE)"=="aqua"
OBJCXXFLAGS=-x objective-c++ -fobjc-exceptions
CFLAGSCXX+=$(OBJCXXFLAGS)
@@ -75,9 +72,11 @@ SLOFILES= \
$(SLO)/vclxbutton.obj\
$(SLO)/vclxdialog.obj\
$(SLO)/vclxfixedline.obj\
$(SLO)/vclxplugin.obj\
$(SLO)/vclxscroller.obj\
$(SLO)/vclxsplitter.obj\
$(SLO)/vclxtabcontrol.obj
$(SLO)/vclxtabcontrol.obj\
$(SLO)/vclxtabpage.obj
SRS1NAME=$(TARGET)
SRC1FILES=\

View File

@@ -31,7 +31,7 @@
#include "vclxbutton.hxx"
#include "layout/layoutcore.hxx"
#include <layout/core/helper.hxx>
#include <com/sun/star/awt/ImagePosition.hpp>
#include <vcl/button.hxx>

View File

@@ -211,6 +211,15 @@ void VCLXDialog::setTitle( const ::rtl::OUString& Title ) throw(::com::sun::star
pWindow->SetText( Title );
}
void VCLXDialog::setHelpId( sal_Int32 id ) throw(::com::sun::star::uno::RuntimeException)
{
::vos::OGuard aGuard( GetMutex() );
Window* pWindow = GetWindow();
if ( pWindow )
pWindow->SetHelpId( id );
}
::rtl::OUString VCLXDialog::getTitle() throw(::com::sun::star::uno::RuntimeException)
{
::vos::OGuard aGuard( GetMutex() );

View File

@@ -36,7 +36,7 @@
#include <com/sun/star/awt/XSystemDependentWindowPeer.hpp>
#include <com/sun/star/awt/XTopWindow.hpp>
#include <comphelper/uno3.hxx>
#include <layout/bin.hxx>
#include <layout/core/bin.hxx>
#include <toolkit/awt/vclxtopwindow.hxx>
namespace layoutimpl
@@ -44,10 +44,10 @@ namespace layoutimpl
typedef ::cppu::ImplHelper1 < ::com::sun::star::awt::XDialog2 > VCLXDialog_Base;
class VCLXDialog :public VCLXWindow
,public VCLXTopWindow_Base
,public VCLXDialog_Base
,public Bin
class TOOLKIT_DLLPUBLIC VCLXDialog : public VCLXWindow
, public VCLXTopWindow_Base
, public VCLXDialog_Base
, public Bin
{
private:
bool bRealized, bResizeSafeguard;
@@ -102,6 +102,7 @@ public:
// ::com::sun::star::awt::XDialog2
void SAL_CALL endDialog( sal_Int32 nResult ) throw(::com::sun::star::uno::RuntimeException);
void SAL_CALL setHelpId( sal_Int32 id ) throw(::com::sun::star::uno::RuntimeException);
};

View File

@@ -0,0 +1,88 @@
/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile$
*
* $Revision$
*
* last change: $Author$ $Date$
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
*
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2005 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston,
* MA 02110-1301 USA
*
************************************************************************/
#include "vclxplugin.hxx"
#include <com/sun/star/awt/PosSize.hpp>
#include <toolkit/helper/convert.hxx>
#include <toolkit/helper/property.hxx>
#include <vcl/ctrl.hxx>
#include "forward.hxx"
namespace layoutimpl
{
using namespace ::com::sun::star;
VCLXPlugin::VCLXPlugin( Window *p, WinBits b )
: VCLXWindow()
, mpWindow( p )
, mpPlugin( 0 )
, mStyle( b )
{
}
VCLXPlugin::~VCLXPlugin()
{
}
void SAL_CALL VCLXPlugin::dispose() throw(uno::RuntimeException)
{
{
::vos::OGuard aGuard( GetMutex() );
lang::EventObject aDisposeEvent;
aDisposeEvent.Source = W3K_EXPLICIT_CAST (*this);
}
VCLXWindow::dispose();
}
void VCLXPlugin::SetPlugin( ::Control *p )
{
mpPlugin = p;
}
awt::Size SAL_CALL VCLXPlugin::getMinimumSize()
throw(::com::sun::star::uno::RuntimeException)
{
::vos::OClearableGuard aGuard( GetMutex() );
if ( mpPlugin )
return AWTSize( mpPlugin->GetSizePixel() );
return awt::Size();
}
} // namespace layoutimpl

View File

@@ -0,0 +1,75 @@
/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile$
*
* $Revision$
*
* last change: $Author$ $Date$
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
*
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2005 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston,
* MA 02110-1301 USA
*
************************************************************************/
#ifndef LAYOUT_AWT_VCLXPLUGIN_HXX
#define LAYOUT_AWT_VCLXPLUGIN_HXX
#include <toolkit/awt/vclxwindow.hxx>
#include <vcl/wintypes.hxx>
class Control;
namespace layoutimpl
{
namespace css = ::com::sun::star;
class VCLXPlugin : public VCLXWindow
{
public:
Window *mpWindow;
::Control *mpPlugin;
WinBits mStyle;
VCLXPlugin( Window *p, WinBits b );
void SetPlugin( ::Control *p );
protected:
~VCLXPlugin();
// XComponent
void SAL_CALL dispose() throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::awt::Size SAL_CALL getMinimumSize()
throw(::com::sun::star::uno::RuntimeException);
private:
VCLXPlugin( VCLXPlugin const & );
VCLXPlugin& operator=( VCLXPlugin const & );
};
} // namespace layoutimpl
#endif /* LAYOUT_AWT_VCLXPLUGIN_HXX */

View File

@@ -33,7 +33,7 @@
#define LAYOUT_AWT_VCLXSCROLLER_HXX
#include <comphelper/uno3.hxx>
#include <layout/bin.hxx>
#include <layout/core/bin.hxx>
#include <toolkit/awt/vclxwindow.hxx>
class ScrollBar;

View File

@@ -78,8 +78,8 @@ VCLXSplitter::createChildProps( Box_Base::ChildData *pData )
DBG_NAME( VCLXSplitter );
VCLXSplitter::VCLXSplitter( bool bHorizontal )
: VCLXWindow()
, Box_Base()
: VCLXWindow()
, Box_Base()
{
DBG_CTOR( VCLXSplitter, NULL );
mnHandleRatio = 0.5;

View File

@@ -35,7 +35,7 @@
#include <com/sun/star/awt/MaxChildrenException.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <comphelper/uno3.hxx>
#include <layout/box-base.hxx>
#include <layout/core/box-base.hxx>
#include <toolkit/awt/vclxwindow.hxx>
class Splitter;

View File

@@ -43,8 +43,6 @@
namespace layoutimpl
{
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::awt;
using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star;
@@ -76,12 +74,20 @@ VCLXTabControl::createChildProps( Box_Base::ChildData *pData )
DBG_NAME( VCLXTabControl );
#if !defined (__GNUC__)
#define __PRETTY_FUNCTION__ __FUNCTION__
#endif /* !__GNUC__ */
VCLXTabControl::VCLXTabControl()
: VCLXWindow()
, VCLXTabControl_Base()
, Box_Base()
, mnNextTabId( 1 )
, mTabId (1)
, bRealized (false)
{
#ifndef __SUNPRO_CC
OSL_TRACE ("\n********%s:%x", __PRETTY_FUNCTION__, this);
#endif
DBG_CTOR( VCLXTabControl, NULL );
}
@@ -94,7 +100,7 @@ IMPLEMENT_2_FORWARD_XINTERFACE2( VCLXTabControl, VCLXWindow, Container, VCLXTabC
IMPLEMENT_FORWARD_XTYPEPROVIDER2( VCLXTabControl, VCLXWindow, VCLXTabControl_Base );
void SAL_CALL VCLXTabControl::dispose( ) throw(RuntimeException)
void SAL_CALL VCLXTabControl::dispose( ) throw(uno::RuntimeException)
{
{
::vos::OGuard aGuard( GetMutex() );
@@ -108,38 +114,38 @@ void SAL_CALL VCLXTabControl::dispose( ) throw(RuntimeException)
}
#if 0
void SAL_CALL VCLXTabControl::addTabListener( const Reference< XTabListener >& listener ) throw (RuntimeException)
void SAL_CALL VCLXTabControl::addTabListener( const Reference< XTabListener >& listener ) throw (uno::RuntimeException)
{
if ( listener.is() )
maTabListeners.addInterface( listener );
}
void SAL_CALL VCLXTabControl::removeTabListener( const Reference< XTabListener >& listener ) throw (RuntimeException)
void SAL_CALL VCLXTabControl::removeTabListener( const Reference< XTabListener >& listener ) throw (uno::RuntimeException)
{
if ( listener.is() )
maTabListeners.removeInterface( listener );
}
#endif
TabControl *VCLXTabControl::getTabControl() const throw (RuntimeException)
TabControl *VCLXTabControl::getTabControl() const throw (uno::RuntimeException)
{
TabControl *pTabControl = static_cast< TabControl* >( GetWindow() );
if ( pTabControl )
return pTabControl;
throw RuntimeException();
throw uno::RuntimeException();
}
sal_Int32 SAL_CALL VCLXTabControl::insertTab() throw (RuntimeException)
sal_Int32 SAL_CALL VCLXTabControl::insertTab() throw (uno::RuntimeException)
{
TabControl *pTabControl = getTabControl();
USHORT id = sal::static_int_cast< USHORT >( mnNextTabId++ );
USHORT id = sal::static_int_cast< USHORT >( mTabId++ );
rtl::OUString title (RTL_CONSTASCII_USTRINGPARAM( "" ) );
pTabControl->InsertPage( id, title.getStr(), TAB_APPEND );
pTabControl->SetTabPage( id, new TabPage( pTabControl ) );
return id;
}
void SAL_CALL VCLXTabControl::removeTab( sal_Int32 ID ) throw (RuntimeException, IndexOutOfBoundsException)
void SAL_CALL VCLXTabControl::removeTab( sal_Int32 ID ) throw (uno::RuntimeException, IndexOutOfBoundsException)
{
TabControl *pTabControl = getTabControl();
if ( pTabControl->GetTabPage( sal::static_int_cast< USHORT >( ID ) ) == NULL )
@@ -147,7 +153,7 @@ void SAL_CALL VCLXTabControl::removeTab( sal_Int32 ID ) throw (RuntimeException,
pTabControl->RemovePage( sal::static_int_cast< USHORT >( ID ) );
}
void SAL_CALL VCLXTabControl::activateTab( sal_Int32 ID ) throw (RuntimeException, IndexOutOfBoundsException)
void SAL_CALL VCLXTabControl::activateTab( sal_Int32 ID ) throw (uno::RuntimeException, IndexOutOfBoundsException)
{
TabControl *pTabControl = getTabControl();
if ( pTabControl->GetTabPage( sal::static_int_cast< USHORT >( ID ) ) == NULL )
@@ -155,15 +161,15 @@ void SAL_CALL VCLXTabControl::activateTab( sal_Int32 ID ) throw (RuntimeExceptio
pTabControl->SelectTabPage( sal::static_int_cast< USHORT >( ID ) );
}
sal_Int32 SAL_CALL VCLXTabControl::getActiveTabID() throw (RuntimeException)
sal_Int32 SAL_CALL VCLXTabControl::getActiveTabID() throw (uno::RuntimeException)
{
return getTabControl()->GetCurPageId( );
}
void SAL_CALL VCLXTabControl::addTabListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabListener >& xListener ) throw (::com::sun::star::uno::RuntimeException)
void SAL_CALL VCLXTabControl::addTabListener( const uno::Reference< awt::XTabListener >& xListener ) throw (uno::RuntimeException)
{
for ( std::list< ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XTabListener > >::const_iterator it
for ( std::list< uno::Reference
< awt::XTabListener > >::const_iterator it
= mxTabListeners.begin(); it != mxTabListeners.end(); it++ )
{
if ( *it == xListener )
@@ -173,10 +179,10 @@ void SAL_CALL VCLXTabControl::addTabListener( const ::com::sun::star::uno::Refer
mxTabListeners.push_back( xListener );
}
void SAL_CALL VCLXTabControl::removeTabListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabListener >& xListener ) throw (::com::sun::star::uno::RuntimeException)
void SAL_CALL VCLXTabControl::removeTabListener( const uno::Reference< awt::XTabListener >& xListener ) throw (uno::RuntimeException)
{
for ( std::list< ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XTabListener > >::iterator it
for ( std::list< uno::Reference
< awt::XTabListener > >::iterator it
= mxTabListeners.begin(); it != mxTabListeners.end(); it++ )
{
if ( *it == xListener )
@@ -187,7 +193,7 @@ void SAL_CALL VCLXTabControl::removeTabListener( const ::com::sun::star::uno::Re
}
}
void SAL_CALL VCLXTabControl::setTabProps( sal_Int32 ID, const Sequence< NamedValue >& Properties ) throw (RuntimeException, IndexOutOfBoundsException)
void SAL_CALL VCLXTabControl::setTabProps( sal_Int32 ID, const uno::Sequence< NamedValue >& Properties ) throw (uno::RuntimeException, IndexOutOfBoundsException)
{
TabControl *pTabControl = getTabControl();
if ( pTabControl->GetTabPage( sal::static_int_cast< USHORT >( ID ) ) == NULL )
@@ -196,7 +202,7 @@ void SAL_CALL VCLXTabControl::setTabProps( sal_Int32 ID, const Sequence< NamedVa
for ( int i = 0; i < Properties.getLength(); i++ )
{
const rtl::OUString &name = Properties[i].Name;
const Any &value = Properties[i].Value;
const uno::Any &value = Properties[i].Value;
if ( name == rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Title" ) ) )
{
@@ -206,8 +212,8 @@ void SAL_CALL VCLXTabControl::setTabProps( sal_Int32 ID, const Sequence< NamedVa
}
}
Sequence< NamedValue > SAL_CALL VCLXTabControl::getTabProps( sal_Int32 ID )
throw (IndexOutOfBoundsException, RuntimeException)
uno::Sequence< NamedValue > SAL_CALL VCLXTabControl::getTabProps( sal_Int32 ID )
throw (IndexOutOfBoundsException, uno::RuntimeException)
{
TabControl *pTabControl = getTabControl();
if ( pTabControl->GetTabPage( sal::static_int_cast< USHORT >( ID ) ) == NULL )
@@ -216,11 +222,11 @@ Sequence< NamedValue > SAL_CALL VCLXTabControl::getTabProps( sal_Int32 ID )
#define ADD_PROP( seq, i, name, val ) { \
NamedValue value; \
value.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( name ) ); \
value.Value = makeAny( val ); \
value.Value = uno::makeAny( val ); \
seq[i] = value; \
}
Sequence< NamedValue > props( 2 );
uno::Sequence< NamedValue > props( 2 );
ADD_PROP( props, 0, "Title", rtl::OUString( pTabControl->GetPageText( sal::static_int_cast< USHORT >( ID ) ) ) );
ADD_PROP( props, 1, "Position", pTabControl->GetPagePos( sal::static_int_cast< USHORT >( ID ) ) );
#undef ADD_PROP
@@ -228,7 +234,7 @@ Sequence< NamedValue > SAL_CALL VCLXTabControl::getTabProps( sal_Int32 ID )
}
// TODO: draw tab border here
void SAL_CALL VCLXTabControl::draw( sal_Int32 nX, sal_Int32 nY ) throw(::com::sun::star::uno::RuntimeException)
void SAL_CALL VCLXTabControl::draw( sal_Int32 nX, sal_Int32 nY ) throw(uno::RuntimeException)
{
::vos::OGuard aGuard( GetMutex() );
@@ -249,16 +255,29 @@ void SAL_CALL VCLXTabControl::draw( sal_Int32 nX, sal_Int32 nY ) throw(::com::su
VCLXWindow::draw( nX, nY );
}
void VCLXTabControl::AddChild (uno::Reference< awt::XLayoutConstrains > const& xChild)
{
#ifndef __SUNPRO_CC
OSL_TRACE ("%s: children: %d", __PRETTY_FUNCTION__, maChildren.size ());
#endif
mIdMap[ xChild ] = mTabId++;
Box_Base::AddChild( xChild );
#ifndef __SUNPRO_CC
OSL_TRACE ("%s: children: %d", __PRETTY_FUNCTION__, maChildren.size ());
#endif
}
void SAL_CALL VCLXTabControl::addChild(
const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XLayoutConstrains > &xChild )
throw (::com::sun::star::uno::RuntimeException, ::com::sun::star::awt::MaxChildrenException)
const uno::Reference< awt::XLayoutConstrains > &xChild )
throw (uno::RuntimeException, awt::MaxChildrenException)
{
mIdMap[ xChild ] = insertTab();
Box_Base::addChild( xChild );
}
void SAL_CALL VCLXTabControl::removeChild( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XLayoutConstrains > &xChild )
throw (::com::sun::star::uno::RuntimeException)
void SAL_CALL VCLXTabControl::removeChild( const uno::Reference< awt::XLayoutConstrains > &xChild )
throw (uno::RuntimeException)
{
removeTab( mIdMap[xChild] );
mIdMap[ xChild ] = -1;
@@ -284,21 +303,90 @@ static void setChildrenVisible( uno::Reference < awt::XLayoutConstrains > xChild
}
}
void SAL_CALL VCLXTabControl::allocateArea(
const ::com::sun::star::awt::Rectangle &rArea )
throw (::com::sun::star::uno::RuntimeException)
void SAL_CALL VCLXTabControl::allocateArea (awt::Rectangle const &area)
throw (uno::RuntimeException)
{
maAllocation = rArea;
#ifndef __SUNPRO_CC
OSL_TRACE ("\n%s", __PRETTY_FUNCTION__);
#endif
maAllocation = area;
TabControl *pTabControl = getTabControl();
// FIXME: this is wrong. We just want to set tab controls pos/size for the tabs menu,
// otherwise, it gets events that should go to children (I guess we could solve this
// by making the tabcontrol as the actual XWindow parent of its children, when importing...)
// Not sure about TabPage drawing... That doesn't work on gtk+; just ignoring that.
// LATER: Nah, the proper fix is to get the XWindow hierarchy straight.
// FIXME: this is wrong. We just want to set tab controls pos/size for
// the tabs menu, otherwise, it gets events that should go to children
// (I guess we could solve this by making the tabcontrol as the actual
// XWindow parent of its children, when importing...) Not sure about
// TabPage drawing... That doesn't work on gtk+; just ignoring that.
// LATER: Nah, the proper fix is to get the XWindow hierarchy
// straight.
setPosSize( rArea.X, rArea.Y, rArea.Width, rArea.Height, PosSize::POSSIZE );
#if 0
setPosSize( area.X, area.Y, area.Width, area.Height, awt::PosSize::POSSIZE );
#else
awt::Size currentSize = getSize();
awt::Size requestedSize (area.Width, area.Height);
// requestedSize.Height = getHeightForWidth( area.Width );
awt::Size minimumSize = getMinimumSize();
if (requestedSize.Width < minimumSize.Width)
requestedSize.Width = minimumSize.Width;
if (requestedSize.Height < minimumSize.Height)
requestedSize.Height = minimumSize.Height;
Size pageSize = static_cast<TabControl*> (GetWindow ())->GetTabPageSizePixel ();
awt::Size pageBasedSize (0, 0);
pageBasedSize.Width = pageSize.Width ();
pageBasedSize.Height = pageSize.Height ();
const int wc = 0;
const int hc = 20;
static int pwc = 0;
static int phc = 40;
if (requestedSize.Width < pageBasedSize.Width)
requestedSize.Width = pageBasedSize.Width + wc;
if (requestedSize.Height < pageBasedSize.Height)
requestedSize.Height = pageBasedSize.Height + hc;
Size windowSize = GetWindow()->GetSizePixel();
Window *parent = GetWindow()->GetParent();
Size parentSize = parent->GetSizePixel();
#ifndef __SUNPRO_CC
#ifdef GCC_MAJOR
OSL_TRACE ("\n%s", __PRETTY_FUNCTION__);
#endif /* GCC_MAJOR */
OSL_TRACE ("%s: cursize: %d ,%d", __FUNCTION__, currentSize.Width, currentSize.Height );
OSL_TRACE ("%s: area: %d, %d", __FUNCTION__, area.Width, area.Height );
OSL_TRACE ("%s: minimum: %d, %d", __FUNCTION__, minimumSize.Width, minimumSize.Height );
OSL_TRACE ("%s: requestedSize: %d, %d", __FUNCTION__, requestedSize.Width, requestedSize.Height );
OSL_TRACE ("%s: pageBasedSize: %d, %d", __FUNCTION__, pageBasedSize.Width, pageBasedSize.Height );
//OSL_TRACE ("%s: parent: %d, %d", __FUNCTION__, parentSize.Width(), parentSize.Height() );
//OSL_TRACE ("%s: window: %d, %d", __FUNCTION__, windowSize.Width(), windowSize.Height() );
#endif
//bRealized = false;
if (!bRealized)
{
setPosSize( area.X, area.Y, requestedSize.Width, requestedSize.Height, awt::PosSize::POSSIZE );
bRealized = true;
}
else
{
if ( requestedSize.Width > currentSize.Width + 10)
setPosSize( 0, 0, requestedSize.Width, 0, awt::PosSize::WIDTH );
if ( requestedSize.Height > currentSize.Height + 10)
setPosSize( 0, 0, 0, requestedSize.Height, awt::PosSize::HEIGHT );
}
#endif
if (pageBasedSize.Width > parentSize.Width ()
|| pageBasedSize.Height > parentSize.Height ())
//parent->SetSizePixel ( Size (pageBasedSize.Width, pageBasedSize.Height));
//parent->SetSizePixel ( Size (pageBasedSize.Width + pwc, pageBasedSize.Height + phc));
parent->SetSizePixel ( Size (requestedSize.Width + pwc, requestedSize.Height + phc));
// FIXME: we can save cycles by setting visibility more sensibly. Having
// it here does makes it easier when changing tabs (just needs a recalc())
@@ -307,8 +395,8 @@ void SAL_CALL VCLXTabControl::allocateArea(
= maChildren.begin(); it != maChildren.end(); it++, i++ )
{
ChildData *child = static_cast<VCLXTabControl::ChildData*> ( *it );
::com::sun::star::uno::Reference
< ::com::sun::star::awt::XLayoutConstrains > xChild( child->mxChild );
uno::Reference
< awt::XLayoutConstrains > xChild( child->mxChild );
if ( xChild.is() )
{
uno::Reference< awt::XWindow > xWin( xChild, uno::UNO_QUERY );
@@ -340,15 +428,15 @@ void SAL_CALL VCLXTabControl::allocateArea(
}
}
::com::sun::star::awt::Size SAL_CALL VCLXTabControl::getMinimumSize()
throw(::com::sun::star::uno::RuntimeException)
awt::Size SAL_CALL VCLXTabControl::getMinimumSize()
throw(uno::RuntimeException)
{
awt::Size size = VCLXWindow::getMinimumSize();
awt::Size requestedSize = VCLXWindow::getMinimumSize();
awt::Size childrenSize( 0, 0 );
TabControl* pTabControl = static_cast< TabControl* >( GetWindow() );
if ( !pTabControl )
return size;
return requestedSize;
// calculate size to accomodate all children
unsigned i = 0;
@@ -367,10 +455,19 @@ void SAL_CALL VCLXTabControl::allocateArea(
}
}
size.Width += childrenSize.Width;
size.Height += childrenSize.Height + 20;
maRequisition = size;
return size;
#ifndef __SUNPRO_CC
#ifdef GCC_MAJOR
OSL_TRACE ("\n%s", __PRETTY_FUNCTION__);
#endif /* GCC_MAJOR */
OSL_TRACE ("%s: children: %d", __FUNCTION__, i);
OSL_TRACE ("%s: childrenSize: %d, %d", __FUNCTION__, childrenSize.Width, childrenSize.Height );
#endif
requestedSize.Width += childrenSize.Width;
requestedSize.Height += childrenSize.Height + 20;
maRequisition = requestedSize;
return requestedSize;
}
void VCLXTabControl::ProcessWindowEvent( const VclWindowEvent& _rVclWindowEvent )
@@ -391,12 +488,12 @@ void VCLXTabControl::ProcessWindowEvent( const VclWindowEvent& _rVclWindowEvent
case VCLEVENT_TABPAGE_PAGETEXTCHANGED:
{
ULONG page = (ULONG) _rVclWindowEvent.GetData();
for ( std::list< ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XTabListener > >::iterator it
for ( std::list< uno::Reference
< awt::XTabListener > >::iterator it
= mxTabListeners.begin(); it != mxTabListeners.end(); it++)
{
::com::sun::star::uno::Reference
< ::com::sun::star::awt::XTabListener > listener = *it;
uno::Reference
< awt::XTabListener > listener = *it;
switch ( _rVclWindowEvent.GetId() )
{
@@ -414,7 +511,7 @@ void VCLXTabControl::ProcessWindowEvent( const VclWindowEvent& _rVclWindowEvent
listener->removed( page );
break;
case VCLEVENT_TABPAGE_REMOVEDALL:
for ( int i = 1; i < mnNextTabId; i++)
for ( int i = 1; i < mTabId; i++)
{
if ( pTabControl->GetTabPage( sal::static_int_cast< USHORT >( i ) ) )
listener->removed( i );
@@ -434,12 +531,12 @@ void VCLXTabControl::ProcessWindowEvent( const VclWindowEvent& _rVclWindowEvent
}
}
void SAL_CALL VCLXTabControl::setProperty( const ::rtl::OUString& PropertyName, const Any &Value ) throw(RuntimeException)
void SAL_CALL VCLXTabControl::setProperty( const ::rtl::OUString& PropertyName, const uno::Any &Value ) throw(uno::RuntimeException)
{
VCLXWindow::setProperty( PropertyName, Value );
}
Any SAL_CALL VCLXTabControl::getProperty( const ::rtl::OUString& PropertyName ) throw(RuntimeException)
uno::Any SAL_CALL VCLXTabControl::getProperty( const ::rtl::OUString& PropertyName ) throw(uno::RuntimeException)
{
return VCLXWindow::getProperty( PropertyName );
}

View File

@@ -34,7 +34,7 @@
#include <com/sun/star/awt/XSimpleTabController.hpp>
#include <comphelper/uno3.hxx>
#include <layout/box-base.hxx>
#include <layout/core/box-base.hxx>
#include <map>
#include <toolkit/awt/vclxwindow.hxx>
@@ -50,9 +50,14 @@ class VCLXTabControl :public VCLXWindow
,public VCLXTabControl_Base
,public Box_Base
{
int mTabId;
bool bRealized;
public:
VCLXTabControl();
void AddChild (css::uno::Reference <css::awt::XLayoutConstrains> const &);
protected:
~VCLXTabControl();
@@ -65,7 +70,7 @@ protected:
// XComponent
void SAL_CALL dispose() throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL draw( sal_Int32 nX, sal_Int32 nY ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL draw( sal_Int32 nX, sal_Int32 nY ) throw (::com::sun::star::uno::RuntimeException);
// XSimpleTabController
virtual ::sal_Int32 SAL_CALL insertTab() throw (::com::sun::star::uno::RuntimeException);
@@ -108,10 +113,6 @@ protected:
// VCLXWindow
void ProcessWindowEvent( const VclWindowEvent& _rVclWindowEvent );
// Each tab page needs an unique id.
int mnNextTabId;
public:
// Maps page ids to child references
struct ChildData : public Box_Base::ChildData

View File

@@ -0,0 +1,164 @@
/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile$
*
* $Revision$
*
* last change: $Author$ $Date$
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
*
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2005 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston,
* MA 02110-1301 USA
*
************************************************************************/
#include "vclxtabpage.hxx"
#include "forward.hxx"
#include <com/sun/star/awt/PosSize.hpp>
#include <toolkit/helper/convert.hxx>
#include <vcl/tabpage.hxx>
#include <vcl/tabctrl.hxx>
#if !defined (__GNUC__)
#define __PRETTY_FUNCTION__ __FUNCTION__
#endif /* !__GNUC__ */
namespace layoutimpl
{
using namespace ::com::sun::star;
// XInterface
IMPLEMENT_FORWARD_XINTERFACE2( VCLXTabPage, VCLXWindow, Bin );
// XTypeProvider
IMPLEMENT_FORWARD_XTYPEPROVIDER1( VCLXTabPage, VCLXWindow );
VCLXTabPage::VCLXTabPage( Window *p )
: VCLXWindow()
, Bin()
, bRealized( false )
{
/* FIXME: before Window is set, setLabel, setProperty->setImage
* are silent no-ops. */
p->SetComponentInterface( this );
}
VCLXTabPage::~VCLXTabPage()
{
}
void SAL_CALL VCLXTabPage::dispose() throw(uno::RuntimeException)
{
{
::vos::OGuard aGuard( GetMutex() );
lang::EventObject aDisposeEvent;
aDisposeEvent.Source = W3K_EXPLICIT_CAST (*this);
}
VCLXWindow::dispose();
}
void SAL_CALL VCLXTabPage::allocateArea( awt::Rectangle const& area )
throw (uno::RuntimeException)
{
awt::Size currentSize = getSize();
awt::Size requestedSize = getMinimumSize();
requestedSize.Height = getHeightForWidth( area.Width );
if ( currentSize.Width > 0 && currentSize.Height > 0
&& requestedSize.Width > currentSize.Width )
requestedSize.Width = currentSize.Width;
if ( currentSize.Width > 0 && currentSize.Height > 0
&& requestedSize.Height > currentSize.Height )
requestedSize.Height = currentSize.Height;
// FIXME: missing destructor?
if ( !GetWindow() )
return;
Size windowSize = GetWindow()->GetSizePixel();
Window *parent = GetWindow()->GetParent();
Size parentSize = parent->GetSizePixel();
Point pos = GetWindow()->GetPosPixel();
#ifndef __SUNPRO_CC
OSL_TRACE ("\n%s", __PRETTY_FUNCTION__);
OSL_TRACE ("%s: curpos: %d ,%d", __FUNCTION__, pos.X(), pos.Y() );
OSL_TRACE ("%s: cursize: %d ,%d", __FUNCTION__, currentSize.Width, currentSize.Height );
OSL_TRACE ("%s: area: %d, %d", __FUNCTION__, area.Width, area.Height );
OSL_TRACE ("%s: requestedSize: %d, %d", __FUNCTION__, requestedSize.Width, requestedSize.Height );
OSL_TRACE ("%s: parent: %d, %d", __FUNCTION__, parentSize.Width(), parentSize.Height() );
OSL_TRACE ("%s: window: %d, %d", __FUNCTION__, windowSize.Width(), windowSize.Height() );
#endif
#if 0
if (requestedSize.Width > parentSize.Width ()
|| requestedSize.Height > parentSize.Height ())
{
#ifndef __SUNPRO_CC
OSL_TRACE ("%s: ***setting parent: %d, %d", __FUNCTION__, requestedSize.Width, requestedSize.Height );
#endif
parent->SetSizePixel ( Size (requestedSize.Width, requestedSize.Height) );
if (Window *grand_parent = parent->GetParent ())
grand_parent->SetSizePixel ( Size (requestedSize.Width, requestedSize.Height) );
}
#endif
if ( !bRealized )
{
setPosSize( area.X, area.Y, requestedSize.Width, requestedSize.Height, awt::PosSize::SIZE );
bRealized = true;
}
else
{
if ( requestedSize.Width > currentSize.Width + 10)
setPosSize( 0, 0, requestedSize.Width, 0, awt::PosSize::WIDTH );
if ( requestedSize.Height > currentSize.Height + 10)
setPosSize( 0, 0, 0, requestedSize.Height, awt::PosSize::HEIGHT );
}
awt::Size newSize = getSize();
#ifndef __SUNPRO_CC
OSL_TRACE ("%s: newSize: %d, %d", __FUNCTION__, newSize.Width, newSize.Height );
#endif
maAllocation.Width = newSize.Width;
maAllocation.Height = newSize.Height;
Bin::allocateArea( maAllocation );
}
awt::Size SAL_CALL VCLXTabPage::getMinimumSize()
throw(uno::RuntimeException)
{
::vos::OGuard aGuard( GetMutex() );
return Bin::getMinimumSize();
}
} // namespace layoutimpl

View File

@@ -0,0 +1,81 @@
/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile$
*
* $Revision$
*
* last change: $Author$ $Date$
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
*
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2005 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston,
* MA 02110-1301 USA
*
************************************************************************/
#ifndef LAYOUT_AWT_VCLXTABPAGE_HXX
#define LAYOUT_AWT_VCLXTABPAGE_HXX
#include <toolkit/awt/vclxwindow.hxx>
#include <layout/core/bin.hxx>
#include <comphelper/uno3.hxx>
namespace layoutimpl
{
namespace css = ::com::sun::star;
class VCLXTabPage : public VCLXWindow
, public Bin
{
bool bRealized;
public:
VCLXTabPage( Window *p );
// XInterface
DECLARE_XINTERFACE()
// XTypeProvider
DECLARE_XTYPEPROVIDER()
protected:
~VCLXTabPage();
// XComponent
void SAL_CALL dispose() throw(css::uno::RuntimeException);
// ::com::sun::star::awt::XLayoutContainer
virtual void SAL_CALL allocateArea( css::awt::Rectangle const& rArea )
throw (css::uno::RuntimeException);
virtual css::awt::Size SAL_CALL getMinimumSize()
throw(css::uno::RuntimeException);
private:
VCLXTabPage( VCLXTabPage const & );
VCLXTabPage& operator=( VCLXTabPage const & );
};
} // namespace layoutimpl
#endif /* LAYOUT_AWT_VCLXTABPAGE_HXX */

View File

@@ -417,6 +417,13 @@ VCLXButton::VCLXButton()
{
}
VCLXButton::~VCLXButton()
{
#ifndef __SUNPRO_CC
OSL_TRACE ("%s", __FUNCTION__);
#endif
}
::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXButton::CreateAccessibleContext()
{
return getAccessibleFactory().createAccessibleContext( this );
@@ -1361,6 +1368,13 @@ void VCLXRadioButton::ImplClickedOrToggled( BOOL bToggled )
}
}
::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > VCLXRadioButton::getFirstActionListener ()
{
if (!maItemListeners.getLength ())
return ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > ();
return maActionListeners.getElements()[0];
}
// ----------------------------------------------------
// class VCLXSpinField
// ----------------------------------------------------
@@ -2175,6 +2189,9 @@ VCLXDialog::VCLXDialog()
VCLXDialog::~VCLXDialog()
{
#ifndef __SUNPRO_CC
OSL_TRACE ("%s", __FUNCTION__);
#endif
}
// ::com::sun::star::uno::XInterface
@@ -3743,6 +3760,13 @@ VCLXComboBox::VCLXComboBox()
{
}
VCLXComboBox::~VCLXComboBox()
{
#ifndef __SUNPRO_CC
OSL_TRACE ("%s", __FUNCTION__);
#endif
}
// ::com::sun::star::uno::XInterface
::com::sun::star::uno::Any VCLXComboBox::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
{

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: bin.cxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -165,6 +165,12 @@ Align::allocateArea( const awt::Rectangle &rArea )
allocateChildAt( mxChild, aChildArea );
}
bool
Align::emptyVisible ()
{
return true;
}
/* MinSize */
MinSize::MinSize() : Bin()
@@ -178,6 +184,12 @@ MinSize::MinSize() : Bin()
&mnMinHeight );
}
bool
MinSize::emptyVisible ()
{
return true;
}
awt::Size SAL_CALL MinSize::getMinimumSize()
throw(uno::RuntimeException)
{

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: bin.hxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -31,10 +31,10 @@
/* A few simple binary containers */
#ifndef CORE_BIN_HXX
#define CORE_BIN_HXX
#ifndef LAYOUT_CORE_BIN_HXX
#define LAYOUT_CORE_BIN_HXX
#include "container.hxx"
#include <layout/core/container.hxx>
namespace layoutimpl
{
@@ -75,8 +75,6 @@ public:
// css::awt::XLayoutConstrains
virtual css::awt::Size SAL_CALL getMinimumSize()
throw(css::uno::RuntimeException);
PROPHELPER_SET_INFO
};
// Align gives control over child position on the allocated space.
@@ -91,11 +89,11 @@ protected:
public:
Align();
bool emptyVisible ();
// css::awt::XLayoutContainer
virtual void SAL_CALL allocateArea( const css::awt::Rectangle &rArea )
throw (css::uno::RuntimeException);
PROPHELPER_SET_INFO
};
// Makes child request its or a specified size, whatever is larger.
@@ -108,13 +106,12 @@ protected:
public:
MinSize();
bool emptyVisible ();
// css::awt::XLayoutContainer
virtual css::awt::Size SAL_CALL getMinimumSize()
throw(css::uno::RuntimeException);
PROPHELPER_SET_INFO
};
} // namespace layoutimpl
#endif /*CORE_BIN_HXX*/
#endif /* LAYOUT_CORE_BIN_HXX */

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: box-base.cxx,v $
* $RCSfile$
*
* $Revision: 1.2 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -69,9 +69,9 @@ static bool isVisible( uno::Reference< awt::XLayoutConstrains > xWidget )
uno::Sequence< uno::Reference< awt::XLayoutConstrains > > aChildren
= xContainer->getChildren();
// FIXME: <flow> workaround: empty visible containers always visible:
if ( !aChildren.getLength() )
return true;
if (!aChildren.getLength ())
if (Container *c = dynamic_cast <Container*> (xWidget.get ()))
return c->emptyVisible ();
for ( int i = 0; i < aChildren.getLength(); i++ )
if ( isVisible( aChildren[i] ) )
@@ -88,16 +88,22 @@ bool Box_Base::ChildData::isVisible()
return layoutimpl::isVisible( mxChild );
}
void
Box_Base::AddChild (uno::Reference <awt::XLayoutConstrains> const& xChild)
{
ChildData *pData = createChild (xChild);
maChildren.push_back (pData);
queueResize ();
}
void SAL_CALL
Box_Base::addChild( const uno::Reference< awt::XLayoutConstrains >& xChild )
Box_Base::addChild (uno::Reference <awt::XLayoutConstrains> const& xChild)
throw (uno::RuntimeException, awt::MaxChildrenException)
{
if ( xChild.is() )
if (xChild.is ())
{
ChildData *pData = createChild( xChild );
maChildren.push_back( pData );
setChildParent( xChild );
queueResize();
AddChild (xChild);
setChildParent (xChild);
}
}

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: box-base.hxx,v $
* $RCSfile$
*
* $Revision: 1.2 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -29,10 +29,10 @@
*
************************************************************************/
#ifndef CORE_BOX_BASE_HXX
#define CORE_BOX_BASE_HXX
#ifndef LAYOUT_CORE_BOX_BASE_HXX
#define LAYOUT_CORE_BOX_BASE_HXX
#include "container.hxx"
#include <layout/core/container.hxx>
#include <list>
@@ -57,7 +57,6 @@ public:
struct ChildProps: public PropHelper
{
//ChildProps( ChildProps* );
PROPHELPER_SET_INFO
};
protected:
@@ -70,8 +69,10 @@ protected:
ChildData *removeChildData( std::list< ChildData *>, css::uno::Reference< css::awt::XLayoutConstrains > const& Child );
public:
void AddChild( const css::uno::Reference< css::awt::XLayoutConstrains >& Child);
// css::awt::XLayoutContainer
virtual void SAL_CALL addChild( const css::uno::Reference< css::awt::XLayoutConstrains >& Child )
virtual void SAL_CALL addChild( const css::uno::Reference< css::awt::XLayoutConstrains >& Child)
throw (css::uno::RuntimeException, css::awt::MaxChildrenException);
virtual void SAL_CALL removeChild( const css::uno::Reference< css::awt::XLayoutConstrains >& Child )
throw (css::uno::RuntimeException);
@@ -87,4 +88,4 @@ public:
} // namespace layoutimpl
#endif /* CORE_BOX__BASE HXX */
#endif /* LAYOUT_CORE_BOX_BASE HXX */

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: box.cxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -65,9 +65,9 @@ Box::ChildData::ChildData( uno::Reference< awt::XLayoutConstrains > const& xChil
Box::ChildData*
Box::createChild( uno::Reference< awt::XLayoutConstrains > const& xChild )
{
{
return new ChildData( xChild );
}
}
Box::ChildProps*
Box::createChildProps( Box_Base::ChildData *pData )

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: box.hxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -29,10 +29,10 @@
*
************************************************************************/
#ifndef CORE_BOX_HXX
#define CORE_BOX_HXX
#ifndef LAYOUT_CORE_BOX_HXX
#define LAYOUT_CORE_BOX_HXX
#include "box-base.hxx"
#include <layout/core/box-base.hxx>
#include <com/sun/star/awt/Point.hpp>
@@ -83,8 +83,6 @@ public:
// helper: mix of getMinimumSize() and getHeightForWidth()
css::awt::Size calculateSize( long nWidth = 0 );
PROPHELPER_SET_INFO
private:
/* Helpers to deal with the joint Box directions. */
inline int primDim (const css::awt::Size &size)
@@ -105,4 +103,4 @@ struct HBox : public Box
} // namespace layoutimpl
#endif /* CORE_BOX_HXX */
#endif /* LAYOUT_CORE_BOX_HXX */

View File

@@ -6,8 +6,8 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: byteseq.cxx,v $
* $Revision: 1.4 $
* $RCSfile$
* $Revision$
*
* This file is part of OpenOffice.org.
*

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: container.cxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -50,6 +50,12 @@ Container::Container()
setChangeListener( this );
}
bool
Container::emptyVisible ()
{
return false;
}
uno::Any
Container::queryInterface( const uno::Type & rType ) throw (uno::RuntimeException)
{

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: container.hxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -29,10 +29,10 @@
*
************************************************************************/
#ifndef CORE_CONTAINER_HXX
#define CORE_CONTAINER_HXX
#ifndef LAYOUT_CORE_CONTAINER_HXX
#define LAYOUT_CORE_CONTAINER_HXX
#include "helper.hxx"
#include <layout/core/helper.hxx>
#include <cppuhelper/implbase2.hxx>
#include <com/sun/star/awt/MaxChildrenException.hpp>
@@ -44,7 +44,7 @@ namespace css = ::com::sun::star;
typedef ::cppu::WeakImplHelper2< css::awt::XLayoutContainer,
css::awt::XLayoutConstrains > Container_Base;
class Container : public Container_Base, public PropHelper, public PropHelper::Listener
class TOOLKIT_DLLPUBLIC Container : public Container_Base, public PropHelper, public PropHelper::Listener
{
friend class ChildProps;
protected:
@@ -73,6 +73,8 @@ public:
Container();
virtual ~Container() {}
virtual bool emptyVisible ();
// XInterface
virtual void SAL_CALL acquire() throw() { PropHelper::acquire(); }
virtual void SAL_CALL release() throw() { PropHelper::release(); }
@@ -129,12 +131,10 @@ public:
css::awt::Size SAL_CALL calcAdjustedSize( const css::awt::Size& rNewSize )
throw(css::uno::RuntimeException) { return rNewSize; }
PROPHELPER_SET_INFO
protected:
void propertiesChanged();
};
} // namespace layoutimpl
#endif /*CORE_CONTAINER_HXX*/
#endif /* LAYOUT_CORE_CONTAINER_HXX */

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: dialogbuttonhbox.cxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -39,13 +39,12 @@
#include "proplist.hxx"
#if TEST_LAYOUT && !defined( DBG_UTIL )
#include <stdio.h>
#undef DBG_ERROR
#define DBG_ERROR printf
#define DBG_ERROR OSL_TRACE
#undef DBG_ERROR1
#define DBG_ERROR1 printf
#define DBG_ERROR1 OSL_TRACE
#undef DBG_ERROR2
#define DBG_ERROR2 printf
#define DBG_ERROR2 OSL_TRACE
#endif /* TEST_LAYOUT && !DBG_UTIL */
namespace layoutimpl

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: dialogbuttonhbox.hxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -29,11 +29,11 @@
*
************************************************************************/
#ifndef CORE_DIALOGBUTTONHBOX_HXX
#define CORE_DIALOGBUTTONHBOX_HXX
#ifndef LAYOUT_CORE_DIALOGBUTTONHBOX_HXX
#define LAYOUT_CORE_DIALOGBUTTONHBOX_HXX
#include "box.hxx"
#include "flow.hxx"
#include <layout/core/box.hxx>
#include <layout/core/flow.hxx>
namespace layoutimpl
{
@@ -74,4 +74,4 @@ private:
} // namespace layoutimpl
#endif /* CORE_DIALOGBUTTONHBOX_HXX */
#endif /* LAYOUT_CORE_DIALOGBUTTONHBOX_HXX */

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: factory.cxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -41,52 +41,52 @@ using namespace ::com::sun::star;
using namespace layoutimpl;
void * SAL_CALL comp_Layout_component_getFactory( const char * pImplName, void * pServiceManager, void * /*registryKey*/ )
{
void * pRet = 0;
::rtl::OUString aImplName( ::rtl::OUString::createFromAscii( pImplName ) );
uno::Reference< lang::XSingleServiceFactory > xFactory;
if ( pServiceManager && aImplName.equals( LayoutFactory::impl_staticGetImplementationName() ) )
xFactory = ::cppu::createOneInstanceFactory( reinterpret_cast< lang::XMultiServiceFactory*>( pServiceManager ),
LayoutFactory::impl_staticGetImplementationName(),
LayoutFactory::impl_staticCreateSelfInstance,
LayoutFactory::impl_staticGetSupportedServiceNames() );
if ( xFactory.is() )
{
xFactory->acquire();
pRet = xFactory.get();
void * pRet = 0;
::rtl::OUString aImplName( ::rtl::OUString::createFromAscii( pImplName ) );
uno::Reference< lang::XSingleServiceFactory > xFactory;
if ( pServiceManager && aImplName.equals( LayoutFactory::impl_staticGetImplementationName() ) )
xFactory = ::cppu::createOneInstanceFactory( reinterpret_cast< lang::XMultiServiceFactory*>( pServiceManager ),
LayoutFactory::impl_staticGetImplementationName(),
LayoutFactory::impl_staticCreateSelfInstance,
LayoutFactory::impl_staticGetSupportedServiceNames() );
if ( xFactory.is() )
{
xFactory->acquire();
pRet = xFactory.get();
}
return pRet;
}
return pRet;
}
sal_Bool SAL_CALL comp_Layout_component_writeInfo( void * /*serviceManager*/, void * pRegistryKey )
{
if ( pRegistryKey )
{
try
if ( pRegistryKey )
{
uno::Reference< registry::XRegistryKey > xKey( reinterpret_cast< registry::XRegistryKey* >( pRegistryKey ) );
uno::Reference< registry::XRegistryKey > xNewKey;
try
{
uno::Reference< registry::XRegistryKey > xKey( reinterpret_cast< registry::XRegistryKey* >( pRegistryKey ) );
uno::Reference< registry::XRegistryKey > xNewKey;
xNewKey = xKey->createKey( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) +
LayoutFactory::impl_staticGetImplementationName() +
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "/UNO/SERVICES") ) );
xNewKey = xKey->createKey( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) +
LayoutFactory::impl_staticGetImplementationName() +
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "/UNO/SERVICES") ) );
const uno::Sequence< ::rtl::OUString > aServices = LayoutFactory::impl_staticGetSupportedServiceNames();
for ( sal_Int32 i = 0; i < aServices.getLength(); i++ )
xNewKey->createKey( aServices.getConstArray()[i] );
const uno::Sequence< ::rtl::OUString > aServices = LayoutFactory::impl_staticGetSupportedServiceNames();
for ( sal_Int32 i = 0; i < aServices.getLength(); i++ )
xNewKey->createKey( aServices.getConstArray()[i] );
return sal_True;
}
catch (registry::InvalidRegistryException &)
return sal_True;
}
catch (registry::InvalidRegistryException &)
{
OSL_ENSURE( sal_False, "### InvalidRegistryException!" );
}
}
return sal_False;
}
return sal_False;
}
// Component registration
::rtl::OUString SAL_CALL LayoutFactory::impl_staticGetImplementationName()

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: factory.hxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -29,8 +29,8 @@
*
************************************************************************/
#ifndef FACTORY_HXX_
#define FACTORY_HXX_
#ifndef LAYOUT_CORE_FACTORY_HXX
#define LAYOUT_CORE_FACTORY_HXX
#include <com/sun/star/lang/XSingleServiceFactory.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
@@ -75,4 +75,4 @@ public:
};
#endif /* FACTORY_HXX */
#endif /* LAYOUT_CORE_FACTORY_HXX */

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: flow.cxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -56,6 +56,12 @@ Flow::Flow()
&mnSpacing );
}
bool
Flow::emptyVisible ()
{
return true;
}
void SAL_CALL
Flow::addChild( const uno::Reference< awt::XLayoutConstrains >& xChild )
throw (uno::RuntimeException, css::awt::MaxChildrenException)
@@ -97,7 +103,7 @@ Flow::getChildren()
uno::Sequence< uno::Reference< awt::XLayoutConstrains > > children( maChildren.size() );
unsigned int i = 0;
for ( std::list< ChildData * >::iterator it = maChildren.begin();
it != maChildren.end(); it++, i++ )
it != maChildren.end(); it++, i++ )
children[i] = (*it)->xChild;
return children;

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: flow.hxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -29,10 +29,10 @@
*
************************************************************************/
#ifndef CORE_FLOW_HXX
#define CORE_FLOW_HXX
#ifndef LAYOUT_CORE_FLOW_HXX
#define LAYOUT_CORE_FLOW_HXX
#include "container.hxx"
#include <layout/core/container.hxx>
#include <list>
@@ -63,6 +63,8 @@ protected:
public:
Flow();
bool emptyVisible ();
// css::awt::XLayoutContainer
virtual void SAL_CALL addChild( const css::uno::Reference< css::awt::XLayoutConstrains >& Child )
throw (css::uno::RuntimeException, css::awt::MaxChildrenException);
@@ -87,8 +89,6 @@ public:
virtual sal_Int32 SAL_CALL getHeightForWidth( sal_Int32 nWidth )
throw(css::uno::RuntimeException);
PROPHELPER_SET_INFO
private:
// shared between getMinimumSize() and getHeightForWidth()
css::awt::Size calculateSize( long nMaxWidth );
@@ -96,4 +96,4 @@ private:
} // namespace layoutimpl
#endif /*FLOW_CORE_HXX*/
#endif /* LAYOUT_FLOW_CORE_HXX */

View File

@@ -0,0 +1,676 @@
/*************************************************************************
*
* 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$
*
* $Revision$
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General 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 "helper.hxx"
#include <assert.h>
#include <list>
#include <com/sun/star/awt/WindowAttribute.hpp>
#include <com/sun/star/awt/XWindow.hpp>
#include <com/sun/star/awt/VclWindowPeerAttribute.hpp>
#include <toolkit/awt/vclxwindow.hxx>
#include <tools/debug.hxx>
#include "proplist.hxx"
#if TEST_LAYOUT && !defined( DBG_UTIL )
#undef DBG_ERROR
#define DBG_ERROR OSL_TRACE
#undef DBG_ERROR1
#define DBG_ERROR1 OSL_TRACE
#undef DBG_ERROR2
#define DBG_ERROR2 OSL_TRACE
#endif /* TEST_LAYOUT && !DBG_UTIL */
namespace layoutimpl
{
using namespace com::sun::star;
using rtl::OUString;
uno::Reference< awt::XWindowPeer >
getParent( uno::Reference< uno::XInterface > xRef )
{
do
{
uno::Reference< awt::XWindowPeer > xPeer( xRef, uno::UNO_QUERY );
if ( xPeer.is() )
return xPeer;
uno::Reference< awt::XLayoutContainer > xCont( xRef, uno::UNO_QUERY );
if ( xCont.is() )
xRef = xCont->getParent();
}
while ( xRef.is() );
return uno::Reference< awt::XWindowPeer >();
}
#if 0
static uno::Reference< awt::XWindowPeer >
getToplevel( uno::Reference< uno::XInterface > xRef )
{
uno::Reference< awt::XWindowPeer > xTop, i;
while ( ( i = uno::Reference< awt::XWindowPeer >( xRef, uno::UNO_QUERY ) ).is() )
{
xTop = i;
uno::Reference< awt::XLayoutContainer > xCont( xRef, uno::UNO_QUERY );
if ( xCont.is() )
xRef = xCont->getParent();
else
xRef = uno::Reference< awt::XWindowPeer >();
}
return xTop;
}
#endif
}
#include "bin.hxx"
#include "box.hxx"
#include "dialogbuttonhbox.hxx"
#include "flow.hxx"
#include "localized-string.hxx"
#include "table.hxx"
namespace layoutimpl
{
oslModule WidgetFactory::mSfx2Library = 0;
WindowCreator WidgetFactory::mSfx2CreateWidget = 0;
uno::Reference <awt::XLayoutContainer> WidgetFactory::createContainer (OUString const& name)
{
uno::Reference< awt::XLayoutContainer > xPeer;
if ( name.equalsAscii( "hbox" ) )
xPeer = uno::Reference< awt::XLayoutContainer >( new HBox() );
else if ( name.equalsAscii( "vbox" ) )
xPeer = uno::Reference< awt::XLayoutContainer >( new VBox() );
else if ( name.equalsAscii( "table" ) )
xPeer = uno::Reference< awt::XLayoutContainer >( new Table() );
else if ( name.equalsAscii( "flow" ) )
xPeer = uno::Reference< awt::XLayoutContainer >( new Flow() );
else if ( name.equalsAscii( "bin" ) )
xPeer = uno::Reference< awt::XLayoutContainer >( new Bin() );
else if ( name.equalsAscii( "min-size" ) )
xPeer = uno::Reference< awt::XLayoutContainer >( new MinSize() );
else if ( name.equalsAscii( "align" ) )
xPeer = uno::Reference< awt::XLayoutContainer >( new Align() );
else if ( name.equalsAscii( "dialogbuttonhbox" ) )
xPeer = uno::Reference< awt::XLayoutContainer >( new DialogButtonHBox() );
return xPeer;
}
uno::Reference <awt::XLayoutConstrains> WidgetFactory::toolkitCreateWidget (uno::Reference <awt::XToolkit> xToolkit, uno::Reference <uno::XInterface> xParent, OUString const& name, long properties)
{
uno::Reference< awt::XLayoutConstrains > xPeer;
bool bToplevel = !xParent.is();
// UNO Control Widget
awt::WindowDescriptor desc;
if ( bToplevel )
desc.Type = awt::WindowClass_TOP;
else
{
desc.Type = awt::WindowClass_SIMPLE;
#if 0
// top container -- a wrapper for framewindow -- is de-coupled
// from awt::XWindowPeer. So, getParent() fails at it.
uno::Reference< awt::XWindowPeer > xWinParent = getParent( xParent );
#else
uno::Reference< awt::XWindowPeer > xWinParent( xParent, uno::UNO_QUERY );
#endif
assert( xParent.is() );
assert( xWinParent.is() );
/*
With the new three layer instarr/rpath feature, when
prepending toolkit/unxlngx6.pro/lib or $SOLARVER/lib to
LD_LIBRARY_PATH, VCLXWindow::GetImplementation returns 0x0
vclxtoolkit::ImplCreateWindow failing to create any widget;
although it succeeds here.
While developing, one now must copy libtlx.so to
$OOO_INSTALL_PREFIX/openoffice.org/basis3.0/program/libtklx.so
each time.
*/
VCLXWindow* parentComponent = VCLXWindow::GetImplementation( xWinParent );
if ( !parentComponent )
throw uno::RuntimeException(
OUString::createFromAscii( "parent has no implementation" ),
uno::Reference< uno::XInterface >() );
desc.Parent = xWinParent;
}
desc.ParentIndex = 0;
// debugging help ...
desc.Bounds.X = 0;
desc.Bounds.Y = 0;
desc.Bounds.Width = 300;
desc.Bounds.Height = 200;
desc.WindowAttributes = properties;
desc.WindowServiceName = name;
uno::Reference< awt::XWindowPeer > xWinPeer;
try
{
OSL_TRACE("Asking toolkit: %s", OUSTRING_CSTR( desc.WindowServiceName ) );
xWinPeer = xToolkit->createWindow( desc );
if ( !xWinPeer.is() )
throw uno::RuntimeException(
OUString( RTL_CONSTASCII_USTRINGPARAM( "Cannot create peer" ) ),
uno::Reference< uno::XInterface >() );
xPeer = uno::Reference< awt::XLayoutConstrains >( xWinPeer, uno::UNO_QUERY );
}
catch( uno::Exception & )
{
DBG_ERROR1( "Warning: %s is not a recognized type\n", OUSTRING_CSTR( name ) );
return uno::Reference< awt::XLayoutConstrains >();
}
#if 0 // This shadows the show="false" property and seems otherwise
// unnecessary
// default to visible, let then people change it on properties
if ( ! bToplevel )
{
uno::Reference< awt::XWindow> xWindow( xPeer, uno::UNO_QUERY );
if ( xWindow.is() )
xWindow->setVisible( true );
}
#endif
return xPeer;
}
uno::Reference< awt::XLayoutConstrains >
WidgetFactory::createWidget (uno::Reference< awt::XToolkit > xToolkit, uno::Reference< uno::XInterface > xParent, OUString const& name, long properties)
{
uno::Reference< awt::XLayoutConstrains > xPeer;
xPeer = uno::Reference <awt::XLayoutConstrains> (createContainer (name), uno::UNO_QUERY);
if ( xPeer.is() )
return xPeer;
xPeer = implCreateWidget (xParent, name, properties);
if (xPeer.is ())
return xPeer;
#define FIXED_INFO 1
#if FIXED_INFO
OUString tName = name;
// FIXME
if ( name.equalsAscii( "fixedinfo" ) )
tName = OUString::createFromAscii( "fixedtext" );
xPeer = toolkitCreateWidget (xToolkit, xParent, tName, properties);
#else
xPeer = toolkitCreateWidget (xToolkit, xParent, name, properties);
#endif
return xPeer;
}
PropHelper::PropHelper() : LockHelper()
, cppu::OPropertySetHelper( maBrdcstHelper )
, pHelper( NULL )
{
}
void
PropHelper::addProp (const char *pName, sal_Int32 nNameLen, rtl_TextEncoding e,
uno::Type aType, void *pPtr)
{
// this sucks rocks for effiency ...
PropDetails aDetails;
aDetails.aName = rtl::OUString::intern( pName, nNameLen, e );
aDetails.aType = aType;
aDetails.pValue = pPtr;
maDetails.push_back( aDetails );
}
cppu::IPropertyArrayHelper & SAL_CALL
PropHelper::getInfoHelper()
{
if ( ! pHelper )
{
uno::Sequence< beans::Property > aProps( maDetails.size() );
for ( unsigned int i = 0; i < maDetails.size(); i++)
{
aProps[i].Name = maDetails[i].aName;
aProps[i].Type = maDetails[i].aType;
aProps[i].Handle = i;
aProps[i].Attributes = 0;
}
pHelper = new cppu::OPropertyArrayHelper( aProps, false /* fixme: faster ? */ );
}
return *pHelper;
}
sal_Bool SAL_CALL
PropHelper::convertFastPropertyValue(
uno::Any & rConvertedValue,
uno::Any & rOldValue,
sal_Int32 nHandle,
const uno::Any& rValue )
throw (lang::IllegalArgumentException)
{
OSL_ASSERT( nHandle >= 0 && nHandle < (sal_Int32) maDetails.size() );
// FIXME: no Any::getValue ...
getFastPropertyValue( rOldValue, nHandle );
if ( rOldValue != rValue )
{
rConvertedValue = rValue;
return sal_True; // changed
}
else
{
rConvertedValue.clear();
rOldValue.clear();
}
return sal_False;
}
void SAL_CALL
PropHelper::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle,
const uno::Any& rValue )
throw (uno::Exception)
{
OSL_ASSERT( nHandle >= 0 && nHandle < (sal_Int32) maDetails.size() );
const PropDetails &rInfo = maDetails[ nHandle ];
uno_type_assignData( rInfo.pValue, rInfo.aType.getTypeLibType(),
rValue.pData, rValue.pType,
0, 0, 0 );
if ( mpListener )
mpListener->propertiesChanged();
}
void SAL_CALL
PropHelper::getFastPropertyValue( uno::Any& rValue,
sal_Int32 nHandle ) const
{
OSL_ASSERT( nHandle >= 0 && nHandle < (sal_Int32) maDetails.size() );
const PropDetails &rInfo = maDetails[ nHandle ];
#if 0
switch ( rInfo.aType.getTypeClass() )
{
#define MAP(classtype,ctype) \
case uno::TypeClass_##classtype: \
rValue <<= *(ctype *)(rInfo.pValue); \
break
MAP( DOUBLE, double );
MAP( SHORT, sal_Int16 );
MAP( LONG, sal_Int32 );
MAP( UNSIGNED_SHORT, sal_uInt16 );
MAP( UNSIGNED_LONG, sal_uInt32 );
MAP( STRING, ::rtl::OUString );
default:
DBG_ERROR( "ERROR: unknown type to map!" );
break;
}
#undef MAP
#endif
rValue.setValue( rInfo.pValue, rInfo.aType );
}
::com::sun::star::uno::Any
PropHelper::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
{
return OPropertySetHelper::queryInterface( rType );
}
uno::Reference <beans::XPropertySetInfo> SAL_CALL PropHelper::getPropertySetInfo () throw (uno::RuntimeException)
{
return css::uno::Reference <css::beans::XPropertySetInfo> (createPropertySetInfo (getInfoHelper ()));
}
} // namespace layoutimpl
#include <awt/vclxbutton.hxx>
#include <awt/vclxdialog.hxx>
#include <awt/vclxfixedline.hxx>
#include <awt/vclxplugin.hxx>
#include <awt/vclxscroller.hxx>
#include <awt/vclxsplitter.hxx>
#include <awt/vclxtabcontrol.hxx>
#include <awt/vclxtabpage.hxx>
#include <toolkit/awt/vclxtoolkit.hxx>
#include <toolkit/awt/vclxwindow.hxx>
#include <vcl/button.hxx>
#include <vcl/dialog.hxx>
#include <vcl/fixed.hxx>
#include <vcl/tabctrl.hxx>
#include <vcl/tabpage.hxx>
#include <vcl/unohelp.hxx>
#include <layout/layout.hxx>
#include <toolkit/awt/vclxwindows.hxx>
#include <vcl/lstbox.hxx>
#include <vcl.hxx>
#include <typeinfo>
namespace layoutimpl
{
uno::Reference <awt::XLayoutConstrains> WidgetFactory::implCreateWidget (uno::Reference <uno::XInterface> xParent, OUString name, long attributes)
{
Window* parent = 0;
if (VCLXWindow* parentComponent = VCLXWindow::GetImplementation (xParent))
parent = parentComponent->GetWindow ();
VCLXWindow* component = 0;
Window* window = 0; //sfx2CreateWindow (&component, parent, name, attributes);
if (!window)
window = layoutCreateWindow (&component, parent, name, attributes);
uno::Reference <awt::XLayoutConstrains> reference;
if (window)
{
window->SetCreatedWithToolkit( sal_True );
if ( component )
component->SetCreatedWithToolkit( true );
reference = component;
window->SetComponentInterface( component );
if ( attributes & awt::WindowAttribute::SHOW )
window->Show();
}
return reference;
}
extern "C" { static void SAL_CALL thisModule() {} }
Window* WidgetFactory::sfx2CreateWindow (VCLXWindow** component, Window* parent, OUString const& name, long& attributes)
{
OSL_TRACE("Asking sfx2: %s", OUSTRING_CSTR (name));
if (!mSfx2Library)
{
OUString libraryName = ::vcl::unohelper::CreateLibraryName ("sfx", TRUE);
mSfx2Library = osl_loadModuleRelative (&thisModule, libraryName.pData, SAL_LOADMODULE_DEFAULT);
if (mSfx2Library)
{
OUString functionName (RTL_CONSTASCII_USTRINGPARAM ("CreateWindow"));
mSfx2CreateWidget = (WindowCreator) osl_getFunctionSymbol (mSfx2Library, functionName.pData);
}
}
if (mSfx2CreateWidget)
return mSfx2CreateWidget (component, name, parent, attributes);
return 0;
}
Window* WidgetFactory::layoutCreateWindow (VCLXWindow** component, Window *parent, OUString const& name, long& attributes)
{
Window* window = 0;
if (0)
{
;
}
if ( name.equalsAscii( "dialog" ) )
{
if ( parent == NULL )
parent = DIALOG_NO_PARENT;
window = new Dialog( parent, ImplGetWinBits( attributes, 0 ) );
*component = new layoutimpl::VCLXDialog();
attributes ^= awt::WindowAttribute::SHOW;
}
else if ( name.equalsAscii( "modaldialog" ) )
{
if ( parent == NULL )
parent = DIALOG_NO_PARENT;
window = new ModalDialog( parent, ImplGetWinBits( attributes, 0 ) );
*component = new layoutimpl::VCLXDialog();
attributes ^= awt::WindowAttribute::SHOW;
}
else if ( name.equalsAscii( "modelessdialog" ) )
{
if ( parent == NULL )
parent = DIALOG_NO_PARENT;
window = new ModelessDialog (parent, ImplGetWinBits (attributes, 0));
*component = new layoutimpl::VCLXDialog();
attributes ^= awt::WindowAttribute::SHOW;
}
else if ( name.equalsAscii( "sfxdialog" ) )
{
if ( parent == NULL )
parent = DIALOG_NO_PARENT;
window = new ClosingDialog (parent, ImplGetWinBits (attributes, 0));
*component = new layoutimpl::VCLXDialog();
attributes ^= awt::WindowAttribute::SHOW;
}
else if ( name.equalsAscii( "sfxmodaldialog" ) )
{
if ( parent == NULL )
parent = DIALOG_NO_PARENT;
window = new ClosingModalDialog( parent,
ImplGetWinBits( attributes, 0 ) );
*component = new layoutimpl::VCLXDialog();
attributes ^= awt::WindowAttribute::SHOW;
}
else if ( name.equalsAscii( "sfxmodelessdialog" ) )
{
if ( parent == NULL )
parent = DIALOG_NO_PARENT;
window = new ClosingModelessDialog (parent, ImplGetWinBits (attributes, 0));
*component = new layoutimpl::VCLXDialog();
attributes ^= awt::WindowAttribute::SHOW;
}
else if ( name.equalsAscii( "tabcontrol" ) )
{
window = new TabControl( parent, ImplGetWinBits( attributes, WINDOW_TABCONTROL ) );
*component = new layoutimpl::VCLXTabControl();
}
else if ( name.equalsAscii( "scroller" ) )
{
// used FixedImage because I just want some empty non-intrusive widget
window = new FixedImage( parent, ImplGetWinBits( attributes, 0 ) );
*component = new layoutimpl::VCLXScroller();
}
else if ( name.equalsAscii( "hsplitter" ) || name.equalsAscii( "vsplitter" ) )
{
window = new FixedImage( parent, ImplGetWinBits( attributes, 0 ) );
*component = new layoutimpl::VCLXSplitter( name.equalsAscii( "hsplitter" ) );
}
else if ( name.equalsAscii( "hfixedline" ) || name.equalsAscii( "vfixedline" ) )
{
WinBits nStyle = ImplGetWinBits( attributes, 0 );
nStyle ^= WB_HORZ;
if ( name.equalsAscii( "hfixedline" ) )
nStyle |= WB_HORZ;
else
nStyle |= WB_VERT;
window = new FixedLine( parent, nStyle );
*component = new layoutimpl::VCLXFixedLine();
}
else if ( name.equalsAscii( "okbutton" ) )
{
window = new PushButton( parent, ImplGetWinBits( attributes, 0 ) );
*component = new layoutimpl::VCLXOKButton( window );
window->SetType (WINDOW_OKBUTTON);
}
else if ( name.equalsAscii( "cancelbutton" ) )
{
window = new PushButton( parent, ImplGetWinBits( attributes, 0 ) );
*component = new layoutimpl::VCLXCancelButton( window );
window->SetType (WINDOW_CANCELBUTTON);
}
else if ( name.equalsAscii( "yesbutton" ) )
{
window = new PushButton( parent, ImplGetWinBits( attributes, 0 ) );
*component = new layoutimpl::VCLXYesButton( window );
window->SetType (WINDOW_OKBUTTON);
}
else if ( name.equalsAscii( "nobutton" ) )
{
window = new PushButton( parent, ImplGetWinBits( attributes, 0 ) );
window->SetType (WINDOW_CANCELBUTTON);
*component = new layoutimpl::VCLXNoButton( window );
}
else if ( name.equalsAscii( "retrybutton" ) )
{
window = new PushButton( parent, ImplGetWinBits( attributes, 0 ) );
*component = new layoutimpl::VCLXRetryButton( window );
}
else if ( name.equalsAscii( "ignorebutton" ) )
{
window = new PushButton( parent, ImplGetWinBits( attributes, 0 ) );
*component = new layoutimpl::VCLXIgnoreButton( window );
}
else if ( name.equalsAscii( "resetbutton" ) )
{
window = new PushButton( parent, ImplGetWinBits( attributes, 0 ) );
*component = new layoutimpl::VCLXResetButton( window );
}
else if ( name.equalsAscii( "applybutton" ) )
{
window = new PushButton( parent, ImplGetWinBits( attributes, 0 ) );
*component = new layoutimpl::VCLXApplyButton( window );
}
else if ( name.equalsAscii( "helpbutton" ) )
{
window = new PushButton( parent, ImplGetWinBits( attributes, 0 ) );
*component = new layoutimpl::VCLXHelpButton( window );
window->SetType (WINDOW_HELPBUTTON);
}
else if ( name.equalsAscii( "morebutton" ) )
{
window = new PushButton( parent, ImplGetWinBits( attributes, 0 ) );
*component = new layoutimpl::VCLXMoreButton( window );
window->SetType (WINDOW_MOREBUTTON);
}
else if ( name.equalsAscii( "advancedbutton" ) )
{
window = new PushButton( parent, ImplGetWinBits( attributes, 0 ) );
*component = new layoutimpl::VCLXAdvancedButton( window );
}
else if ( name.equalsAscii( "plugin" ) )
{
window = new Control( parent, ImplGetWinBits( attributes, 0 ) );
#ifndef __SUNPRO_CC
OSL_TRACE( "%s: parent=%p (%s)\n", __FUNCTION__, parent, typeid( *parent ).name() );
#endif
*component = new layoutimpl::VCLXPlugin( window, ImplGetWinBits( attributes, 0 ) );
}
else if ( name.equalsAscii( "tabpage" ) )
{
#if 0
if ( !parent )
parent = layout::TabPage::global_parent;
#else
if (layout::TabPage::global_parent)
parent = layout::TabPage::global_parent;
layout::TabPage::global_parent = 0;
#endif
//window = new TabPage( parent, ImplGetWinBits( attributes, 0 ) );
attributes ^= awt::WindowAttribute::SHOW;
WinBits nStyle = ImplGetWinBits( attributes, 0 );
nStyle |= WB_HIDE;
if (!parent)
{
window = new Dialog( parent, nStyle );
*component = new VCLXDialog();
}
else
{
window = new TabPage( parent, nStyle );
*component = new VCLXTabPage( window );
}
}
else if ( name.equalsAscii( "string" ) )
{
// FIXME: move <string>s.text to simple map<string> in root?
attributes &= ~awt::WindowAttribute::SHOW;
window = new Window( parent, ImplGetWinBits( attributes, 0 ) );
*component = new layoutimpl::LocalizedString();
}
#if 0 // parent paranoia
else if ( name.equalsAscii( "listbox" ) )
{
window = new ListBox (parent, ImplGetWinBits (attributes, 0));
*component = new VCLXListBox ();
}
#endif
else if (name.equalsAscii ("svxfontlistbox")
|| name.equalsAscii ("svxlanguagebox"))
{
window = new ListBox (parent, ImplGetWinBits (attributes, 0));
*component = new VCLXListBox ();
}
return window;
}
} // namespace layoutimpl
// Avoid polluting the rest of the code with vcl linkage pieces ...
#include <vcl/imagerepository.hxx>
#include <vcl/bitmapex.hxx>
#include <vcl/graph.hxx>
namespace layoutimpl
{
uno::Reference< graphic::XGraphic > loadGraphic( const char *pName )
{
BitmapEx aBmp;
OUString aStr( pName, strlen( pName ), RTL_TEXTENCODING_ASCII_US );
if ( aStr.compareToAscii( ".uno:" ) == 0 )
aStr = aStr.copy( 5 ).toAsciiLowerCase();
if ( !vcl::ImageRepository::loadImage( OUString::createFromAscii( pName ), aBmp, true ) )
return uno::Reference< graphic::XGraphic >();
return Graphic( aBmp ).GetXGraphic();
}
} // namespace layoutimpl

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: helper.hxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -29,8 +29,8 @@
*
************************************************************************/
#ifndef HELPER_HXX
#define HELPER_HXX
#ifndef LAYOUT_CORE_HELPER_HXX
#define LAYOUT_CORE_HELPER_HXX
#include <toolkit/dllapi.h>
#include <vector>
@@ -39,10 +39,19 @@
#include <com/sun/star/awt/XLayoutContainer.hpp>
#include <com/sun/star/awt/XVclWindowPeer.hpp>
#include <com/sun/star/xml/input/XRoot.hpp>
#include <com/sun/star/graphic/XGraphic.hpp>
#include <cppuhelper/implbase1.hxx>
#include <cppuhelper/propshlp.hxx>
#include <osl/module.h>
#include <rtl/ustring.hxx>
class Window;
class VCLXWindow;
extern "C"
{
typedef Window* (SAL_CALL *WindowCreator) (VCLXWindow** component, rtl::OUString const& name, Window* parent, long& attributes);
}
namespace layoutimpl
{
@@ -97,23 +106,13 @@ public:
virtual void SAL_CALL getFastPropertyValue( css::uno::Any& rValue,
sal_Int32 nHandle ) const;
// you -must- use this macro in sub-classes that define new properties.
// NB. 'static' ...
// com::sun::star::beans::XMultiPropertySet
#define PROPHELPER_SET_INFO \
css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL \
getPropertySetInfo() throw(css::uno::RuntimeException) \
{ \
static css::uno::Reference< css::beans::XPropertySetInfo > xInfo( \
createPropertySetInfo( getInfoHelper() ) ); \
return xInfo; \
}
PROPHELPER_SET_INFO
virtual css::uno::Reference <css::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo () throw (css::uno::RuntimeException);
struct Listener
{
virtual void propertiesChanged() = 0;
};
void setChangeListener( Listener *pListener )
{
mpListener = pListener;
@@ -131,25 +130,24 @@ css::uno::Any anyFromString (const rtl::OUString &value, const css::uno::Type &t
css::uno::Reference< css::awt::XWindowPeer >
getParent( css::uno::Reference< css::uno::XInterface > xPeer );
struct WidgetFactory
class TOOLKIT_DLLPUBLIC WidgetFactory
{
virtual css::uno::Reference< css::awt::XLayoutConstrains >
createWidget( css::uno::Reference< css::awt::XToolkit > xToolkit,
css::uno::Reference< css::uno::XInterface > xParent,
const rtl::OUString &rName, long nProps );
public:
static oslModule mSfx2Library;
static WindowCreator mSfx2CreateWidget;
// Should use UNO services in due course
static css::uno::Reference <css::awt::XLayoutConstrains> toolkitCreateWidget (css::uno::Reference <css::awt::XToolkit> xToolkit, css::uno::Reference <css::uno::XInterface> xParent, rtl::OUString const& name, long properties);
static css::uno::Reference< css::awt::XLayoutConstrains > createWidget( css::uno::Reference <css::awt::XToolkit > xToolkit, css::uno::Reference< css::uno::XInterface > xParent, rtl::OUString const &name, long properties);
static css::uno::Reference <css::awt::XLayoutContainer> createContainer (rtl::OUString const& name);
static css::uno::Reference <css::awt::XLayoutConstrains> implCreateWidget (css::uno::Reference <css::uno::XInterface> xParent, rtl::OUString name, long attributes);
static Window* sfx2CreateWindow (VCLXWindow** component, Window* parent, rtl::OUString const& name, long& attributes);
static Window* layoutCreateWindow (VCLXWindow** component, Window *parent, rtl::OUString const& name, long& attributes);
};
// A local factory method - should use UNO services in due course
css::uno::Reference< css::awt::XLayoutConstrains > TOOLKIT_DLLPUBLIC
createWidget( css::uno::Reference< css::awt::XToolkit > xToolkit,
css::uno::Reference< css::uno::XInterface > xParent,
const rtl::OUString &rName, long nProps );
// Factory for containers (not visible ones)
css::uno::Reference< css::awt::XLayoutContainer >
createContainer( const rtl::OUString &rName );
css::uno::Reference< css::graphic::XGraphic > loadGraphic( const char *pName );
} // namespace layoutimpl
} // end namespace layoutimpl
#endif /* HELPER_HXX */
#endif /* LAYOUT_CORE_HELPER_HXX */

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: import.cxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -35,14 +35,12 @@
#include <com/sun/star/awt/XDialog2.hpp>
#include <vcl/image.hxx>
#include <tools/debug.hxx>
#include <layout/layout.hxx>
#include "root.hxx"
#include "helper.hxx"
#include "dialogbuttonhbox.hxx"
// Hmm...
#include "layout/layout.hxx"
#include "layout/layoutcore.hxx"
#define XMLNS_LAYOUT_URI "http://openoffice.org/2007/layout"
#define XMLNS_CONTAINER_URI "http://openoffice.org/2007/layout/container"
@@ -99,7 +97,16 @@ SAL_THROW (())
{
OUString aTitle;
if ( findAndRemove( "title", aProps, aTitle ) )
{
OSL_TRACE("Setting title: %s", OUSTRING_CSTR( aTitle ) );
xDialog->setTitle( aTitle );
}
OUString aHelpId;
if ( findAndRemove( "help-id", aProps, aHelpId ) )
{
OSL_TRACE("Setting help-id: %s", OUSTRING_CSTR( aHelpId ) );
xDialog->setHelpId( aHelpId.toInt32 () );
}
} // DEBUG:
else if ( pParent == NULL )
{
@@ -122,32 +129,23 @@ SAL_THROW (())
if ( DialogButtonHBox *b = dynamic_cast<DialogButtonHBox *> ( mpWidget->getPeer().get() ) )
b->setOrdering ( aOrdering );
#ifdef IMPORT_RADIOGROUP
bool bSetRadioGroup, bSetTitle;
OUString aRadioGroup, aTitle;
bool bSetRadioGroup;
OUString aRadioGroup;
bSetRadioGroup = findAndRemove( "radiogroup", aProps, aRadioGroup );
bSetTitle = findAndRemove( "title", aProps, aTitle );
setProperties( mxPeer, aProps );
mpWidget->setProperties( aProps );
// we need to add radio buttons to the group after their properties are
// set, so we can check if they should be the one selected by default or not.
// And the state changed event isn't fired when changing properties.
if ( bSetRadioGroup )
uno::Reference< awt::XRadioButton > xRadio( mpWidget->getPeer(), uno::UNO_QUERY );
if ( xRadio.is() )
{
static int i = 0;
i++;
uno::Reference< awt::XRadioButton > xRadio( mxPeer, uno::UNO_QUERY );
if ( xRadio.is() )
pImport->mxRadioGroups.addItem( aRadioGroup, xRadio );
if (!bSetRadioGroup)
aRadioGroup = OUString::createFromAscii ("default");
pImport->mxRadioGroups.addItem( aRadioGroup, xRadio );
}
if ( bSetTitle )
{
uno::Reference< awt::XDialog2 > xDialog( mxPeer, uno::UNO_QUERY );
if ( xDialog.is() )
xDialog->setTitle( aTitle );
}
#endif
}
WidgetElement::~WidgetElement()
@@ -181,7 +179,7 @@ WidgetElement::startChildElement ( sal_Int32 nUid, OUString const &name,
// transex3 hack.
void SAL_CALL
WidgetElement::characters( OUString const& rChars )
throw (css::xml::sax::SAXException, css::uno::RuntimeException)
throw (xml::sax::SAXException, uno::RuntimeException)
{
if ( mpWidget && rChars.trim().getLength() )
{
@@ -239,11 +237,104 @@ uno::Reference< xml::input::XElement > ImportContext::startRootElement(
uno::Reference< xml::input::XAttributes > const & xAttributes )
throw (xml::sax::SAXException, uno::RuntimeException)
{
if (XMLNS_LAYOUT_UID != nUid)
if ( XMLNS_LAYOUT_UID != nUid )
throw xml::sax::SAXException(
OUString( RTL_CONSTASCII_USTRINGPARAM( "invalid namespace!" ) ),
uno::Reference< uno::XInterface >(), uno::Any() );
return new ToplevelElement( rLocalName, xAttributes, this );
return new ToplevelElement( rLocalName, xAttributes, this );
}
RadioGroups::RadioGroups()
{
}
void RadioGroups::addItem( rtl::OUString id, uno::Reference< awt::XRadioButton > xRadio )
throw (uno::RuntimeException)
{
if ( ! xRadio.is() )
throw uno::RuntimeException();
uno::Reference< RadioGroup > group;
RadioGroupsMap::iterator it = mxRadioGroups.find( id );
if ( it == mxRadioGroups.end() )
{
group = uno::Reference< RadioGroup > ( new RadioGroup() );
mxRadioGroups [id] = group;
}
else
group = it->second;
group->addItem( xRadio );
}
RadioGroups::RadioGroup::RadioGroup()
{
}
void RadioGroups::RadioGroup::addItem( uno::Reference< awt::XRadioButton > xRadio )
{
if ( ! mxSelectedRadio.is() )
{
xRadio->setState( true );
mxSelectedRadio = xRadio;
}
else if ( xRadio->getState() )
{
#if 1
xRadio->setState( false );
#else // huh, why select last added?
mxSelectedRadio->setState( false );
mxSelectedRadio = xRadio;
#endif
}
// TOO late: actionPerformed is called before itemStateChanged.
// If client code (wrongly?) uses actionPerformed, it will see
// the previous RadioButtons' state.
xRadio->addItemListener( this );
uno::Reference< awt::XButton > xButton = uno::Reference< awt::XButton > ( xRadio, uno::UNO_QUERY );
xButton->addActionListener( this );
mxRadios.push_back (xRadio);
}
void RadioGroups::RadioGroup::handleSelected ()
throw (uno::RuntimeException)
{
for ( RadioButtonsList::iterator it = mxRadios.begin();
it != mxRadios.end(); it++ )
if ( *it != mxSelectedRadio && (*it)->getState() )
{
mxSelectedRadio->setState( false );
mxSelectedRadio = *it;
break;
}
}
// awt::XItemListener
void RadioGroups::RadioGroup::itemStateChanged( const awt::ItemEvent& e )
throw (uno::RuntimeException)
{
// TOO late: actionPerformed is called before itemStateChanged.
// If client code (wrongly?) uses actionPerformed, it will see
// the previous RadioButtons' state.
// Need this for initialization, though.
if ( e.Selected )
handleSelected ();
}
// awt::XActionListener
void RadioGroups::RadioGroup::actionPerformed( const awt::ActionEvent& )
throw (uno::RuntimeException)
{
handleSelected ();
}
// lang::XEventListener
void SAL_CALL RadioGroups::RadioGroup::disposing( const lang::EventObject& )
throw (uno::RuntimeException)
{
}
} // namespace layoutimpl

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: import.hxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -29,15 +29,19 @@
*
************************************************************************/
#ifndef IMPORT_HXX
#define IMPORT_HXX
#ifndef LAYOUT_CORE_IMPORT_HXX
#define LAYOUT_CORE_IMPORT_HXX
#include <map>
#include <list>
#define _BACKWARD_BACKWARD_WARNING_H 1
#include <hash_map>
#include <com/sun/star/xml/input/XRoot.hpp>
#include <cppuhelper/implbase1.hxx>
#include <com/sun/star/awt/XButton.hpp>
#include <com/sun/star/awt/XRadioButton.hpp>
namespace layoutimpl
{
@@ -45,94 +49,41 @@ class LayoutRoot;
class LayoutWidget;
namespace css = ::com::sun::star;
/* blocks under IMPORT_RADIOGROUP are marked for deletion.
The use of it is to synchronize radio buttons into groups.
But toolkit doesn't fire toggle events when toggled from the code.
Another approach is to implement our own XRadioButton from our
internal toolkit. We could have some singleton where they would
register... We would need to add another attribute...
*/
#ifdef IMPORT_RADIOGROUP
#include <com/sun/star/awt/XRadioButton.hpp>
class RadioGroups
{
public:
RadioGroups()
{
}
RadioGroups();
void addItem( rtl::OUString id, css::uno::Reference< css::awt::XRadioButton > xRadio )
throw (css::uno::RuntimeException)
{
if ( ! xRadio.is() )
throw css::uno::RuntimeException();
css::uno::Reference< RadioGroup > group;
RadioGroupsMap::iterator it = mxRadioGroups.find( id );
if ( it == mxRadioGroups.end() )
{
group = css::uno::Reference< RadioGroup > ( new RadioGroup() );
mxRadioGroups [id] = group;
}
else
group = it->second;
group->addItem( xRadio );
}
throw (css::uno::RuntimeException);
private:
class RadioGroup : public ::cppu::WeakImplHelper1< css::awt::XItemListener >
, public ::cppu::WeakImplHelper1< css::awt::XActionListener >
{
public:
RadioGroup()
{
}
void addItem( css::uno::Reference< css::awt::XRadioButton > xRadio )
{
if ( ! mxSelectedRadio.is() )
{
xRadio->setState( true );
mxSelectedRadio = xRadio;
}
else if ( xRadio->getState() )
{
mxSelectedRadio->setState( false );
mxSelectedRadio = xRadio;
}
xRadio->addItemListener( this );
mxRadios.push_back (xRadio);
}
RadioGroup();
void addItem( css::uno::Reference< css::awt::XRadioButton > xRadio );
private:
typedef std::list< css::uno::Reference< css::awt::XRadioButton > > RadioButtonsList;
RadioButtonsList mxRadios;
css::uno::Reference< css::awt::XRadioButton > mxSelectedRadio;
void handleSelected ()
throw (css::uno::RuntimeException);
// awt::XItemListener
void itemStateChanged( const com::sun::star::awt::ItemEvent& e)
throw (css::uno::RuntimeException)
{
if ( e.Selected )
{
mxSelectedRadio->setState( false );
// the only radio button selected would be the one that fired the event
for ( RadioButtonsList::iterator it = mxRadios.begin();
it != mxRadios.end(); it++ )
if ( (*it)->getState() )
{
mxSelectedRadio = *it;
break;
}
}
}
void SAL_CALL itemStateChanged( const css::awt::ItemEvent& e )
throw (css::uno::RuntimeException);
// awt::XActionListener
void SAL_CALL actionPerformed( const css::awt::ActionEvent& e )
throw (css::uno::RuntimeException);
// lang::XEventListener
void SAL_CALL disposing( const css::lang::EventObject& )
throw (css::uno::RuntimeException)
{
}
throw (css::uno::RuntimeException);
};
// each RadioGroup will stay alive after RadioGroups die with the ImportContext
@@ -140,7 +91,6 @@ private:
typedef std::map< rtl::OUString, css::uno::Reference< RadioGroup > > RadioGroupsMap;
RadioGroupsMap mxRadioGroups;
};
#endif
#if 0
// generator
@@ -196,9 +146,7 @@ class ImportContext : public ::cppu::WeakImplHelper1< css::xml::input::XRoot >
public:
sal_Int32 XMLNS_LAYOUT_UID, XMLNS_CONTAINER_UID;
LayoutRoot &mrRoot; // switch to XNameContainer ref ?
#ifdef IMPORT_RADIOGROUP
RadioGroups mxRadioGroups;
#endif
inline ImportContext( LayoutRoot &rRoot ) SAL_THROW( () )
: mrRoot( rRoot ) {}
@@ -312,4 +260,4 @@ public:
} // namespace layoutimpl
#endif /* IMPORT_HXX */
#endif /* LAYOUT_CORE_IMPORT_HXX */

View File

@@ -0,0 +1,87 @@
/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile$
*
* $Revision$
*
* last change: $Author$ $Date$
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
*
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2005 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston,
* MA 02110-1301 USA
*
************************************************************************/
#include "localized-string.hxx"
#include <toolkit/helper/property.hxx>
#include <vcl/window.hxx>
namespace layoutimpl
{
namespace css = ::com::sun::star;
using namespace css;
using rtl::OUString;
LocalizedString::LocalizedString()
: VCLXWindow()
{
}
void LocalizedString::ImplGetPropertyIds( std::list< sal_uInt16 > &ids )
{
PushPropertyIds( ids, BASEPROPERTY_TEXT, 0);
VCLXWindow::ImplGetPropertyIds( ids );
}
// XInterface
uno::Any LocalizedString::queryInterface( uno::Type const& rType )
throw(uno::RuntimeException)
{
uno::Any aRet = ::cppu::queryInterface( rType,
SAL_STATIC_CAST( awt::XFixedText*, this ) );
return (aRet.hasValue() ? aRet : VCLXWindow::queryInterface( rType ));
}
void LocalizedString::setText( OUString const& s )
throw(uno::RuntimeException)
{
::vos::OGuard aGuard( GetMutex() );
if ( Window *w = GetWindow() )
return w->SetText( s );
}
OUString LocalizedString::getText()
throw(uno::RuntimeException)
{
::vos::OGuard aGuard( GetMutex() );
if ( Window *w = GetWindow() )
return w->GetText();
return OUString();
}
} // namespace layoutimpl

View File

@@ -0,0 +1,84 @@
/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile$
*
* $Revision$
*
* last change: $Author$ $Date$
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
*
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2005 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston,
* MA 02110-1301 USA
*
************************************************************************/
#ifndef LAYOUT_CORE_LOCALIZED_STRING_HXX
#define LAYOUT_CORE_LOCALIZED_STRING_HXX
#include <com/sun/star/awt/XFixedText.hpp>
#include <toolkit/awt/vclxwindow.hxx>
namespace layoutimpl
{
namespace css = ::com::sun::star;
// FIXME: misuse XFixedText interface for simple string
class LocalizedString : public css::awt::XFixedText
, public VCLXWindow
{
public:
LocalizedString();
// css::uno::XInterface
css::uno::Any SAL_CALL queryInterface( css::uno::Type const& rType )
throw(css::uno::RuntimeException);
void SAL_CALL acquire() throw() { OWeakObject::acquire(); }
void SAL_CALL release() throw() { OWeakObject::release(); }
// css::awt::XFixedText
void SAL_CALL setText( ::rtl::OUString const& s )
throw(css::uno::RuntimeException);
::rtl::OUString SAL_CALL getText()
throw(css::uno::RuntimeException);
void SAL_CALL setAlignment( sal_Int16 )
throw(css::uno::RuntimeException) { }
sal_Int16 SAL_CALL getAlignment()
throw(css::uno::RuntimeException) { return 0; }
// css::awt::XLayoutConstrains
virtual css::awt::Size SAL_CALL getMinimumSize()
throw(css::uno::RuntimeException) { return css::awt::Size( 0, 0 ); }
css::awt::Size SAL_CALL getPreferredSize()
throw(css::uno::RuntimeException) { return getMinimumSize(); }
css::awt::Size SAL_CALL calcAdjustedSize( css::awt::Size const& size )
throw(css::uno::RuntimeException) { return size; }
static void ImplGetPropertyIds( std::list< sal_uInt16 > &ids );
virtual void GetPropertyIds( std::list< sal_uInt16 > &ids )
{ return ImplGetPropertyIds( ids ); }
};
} // namespace layoutimpl
#endif /* LAYOUT_CORE_LOCALIZED_STRING_HXX */

View File

@@ -6,9 +6,9 @@
#
# OpenOffice.org - a multi-platform office productivity suite
#
# $RCSfile: makefile.mk,v $
# $RCSfile$
#
# $Revision: 1.3 $
# $Revision$
#
# This file is part of OpenOffice.org.
#
@@ -29,9 +29,9 @@
#
#*************************************************************************
PRJ=..$/..
PRJ=../../..
PRJNAME=toolkit
TARGET=layoutcore
TARGET=layout-core
ENABLE_EXCEPTIONS=true
# --- Settings -----------------------------------------------------
@@ -55,11 +55,14 @@ SLOFILES= \
$(SLO)$/flow.obj \
$(SLO)$/helper.obj \
$(SLO)$/import.obj \
$(SLO)$/localized-string.obj \
$(SLO)$/proplist.obj \
$(SLO)$/root.obj \
$(SLO)$/table.obj \
$(SLO)$/timer.obj \
$(SLO)$/translate.obj
$(SLO)$/translate.obj\
$(SLO)$/vcl.obj\
#
# --- Targets ------------------------------------------------------

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: precompiled_xmlscript.hxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: proplist.cxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -39,16 +39,15 @@
#include <com/sun/star/awt/VclWindowPeerAttribute.hpp>
#include <tools/debug.hxx>
#include "layout/layoutcore.hxx"
#include "helper.hxx"
#if TEST_LAYOUT && !defined( DBG_UTIL )
#include <stdio.h>
#undef DBG_ERROR
#define DBG_ERROR printf
#define DBG_ERROR OSL_TRACE
#undef DBG_ERROR1
#define DBG_ERROR1 printf
#define DBG_ERROR1 OSL_TRACE
#undef DBG_ERROR2
#define DBG_ERROR2 printf
#define DBG_ERROR2 OSL_TRACE
#endif /* TEST_LAYOUT && !DBG_UTIL */
namespace layoutimpl
@@ -251,18 +250,17 @@ setProperties( uno::Reference< uno::XInterface > const& xPeer,
if ( !prophlp::canHandleProps( xPeer ) )
{
DBG_ERROR( "Error: setProperties - bad handle ignoring props:\n" );
PropList::const_iterator cur;
for ( cur = rProps.begin(); cur != rProps.end(); cur++ )
for ( PropList::const_iterator it = rProps.begin(); it != rProps.end();
it++ )
{
OString attr = OUStringToOString( cur->first, RTL_TEXTENCODING_UTF8 );
OString value = OUStringToOString( cur->second, RTL_TEXTENCODING_UTF8 );
DBG_ERROR2( "%s=%s\n", OUSTRING_CSTR( it->first ), OUSTRING_CSTR( it->second ) );
}
return;
}
PropList::const_iterator cur;
for ( cur = rProps.begin(); cur != rProps.end(); cur++ )
setProperty( xPeer, cur->first, cur->second );
for ( PropList::const_iterator it = rProps.begin(); it != rProps.end();
it++ )
setProperty( xPeer, it->first, it->second );
}
void
@@ -271,7 +269,7 @@ setProperty( uno::Reference< uno::XInterface > const& xPeer,
{
OUString unoAttr = toUnoNaming( attr );
OSL_TRACE( "setting %s=%s\n", OUSTRING_CSTR( attr ), OUSTRING_CSTR( value ) );
OSL_TRACE( "setting %s=%s", OUSTRING_CSTR( attr ), OUSTRING_CSTR( value ) );
// get a Property object
beans::Property prop;
try
@@ -350,7 +348,7 @@ static const AttributesMap attribsMap[] =
{ "spin", awt::VclWindowPeerAttribute::SPIN, false },
{ "vscroll", awt::VclWindowPeerAttribute::VSCROLL, false },
// cutting on OK, YES_NO_CANCEL and related obscure attributes...
// cutting on OK, YES_NO_CANCEL and related obsite attributes...
};
static const int attribsMapLen = sizeof( attribsMap ) / sizeof( AttributesMap );
@@ -382,8 +380,6 @@ long getAttribute( const OUString &rName, bool bTopWindow )
void propsFromAttributes( const uno::Reference<xml::input::XAttributes> & xAttributes,
PropList &rProps, sal_Int32 nNamespace )
{
sal_Int32 nAttrs = xAttributes->getLength();
for ( sal_Int32 i = 0; i < nAttrs; i++ )
{
@@ -402,15 +398,16 @@ void propsFromAttributes( const uno::Reference<xml::input::XAttributes> & xAttri
bool
findAndRemove( const char *pAttr, PropList &rProps, OUString &rValue )
{
PropList::iterator cur;
PropList::iterator it;
OUString aName = OUString::createFromAscii( pAttr );
for ( cur = rProps.begin(); cur != rProps.end(); cur++ )
for ( it = rProps.begin(); it != rProps.end(); it++ )
{
if ( cur->first.equalsIgnoreAsciiCase( aName ) )
if ( it->first.equalsIgnoreAsciiCase( aName )
|| it->first.equalsIgnoreAsciiCase( OUString::createFromAscii ("_") + aName ) )
{
rValue = cur->second;
rProps.erase( cur );
rValue = it->second;
rProps.erase( it );
return true;
}
}

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: layoutcore.hxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -29,40 +29,39 @@
*
************************************************************************/
#ifndef _LAYOUT_CORE_HXX_
#define _LAYOUT_CORE_HXX_
#include <com/sun/star/awt/XToolkit.hpp>
#include <com/sun/star/graphic/XGraphic.hpp>
#include <com/sun/star/awt/XLayoutContainer.hpp>
#include <com/sun/star/awt/XLayoutConstrains.hpp>
#include <layout/layout.hxx>
#ifndef LAYOUT_CORE_PROPLIST_HXX
#define LAYOUT_CORE_PROPLIST_HXX
#include <com/sun/star/beans/XPropertySetInfo.hpp>
#include <com/sun/star/xml/input/XAttributes.hpp>
#include <list>
#include <rtl/ustring.hxx>
#include <toolkit/dllapi.h>
\
namespace layoutimpl
{
namespace css = layout::css;
namespace css = ::com::sun::star;
css::uno::Reference< css::awt::XLayoutContainer >
createContainer( const rtl::OUString &rName );
typedef std::list< std::pair< rtl::OUString, rtl::OUString > > PropList;
css::uno::Reference< css::awt::XLayoutConstrains >
createWidget( css::uno::Reference< css::awt::XToolkit > xToolkit,
css::uno::Reference< css::uno::XInterface > xParent,
const rtl::OUString &rName, long nProps );
void propsFromAttributes( const css::uno::Reference<css::xml::input::XAttributes> & xAttributes,
PropList &rProps, sal_Int32 nNamespace );
css::uno::Reference< css::awt::XLayoutConstrains >
createInternalWidget( css::uno::Reference< css::awt::XToolkit > xToolkit,
css::uno::Reference< css::uno::XInterface > xParent,
const rtl::OUString &rName, long nProps );
void setProperties( css::uno::Reference< css::uno::XInterface > const& xPeer,
PropList const& rProps);
css::uno::Reference< css::graphic::XGraphic > loadGraphic( const char *pName );
void setProperty( css::uno::Reference< css::uno::XInterface > const& xPeer,
rtl::OUString const& attr, rtl::OUString const& value );
long getAttributeProps( PropList &rProps );
bool findAndRemove( const char *pAttr, PropList &rProps, rtl::OUString &rValue);
// Helpers - unfortunately VCLXWindows don't implement XPropertySet
// but containers do - these helpers help us to hide this
namespace prophlp
{
// can we set properties on this handle ?
bool TOOLKIT_DLLPUBLIC canHandleProps( const css::uno::Reference< css::uno::XInterface > &xRef );
// if so which properties ?
@@ -75,6 +74,22 @@ void TOOLKIT_DLLPUBLIC setProperty( const css::uno::Reference< css::uno::XInterf
css::uno::Any TOOLKIT_DLLPUBLIC getProperty( const css::uno::Reference< css::uno::XInterface > &xRef,
const rtl::OUString &rName );
} // namespace prophlp
} // namespace layoutimpl
#endif // _LAYOUT_CORE_HXX_
#if !OUSTRING_CSTR_PARANOIA
#define OUSTRING_CSTR( str ) \
rtl::OUStringToOString( str, RTL_TEXTENCODING_ASCII_US ).getStr()
#else
inline char const* OUSTRING_CSTR( rtl::OUString const& str )
{
rtl::OString *leak
= new rtl::OString (rtl::OUStringToOString (str, RTL_TEXTENCODING_ASCII_US));
return leak->getStr();
}
#endif
#endif /* LAYOUT_CORE_PROPLIST_HXX */

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: root.cxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -31,8 +31,7 @@
#include "root.hxx"
#include <assert.h>
#include <stdio.h>
#include <cassert>
#include <com/sun/star/awt/WindowAttribute.hpp>
#include <com/sun/star/awt/XMessageBox.hpp>
@@ -47,7 +46,6 @@
#include "timer.hxx"
#include "translate.hxx"
namespace layoutimpl
{
@@ -102,11 +100,12 @@ void ShowMessageBox( uno::Reference< lang::XMultiServiceFactory > const& xFactor
xMessageBox->execute();
//FIXME: exceptions not caught and printed at top level??
//else
printf( "%s\n", OUSTRING_CSTR( aMessage ) );
//printf( "%s\n", OUSTRING_CSTR( aMessage ) );
}
void LayoutRoot::error( OUString const& message )
{
OSL_TRACE( "%s\n", OUSTRING_CSTR( message ) );
ShowMessageBox( mxFactory, mxToolkit,
OUString::createFromAscii( "Fatal error" ),
message );
@@ -140,7 +139,7 @@ void SAL_CALL LayoutRoot::initialize( const uno::Sequence< uno::Any >& aArgument
OUString::createFromAscii( "com.sun.star.xml.sax.Parser" ) ),
uno::UNO_QUERY );
OSL_ASSERT( xParser.is() );
if (! xParser.is() )
if (! xParser.is())
{
throw uno::RuntimeException(
OUString::createFromAscii( "cannot create sax-parser component" ),
@@ -249,9 +248,9 @@ uno::Sequence< OUString > SAL_CALL LayoutRoot::getElementNames()
uno::Sequence< OUString > aNames( maItems.size() );
sal_Int32 nPos = 0;
for ( ItemHash::const_iterator i = maItems.begin();
i != maItems.end(); i++ )
aNames[ nPos++ ] = i->first;
for ( ItemHash::const_iterator it = maItems.begin();
it != maItems.end(); it++ )
aNames[ nPos++ ] = it->first;
return aNames;
}
@@ -345,9 +344,9 @@ uno::Reference< awt::XLayoutConstrains > LayoutRoot::getToplevel()
uno::Reference< awt::XLayoutConstrains > LayoutRoot::getById( OUString id )
{
uno::Reference< awt::XLayoutConstrains > rRef = 0;
ItemHash::iterator i = maItems.find( id );
if ( i != maItems.end() )
rRef = i->second;
ItemHash::iterator it = maItems.find( id );
if ( it != maItems.end() )
rRef = it->second;
return rRef;
}
#endif
@@ -363,7 +362,7 @@ LayoutWidget::LayoutWidget( uno::Reference< awt::XToolkit > xToolkit,
xParent = uno::Reference< awt::XLayoutContainer >( xContainer->getParent(), uno::UNO_QUERY );
}
mxWidget = createWidget( xToolkit, xParent, unoName, attrbs );
mxWidget = WidgetFactory::createWidget( xToolkit, xParent, unoName, attrbs );
assert( mxWidget.is() );
mxContainer = uno::Reference< awt::XLayoutContainer >( mxWidget, uno::UNO_QUERY );
}

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: root.hxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -29,9 +29,10 @@
*
************************************************************************/
#ifndef CORE_ROOT_HXX
#define CORE_ROOT_HXX
#ifndef LAYOUT_CORE_ROOT_HXX
#define LAYOUT_CORE_ROOT_HXX
#define _BACKWARD_BACKWARD_WARNING_H 1
#include <hash_map>
#include <com/sun/star/awt/XLayoutRoot.hpp>
@@ -44,7 +45,7 @@
#include <cppuhelper/interfacecontainer.h>
#include <toolkit/dllapi.h>
#include "proplist.hxx"
#include <layout/core/proplist.hxx>
namespace layoutimpl
{
@@ -156,4 +157,4 @@ protected:
} // namespace layoutimpl
#endif // CORE_ROOT_HXX
#endif /* LAYOUT_CORE_ROOT_HXX */

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: table.cxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -79,7 +79,7 @@ Table::Table()
Table::ChildData::ChildData( uno::Reference< awt::XLayoutConstrains > const& xChild )
: Box_Base::ChildData( xChild )
// , mbExpand( { 0, 1 } )
// , mbExpand( { 1, 1 } )
, mnColSpan( 1 )
, mnRowSpan( 1 )
, mnLeftCol( 0 )
@@ -87,7 +87,7 @@ Table::ChildData::ChildData( uno::Reference< awt::XLayoutConstrains > const& xCh
, mnTopRow( 0 )
, mnBottomRow( 0 )
{
mbExpand[ 0 ] = 0;
mbExpand[ 0 ] = 1;
mbExpand[ 1 ] = 1;
}
@@ -139,7 +139,7 @@ Table::getMinimumSize() throw( uno::RuntimeException )
col = 0;
row++;
unsigned int i = col + ( row*mnColsLen );
unsigned int i = col +( row*mnColsLen );
while ( aTable.size() > i && !aTable[ i ] )
i++;

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: table.hxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -29,10 +29,10 @@
*
************************************************************************/
#ifndef TABLE_HXX
#define TABLE_HXX
#ifndef LAYOUT_CORE_TABLE_HXX
#define LAYOUT_CORE_TABLE_HXX
#include "box-base.hxx"
#include <layout/core/box-base.hxx>
namespace layoutimpl
{
@@ -99,10 +99,8 @@ public:
virtual sal_Int32 SAL_CALL getHeightForWidth( sal_Int32 /*nWidth*/ )
throw(css::uno::RuntimeException)
{ return maRequisition.Height; }
PROPHELPER_SET_INFO
};
} // namespace layoutimpl
#endif /*TABLE_HXX*/
#endif /* LAYOUT_CORE_TABLE_HXX */

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: timer.cxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -101,12 +101,12 @@ public:
// 1. remove duplications and children
for ( ContainerList::iterator it = mxContainers.begin();
it != mxContainers.end(); it++ )
it != mxContainers.end(); it++ )
eraseChildren( it, mxContainers );
// 2. check damage extent
for ( ContainerList::iterator it = mxContainers.begin();
it != mxContainers.end(); it++ )
it != mxContainers.end(); it++ )
{
uno::Reference< awt::XLayoutContainer > xContainer = *it;
while ( xContainer->getParent().is() && isContainerDamaged( xContainer ) )
@@ -126,7 +126,7 @@ public:
}
// 3. force re-calculations
for( ContainerList::iterator it = mxContainers.begin();
for ( ContainerList::iterator it = mxContainers.begin();
it != mxContainers.end(); it++ )
(*it)->allocateArea( (*it)->getAllocatedArea() );
}

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: timer.hxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -29,8 +29,8 @@
*
************************************************************************/
#ifndef CORE_TIMER_HXX
#define CORE_TIMER_HXX
#ifndef LAYOUT_CORE_TIMER_HXX
#define LAYOUT_CORE_TIMER_HXX
#include <com/sun/star/awt/XLayoutUnit.hpp>
#include <cppuhelper/implbase1.hxx>
@@ -50,4 +50,4 @@ public:
}
#endif /*CORE_TIMER_HXX*/
#endif /* LAYOUT_CORE_TIMER_HXX */

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: translate.cxx,v $
* $RCSfile$
*
* $Revision: 1.4 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -33,7 +33,7 @@
#include <list>
#if TEST_LAYOUT
#include <stdio.h>
#include <cstdio>
#include "tools/getprocessworkingdir.hxx"
#endif
@@ -58,13 +58,13 @@ getLocaleSubdirList( lang::Locale const& rLocale )
{
std::list<OUString> aSubdirs;
aSubdirs.push_front( OUString::createFromAscii( "." ) );
aSubdirs.push_front( OUString::createFromAscii( "en_US" ) );
aSubdirs.push_front( OUString::createFromAscii( "en-US" ) );
if ( rLocale.Language.getLength() )
aSubdirs.push_front( rLocale.Language );
if ( rLocale.Country.getLength() )
{
OUString aLocaleCountry = rLocale.Language
+ OUString::createFromAscii( "_" )
+ OUString::createFromAscii( "-" )
+ rLocale.Country;
aSubdirs.push_front( aLocaleCountry );
if ( rLocale.Variant.getLength() )
@@ -93,9 +93,7 @@ getFirstExisting( OUString const& aDir, std::list<OUString> const& aSubDirs,
i != aSubDirs.end(); i++ )
{
String aFile = aDir + aSlash + *i + aSlash + aXMLName;
#if TEST_LAYOUT
printf( "testing: %s\n", OUSTRING_CSTR( aFile ) );
#endif
OSL_TRACE( "testing: %s", OUSTRING_CSTR( aFile ) );
if ( fileExists( aFile ) )
return aFile;
}
@@ -129,9 +127,7 @@ readRightTranslation( OUString const& aXMLName )
aXMLFile = getFirstExisting( aXMLDir, aSubdirs, aXMLName );
}
#if TEST_LAYOUT
printf( "FOUND:%s\n", OUSTRING_CSTR ( OUString (aXMLFile) ) );
#endif /* TEST_LAYOUT */
OSL_TRACE( "FOUND:%s", OUSTRING_CSTR ( OUString (aXMLFile) ) );
return aXMLFile;
}

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: translate.hxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -29,8 +29,8 @@
*
************************************************************************/
#ifndef CORE_TRANSLATE_HXX
#define CORE_TRANSLATE_HXX
#ifndef LAYOUT_CORE_TRANSLATE_HXX
#define LAYOUT_CORE_TRANSLATE_HXX
namespace rtl {
class OUString;
@@ -41,4 +41,4 @@ namespace layoutimpl
::rtl::OUString readRightTranslation( ::rtl::OUString const& aXMLName );
} // namespace layoutimpl
#endif /* CORE_TRANSLATE_HXX */
#endif /* LAYOUT_CORE_TRANSLATE_HXX */

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: proplist.hxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -29,37 +29,42 @@
*
************************************************************************/
#ifndef CORE_PROPLIST_HXX
#define CORE_PROPLIST_HXX
#include <vcl.hxx>
#include <list>
#include <com/sun/star/xml/input/XAttributes.hpp>
#include <sal/types.h>
#include <vcl/button.hxx>
#include <rtl/ustring.hxx>
namespace layoutimpl
static PushButton* get_button (Dialog const* dialog, sal_uInt32 type)
{
Window* child = dialog->GetWindow (WINDOW_FIRSTCHILD);
while (child)
{
if (child->GetType () == type)
return static_cast <PushButton*> (child);
child = child->GetWindow (WINDOW_NEXT);
}
namespace css = ::com::sun::star;
typedef std::list< std::pair< rtl::OUString, rtl::OUString > > PropList;
void propsFromAttributes( const css::uno::Reference<css::xml::input::XAttributes> & xAttributes,
PropList &rProps, sal_Int32 nNamespace );
void setProperties( css::uno::Reference< css::uno::XInterface > const& xPeer,
PropList const& rProps);
void setProperty( css::uno::Reference< css::uno::XInterface > const& xPeer,
rtl::OUString const& attr, rtl::OUString const& value );
long getAttributeProps( PropList &rProps );
bool findAndRemove( const char *pAttr, PropList &rProps, rtl::OUString &rValue);
return 0;
}
// Convert a rtl::OUString to a byte string.
#define OUSTRING_CSTR( str ) \
rtl::OUStringToOString( str, RTL_TEXTENCODING_ASCII_US ).getStr()
#define IMPLEMENT_CLOSING_DIALOG(cls)\
Closing##cls::Closing##cls (Window* parent, WinBits bits)\
: cls (parent, bits)\
, mClosing (false)\
{\
}\
BOOL Closing##cls::Close ()\
{\
if (mClosing)\
EndDialog (false);\
else if (PushButton *cancel = get_button (this, WINDOW_CANCELBUTTON))\
cancel->Click ();\
else if (PushButton *ok = get_button (this, WINDOW_OKBUTTON))\
ok->Click ();\
mClosing = true;\
return false;\
}
#endif // CORE_PROPLIST_HXX
IMPLEMENT_CLOSING_DIALOG (Dialog);
IMPLEMENT_CLOSING_DIALOG (ModelessDialog);
IMPLEMENT_CLOSING_DIALOG (ModalDialog);

View File

@@ -0,0 +1,52 @@
/*************************************************************************
*
* 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$
*
* $Revision$
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General 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 LAYOUT_CORE_VCL_HXX
#define LAYOUT_CORE_VCL_HXX
#include <vcl/dialog.hxx>
#define DECLARE_CLOSING_DIALOG(cls)\
class Closing##cls : public cls\
{\
public:\
bool mClosing;\
Closing##cls (Window* parent, WinBits bits);\
virtual BOOL Close ();\
}
DECLARE_CLOSING_DIALOG (Dialog);
DECLARE_CLOSING_DIALOG (ModalDialog);
DECLARE_CLOSING_DIALOG (ModelessDialog);
#undef DECLARE_CLOSING_DIALOG
#endif /* LAYOUT_CORE_VCL_HXX */

View File

@@ -1,520 +0,0 @@
/*************************************************************************
*
* 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: helper.cxx,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.
*
************************************************************************/
#include "helper.hxx"
#include <assert.h>
#include <list>
#include <com/sun/star/awt/WindowAttribute.hpp>
#include <com/sun/star/awt/XWindow.hpp>
#include <com/sun/star/awt/VclWindowPeerAttribute.hpp>
#include <tools/debug.hxx>
#include "proplist.hxx"
#include "layout/layoutcore.hxx"
#if TEST_LAYOUT && !defined( DBG_UTIL )
#include <stdio.h>
#undef DBG_ERROR
#define DBG_ERROR printf
#undef DBG_ERROR1
#define DBG_ERROR1 printf
#undef DBG_ERROR2
#define DBG_ERROR2 printf
#endif /* TEST_LAYOUT && !DBG_UTIL */
namespace layoutimpl
{
using namespace com::sun::star;
using rtl::OUString;
uno::Reference< awt::XWindowPeer >
getParent( uno::Reference< uno::XInterface > xRef )
{
do
{
uno::Reference< awt::XWindowPeer > xPeer( xRef, uno::UNO_QUERY );
if ( xPeer.is() )
return xPeer;
uno::Reference< awt::XLayoutContainer > xCont( xRef, uno::UNO_QUERY );
if ( xCont.is() )
xRef = xCont->getParent();
}
while ( xRef.is() );
return uno::Reference< awt::XWindowPeer >();
}
#if 0
static uno::Reference< awt::XWindowPeer >
getToplevel( uno::Reference< uno::XInterface > xRef )
{
uno::Reference< awt::XWindowPeer > xTop, i;
while ( ( i = uno::Reference< awt::XWindowPeer >( xRef, uno::UNO_QUERY ) ).is() )
{
xTop = i;
uno::Reference< awt::XLayoutContainer > xCont( xRef, uno::UNO_QUERY );
if ( xCont.is() )
xRef = xCont->getParent();
else
xRef = uno::Reference< awt::XWindowPeer >();
}
return xTop;
}
#endif
}
#include "dialogbuttonhbox.hxx"
#include "bin.hxx"
#include "box.hxx"
#include "table.hxx"
#include "flow.hxx"
namespace layoutimpl
{
static uno::Reference< awt::XLayoutConstrains > ImplCreateWindow(
uno::Reference< uno::XInterface > xParent,
OUString aName, long WindowAttributes );
uno::Reference< awt::XLayoutContainer >
createContainer( const OUString &rName )
{
uno::Reference< awt::XLayoutContainer > xPeer;
if ( rName.equalsAscii( "hbox" ) )
xPeer = uno::Reference< awt::XLayoutContainer >( new HBox() );
else if ( rName.equalsAscii( "vbox" ) )
xPeer = uno::Reference< awt::XLayoutContainer >( new VBox() );
else if ( rName.equalsAscii( "table" ) )
xPeer = uno::Reference< awt::XLayoutContainer >( new Table() );
else if ( rName.equalsAscii( "flow" ) )
xPeer = uno::Reference< awt::XLayoutContainer >( new Flow() );
else if ( rName.equalsAscii( "bin" ) )
xPeer = uno::Reference< awt::XLayoutContainer >( new Bin() );
else if ( rName.equalsAscii( "min-size" ) )
xPeer = uno::Reference< awt::XLayoutContainer >( new MinSize() );
else if ( rName.equalsAscii( "align" ) )
xPeer = uno::Reference< awt::XLayoutContainer >( new Align() );
else if ( rName.equalsAscii( "dialogbuttonhbox" ) )
xPeer = uno::Reference< awt::XLayoutContainer >( new DialogButtonHBox() );
return xPeer;
}
static uno::Reference< awt::XLayoutConstrains >
createToolkitWidget( uno::Reference< awt::XToolkit > xToolkit,
uno::Reference< uno::XInterface > xParent,
const OUString &rName, long nProps )
{
uno::Reference< awt::XLayoutConstrains > xPeer;
bool bToplevel = !xParent.is();
// UNO Control Widget
awt::WindowDescriptor desc;
if ( bToplevel )
desc.Type = awt::WindowClass_TOP;
else
{
desc.Type = awt::WindowClass_SIMPLE;
// top container -- a wrapper for framewindow -- is de-coupled
// from awt::XWindowPeer. So, getParent() fails at it.
// uno::Reference< awt::XWindowPeer > xWinParent = getParent( xParent );
uno::Reference< awt::XWindowPeer > xWinParent( xParent, uno::UNO_QUERY );
assert( xParent.is() );
assert( xWinParent.is() );
desc.Parent = xWinParent;
}
desc.ParentIndex = 0;
// debugging help ...
desc.Bounds.X = 0;
desc.Bounds.Y = 0;
desc.Bounds.Width = 300;
desc.Bounds.Height = 200;
desc.WindowAttributes = nProps;
desc.WindowServiceName = rName;
uno::Reference< awt::XWindowPeer > xWinPeer;
try
{
// DBG_ERROR1("Asking toolkit: %s\n", OUSTRING_CSTR( desc.WindowServiceName ) );
xWinPeer = xToolkit->createWindow( desc );
if ( !xWinPeer.is() )
throw uno::RuntimeException(
OUString( RTL_CONSTASCII_USTRINGPARAM( "Cannot create peer" ) ),
uno::Reference< uno::XInterface >() );
xPeer = uno::Reference< awt::XLayoutConstrains >( xWinPeer, uno::UNO_QUERY );
}
catch( uno::Exception & )
{
DBG_ERROR1( "Warning: %s is not a recognized type\n", OUSTRING_CSTR( rName ) );
return uno::Reference< awt::XLayoutConstrains >();
}
// default to visible, let then people change it on properties
if ( ! bToplevel )
{
uno::Reference< awt::XWindow> xWindow( xPeer, uno::UNO_QUERY );
if ( xWindow.is() )
xWindow->setVisible( true );
}
return xPeer;
}
uno::Reference< awt::XLayoutConstrains >
createWidget( uno::Reference< awt::XToolkit > xToolkit,
uno::Reference< uno::XInterface > xParent,
const OUString &rName, long nProps )
{
uno::Reference< awt::XLayoutConstrains > xPeer;
xPeer = uno::Reference< awt::XLayoutConstrains >(
createContainer( rName ), uno::UNO_QUERY );
if ( xPeer.is() )
return xPeer;
xPeer = ImplCreateWindow( xParent, rName, nProps );
if ( xPeer.is() )
return xPeer;
#if FIXED_INFO
OUString tName = rName;
// FIXME
if ( rName.equalsAscii( "fixedinfo" ) )
tName = OUString::createFromAscii( "fixedtext" );
xPeer = createToolkitWidget( xToolkit, xParent, tName, nProps );
#else
xPeer = createToolkitWidget( xToolkit, xParent, rName, nProps );
#endif
return xPeer;
}
PropHelper::PropHelper() : LockHelper()
, cppu::OPropertySetHelper( maBrdcstHelper )
, pHelper( NULL )
{
}
void
PropHelper::addProp (const char *pName, sal_Int32 nNameLen, rtl_TextEncoding e,
uno::Type aType, void *pPtr)
{
// this sucks rocks for effiency ...
PropDetails aDetails;
aDetails.aName = rtl::OUString::intern( pName, nNameLen, e );
aDetails.aType = aType;
aDetails.pValue = pPtr;
maDetails.push_back( aDetails );
}
cppu::IPropertyArrayHelper & SAL_CALL
PropHelper::getInfoHelper()
{
if ( ! pHelper )
{
uno::Sequence< beans::Property > aProps( maDetails.size() );
for ( unsigned int i = 0; i < maDetails.size(); i++)
{
aProps[i].Name = maDetails[i].aName;
aProps[i].Type = maDetails[i].aType;
aProps[i].Handle = i;
aProps[i].Attributes = 0;
}
pHelper = new cppu::OPropertyArrayHelper( aProps, false /* fixme: faster ? */ );
}
return *pHelper;
}
sal_Bool SAL_CALL
PropHelper::convertFastPropertyValue(
uno::Any & rConvertedValue,
uno::Any & rOldValue,
sal_Int32 nHandle,
const uno::Any& rValue )
throw (lang::IllegalArgumentException)
{
OSL_ASSERT( nHandle >= 0 && nHandle < (sal_Int32) maDetails.size() );
// FIXME: no Any::getValue ...
getFastPropertyValue( rOldValue, nHandle );
if ( rOldValue != rValue )
{
rConvertedValue = rValue;
return sal_True; // changed
}
else
{
rConvertedValue.clear();
rOldValue.clear();
}
return sal_False;
}
void SAL_CALL
PropHelper::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle,
const uno::Any& rValue )
throw (uno::Exception)
{
OSL_ASSERT( nHandle >= 0 && nHandle < (sal_Int32) maDetails.size() );
const PropDetails &rInfo = maDetails[ nHandle ];
uno_type_assignData( rInfo.pValue, rInfo.aType.getTypeLibType(),
rValue.pData, rValue.pType,
0, 0, 0 );
if ( mpListener )
mpListener->propertiesChanged();
}
void SAL_CALL
PropHelper::getFastPropertyValue( uno::Any& rValue,
sal_Int32 nHandle ) const
{
OSL_ASSERT( nHandle >= 0 && nHandle < (sal_Int32) maDetails.size() );
const PropDetails &rInfo = maDetails[ nHandle ];
#if 0
switch ( rInfo.aType.getTypeClass() )
{
#define MAP(classtype,ctype) \
case uno::TypeClass_##classtype: \
rValue <<= *(ctype *)(rInfo.pValue); \
break
MAP( DOUBLE, double );
MAP( SHORT, sal_Int16 );
MAP( LONG, sal_Int32 );
MAP( UNSIGNED_SHORT, sal_uInt16 );
MAP( UNSIGNED_LONG, sal_uInt32 );
MAP( STRING, ::rtl::OUString );
default:
DBG_ERROR( "ERROR: unknown type to map!" );
break;
}
#undef MAP
#endif
rValue.setValue( rInfo.pValue, rInfo.aType );
}
::com::sun::star::uno::Any
PropHelper::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
{
return OPropertySetHelper::queryInterface( rType );
}
} // namespace layoutimpl
#include <awt/vclxbutton.hxx>
#include <awt/vclxdialog.hxx>
#include <awt/vclxfixedline.hxx>
#include <awt/vclxscroller.hxx>
#include <awt/vclxsplitter.hxx>
#include <awt/vclxtabcontrol.hxx>
#include <toolkit/awt/vclxtoolkit.hxx>
#include <toolkit/awt/vclxwindow.hxx>
#include <vcl/button.hxx>
#include <vcl/dialog.hxx>
#include <vcl/fixed.hxx>
#include <vcl/tabctrl.hxx>
#include <vcl/tabpage.hxx>
///#include <svtools/prgsbar.hxx>
namespace layoutimpl
{
uno::Reference< awt::XLayoutConstrains > ImplCreateWindow(
uno::Reference< uno::XInterface > xParent,
OUString aName, long WindowAttributes )
{
VCLXWindow *pNewComp = NULL;
Window *pNewWindow = NULL;
Window *pParent = NULL;
uno::Reference< awt::XLayoutConstrains > xRef;
VCLXWindow* pParentComponent = VCLXWindow::GetImplementation( xParent );
if ( pParentComponent )
pParent = pParentComponent->GetWindow();
if ( aName.equalsAscii( "dialog" ) )
{
if ( pParent == NULL )
pParent = DIALOG_NO_PARENT;
pNewWindow = new Dialog( pParent,
ImplGetWinBits( WindowAttributes, 0 ) );
pNewComp = new layoutimpl::VCLXDialog();
WindowAttributes ^= awt::WindowAttribute::SHOW;
}
else if ( aName.equalsAscii( "modaldialog" ) )
{
if ( pParent == NULL )
pParent = DIALOG_NO_PARENT;
pNewWindow = new ModalDialog( pParent,
ImplGetWinBits( WindowAttributes, 0 ) );
pNewComp = new layoutimpl::VCLXDialog();
WindowAttributes ^= awt::WindowAttribute::SHOW;
}
else if ( aName.equalsAscii( "tabcontrol" ) )
{
pNewWindow = new TabControl( pParent,
ImplGetWinBits( WindowAttributes, WINDOW_TABCONTROL ) );
pNewComp = new layoutimpl::VCLXTabControl();
}
else if ( aName.equalsAscii( "scroller" ) )
{
// used FixedImage because I just want some empty non-intrusive widget
pNewWindow = new FixedImage( pParent, ImplGetWinBits( WindowAttributes, 0 ) );
pNewComp = new layoutimpl::VCLXScroller();
}
else if ( aName.equalsAscii( "hsplitter" ) || aName.equalsAscii( "vsplitter" ) )
{
pNewWindow = new FixedImage( pParent, ImplGetWinBits( WindowAttributes, 0 ) );
pNewComp = new layoutimpl::VCLXSplitter( aName.equalsAscii( "hsplitter" ) );
}
else if ( aName.equalsAscii( "hfixedline" ) || aName.equalsAscii( "vfixedline" ) )
{
WinBits nStyle = ImplGetWinBits( WindowAttributes, 0 );
nStyle ^= WB_HORZ;
if ( aName.equalsAscii( "hfixedline" ) )
nStyle |= WB_HORZ;
else
nStyle |= WB_VERT;
pNewWindow = new FixedLine( pParent, nStyle );
pNewComp = new layoutimpl::VCLXFixedLine();
}
else if ( aName.equalsAscii( "okbutton" ) )
{
pNewWindow = new PushButton( pParent, ImplGetWinBits( WindowAttributes, 0 ) );
pNewComp = new layoutimpl::VCLXOKButton( pNewWindow );
}
else if ( aName.equalsAscii( "cancelbutton" ) )
{
pNewWindow = new PushButton( pParent, ImplGetWinBits( WindowAttributes, 0 ) );
pNewComp = new layoutimpl::VCLXCancelButton( pNewWindow );
}
else if ( aName.equalsAscii( "yesbutton" ) )
{
pNewWindow = new PushButton( pParent, ImplGetWinBits( WindowAttributes, 0 ) );
pNewComp = new layoutimpl::VCLXYesButton( pNewWindow );
}
else if ( aName.equalsAscii( "nobutton" ) )
{
pNewWindow = new PushButton( pParent, ImplGetWinBits( WindowAttributes, 0 ) );
pNewComp = new layoutimpl::VCLXNoButton( pNewWindow );
}
else if ( aName.equalsAscii( "retrybutton" ) )
{
pNewWindow = new PushButton( pParent, ImplGetWinBits( WindowAttributes, 0 ) );
pNewComp = new layoutimpl::VCLXRetryButton( pNewWindow );
}
else if ( aName.equalsAscii( "ignorebutton" ) )
{
pNewWindow = new PushButton( pParent, ImplGetWinBits( WindowAttributes, 0 ) );
pNewComp = new layoutimpl::VCLXIgnoreButton( pNewWindow );
}
else if ( aName.equalsAscii( "resetbutton" ) )
{
pNewWindow = new PushButton( pParent, ImplGetWinBits( WindowAttributes, 0 ) );
pNewComp = new layoutimpl::VCLXResetButton( pNewWindow );
}
else if ( aName.equalsAscii( "applybutton" ) )
{
pNewWindow = new PushButton( pParent, ImplGetWinBits( WindowAttributes, 0 ) );
pNewComp = new layoutimpl::VCLXApplyButton( pNewWindow );
}
else if ( aName.equalsAscii( "helpbutton" ) )
{
pNewWindow = new PushButton( pParent, ImplGetWinBits( WindowAttributes, 0 ) );
pNewComp = new layoutimpl::VCLXHelpButton( pNewWindow );
}
else if ( aName.equalsAscii( "morebutton" ) )
{
pNewWindow = new PushButton( pParent, ImplGetWinBits( WindowAttributes, 0 ) );
pNewComp = new layoutimpl::VCLXMoreButton( pNewWindow );
}
else if ( aName.equalsAscii( "advancedbutton" ) )
{
pNewWindow = new PushButton( pParent, ImplGetWinBits( WindowAttributes, 0 ) );
pNewComp = new layoutimpl::VCLXAdvancedButton( pNewWindow );
}
if ( !pNewWindow )
return xRef;
pNewWindow->SetCreatedWithToolkit( sal_True );
pNewComp->SetCreatedWithToolkit( TRUE );
xRef = pNewComp;
pNewWindow->SetComponentInterface( pNewComp );
if ( WindowAttributes & awt::WindowAttribute::SHOW )
pNewWindow->Show();
return xRef;
}
} // namespace layoutimpl
// Avoid polluting the rest of the code with vcl linkage pieces ...
#include <vcl/imagerepository.hxx>
#include <vcl/bitmapex.hxx>
#include <vcl/graph.hxx>
namespace layoutimpl
{
uno::Reference< graphic::XGraphic > loadGraphic( const char *pName )
{
BitmapEx aBmp;
OUString aStr( pName, strlen( pName ), RTL_TEXTENCODING_ASCII_US );
if ( aStr.compareToAscii( ".uno:" ) == 0 )
aStr = aStr.copy( 5 ).toAsciiLowerCase();
if ( !vcl::ImageRepository::loadImage( OUString::createFromAscii( pName ), aBmp, true ) )
return uno::Reference< graphic::XGraphic >();
return Graphic( aBmp ).GetXGraphic();
}
} // namespace layoutimpl

View File

@@ -6,9 +6,9 @@
#
# OpenOffice.org - a multi-platform office productivity suite
#
# $RCSfile: makefile.mk,v $
# $RCSfile$
#
# $Revision: 1.3 $
# $Revision$
#
# This file is part of OpenOffice.org.
#
@@ -29,9 +29,9 @@
#
#*************************************************************************
PRJ=..$/..
PRJ=../../..
PRJNAME=toolkit
TARGET=vclcompat
TARGET=layout-vcl
ENABLE_EXCEPTIONS=true
# --- Settings -----------------------------------------------------
@@ -39,10 +39,11 @@ ENABLE_EXCEPTIONS=true
.INCLUDE : settings.mk
.INCLUDE : $(PRJ)$/util$/makefile.pmk
# --- Files --------------------------------------------------------
.IF "$(COMNAME)" == "gcc3"
CFLAGS+=-Wall -fno-default-inline
.ENDIF
# FIXME: This is bad, hmkay
CFLAGS+= -I$(PRJ)/source
# --- Files --------------------------------------------------------
SLOFILES= \
$(SLO)$/wrapper.obj \

View File

@@ -0,0 +1,685 @@
/*************************************************************************
*
* 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$
*
* $Revision$
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General 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 "wrapper.hxx"
#include <com/sun/star/awt/PosSize.hpp>
#include <com/sun/star/awt/XActionListener.hpp>
#include <com/sun/star/awt/XButton.hpp>
#include <com/sun/star/awt/XCheckBox.hpp>
#include <com/sun/star/awt/XRadioButton.hpp>
#include <com/sun/star/graphic/XGraphic.hpp>
#include <cppuhelper/implbase1.hxx>
#include <toolkit/awt/vclxwindow.hxx>
#include <toolkit/awt/vclxwindows.hxx>
#include <toolkit/helper/convert.hxx>
#include <vcl/button.hxx>
#include <vcl/event.hxx>
#include <vcl/msgbox.hxx>
#include <vcl/svapp.hxx>
#include <vcl/window.hxx>
#include <list>
#include <layout/core/helper.hxx>
using namespace ::com::sun::star;
using rtl::OUString;
namespace layout
{
class ImageImpl
{
public:
uno::Reference< graphic::XGraphic > mxGraphic;
ImageImpl( const char *pName )
: mxGraphic( layoutimpl::loadGraphic( pName ) )
{
if ( !mxGraphic.is() )
{
DBG_ERROR1( "ERROR: failed to load image: `%s'\n", pName );
}
}
};
Image::Image( const char *pName )
: pImpl( new ImageImpl( pName ) )
{
}
Image::~Image()
{
delete pImpl;
}
class ButtonImpl : public ControlImpl
, public ::cppu::WeakImplHelper1< awt::XActionListener >
{
Link maClickHdl;
public:
uno::Reference< awt::XButton > mxButton;
ButtonImpl( Context *context, const PeerHandle &peer, Window *window )
: ControlImpl( context, peer, window )
, mxButton( peer, uno::UNO_QUERY )
{
/* We have default action when clicked, always listen. */
mxButton->addActionListener( this );
}
~ButtonImpl()
{
}
virtual void Click() { /* make me pure virtual? */ };
Link& GetClickHdl ()
{
return maClickHdl;
}
virtual void SetClickHdl( Link const& link )
{
maClickHdl = link;
}
void SAL_CALL disposing( lang::EventObject const& e )
throw (uno::RuntimeException)
{
mxButton->removeActionListener( this );
ControlImpl::disposing (e);
mxButton.clear ();
}
virtual void SAL_CALL actionPerformed( const awt::ActionEvent& )
throw (uno::RuntimeException)
{
if ( !maClickHdl )
Click();
else
maClickHdl.Call( static_cast<Window *>( mpWindow ) );
}
bool SetModeImage( uno::Reference< graphic::XGraphic > xGraph )
{
setProperty( "Graphic", uno::Any( xGraph ) );
return true;
}
};
Button::~Button ()
{
}
String Button::GetStandardText (sal_uInt16 button_type)
{
return ::Button::GetStandardText (button_type);
}
void Button::SetText( OUString const& rStr )
{
if ( !getImpl().mxButton.is() )
return;
getImpl().mxButton->setLabel( rStr );
}
void Button::SetClickHdl( const Link& link )
{
if (&getImpl () && getImpl().mxButton.is ())
getImpl().SetClickHdl( link );
}
Link& Button::GetClickHdl ()
{
return getImpl().GetClickHdl ();
}
bool Button::SetModeImage (Image const& image)
{
return getImpl().SetModeImage (image.getImpl().mxGraphic);
}
bool Button::SetModeImage (::Image const& image, BmpColorMode mode)
{
return GetButton ()->SetModeImage (image, mode);
}
void Button::SetImageAlign( ImageAlign eAlign )
{
getImpl().setProperty( "ImageAlign", uno::Any( (sal_Int16) eAlign ) );
}
void Button::Click()
{
}
IMPL_GET_IMPL( Button );
IMPL_CONSTRUCTORS( Button, Control, "button" );
IMPL_GET_WINDOW (Button);
class PushButtonImpl : public ButtonImpl
, public ::cppu::WeakImplHelper1< awt::XItemListener >
{
Link maToggleHdl;
public:
PushButtonImpl( Context *context, const PeerHandle &peer, Window *window )
: ButtonImpl( context, peer, window )
{
}
void SetToggleHdl( const Link& link )
{
// XButton doesn't have an explicit event for Toggle. Anyway, it is a
// superset of the clicks: all clicks, and explicit toggles
if (!link && !!maToggleHdl)
mxButton->removeActionListener( this );
else if (!!link && !maToggleHdl)
mxButton->addActionListener( this );
maToggleHdl = link;
}
void SAL_CALL disposing( lang::EventObject const& e )
throw (uno::RuntimeException)
{
ButtonImpl::disposing (e);
}
virtual void SAL_CALL actionPerformed( awt::ActionEvent const& e )
throw (uno::RuntimeException)
{
ButtonImpl::actionPerformed( e );
fireToggle();
}
virtual void SAL_CALL itemStateChanged( const awt::ItemEvent& )
throw (uno::RuntimeException)
{
maToggleHdl.Call( static_cast<Window *>( mpWindow ) );
}
void fireToggle()
{
maToggleHdl.Call( static_cast<Window *>( mpWindow ) );
}
};
PushButton::~PushButton ()
{
SetToggleHdl (Link ());
}
void PushButton::Check( bool bCheck )
{
getImpl().setProperty( "State", uno::Any( (sal_Int16) !!bCheck ) );
// XButton doesn't have explicit toggle event
getImpl().fireToggle();
}
bool PushButton::IsChecked() const
{
return !!( getImpl().getProperty( "State" ).get< sal_Int16 >() );
}
void PushButton::Toggle()
{
Check( true );
}
void PushButton::SetToggleHdl( const Link& link )
{
if (&getImpl () && getImpl().mxButton.is ())
getImpl().SetToggleHdl( link );
}
IMPL_GET_IMPL( PushButton );
IMPL_CONSTRUCTORS( PushButton, Button, "pushbutton" );
IMPL_GET_WINDOW (PushButton);
class RadioButtonImpl : public ButtonImpl
, public ::cppu::WeakImplHelper1< awt::XItemListener >
{
Link maToggleHdl;
public:
uno::Reference< awt::XRadioButton > mxRadioButton;
RadioButtonImpl( Context *context, const PeerHandle &peer, Window *window )
: ButtonImpl( context, peer, window )
, mxRadioButton( peer, uno::UNO_QUERY )
{
}
void Check( bool bCheck )
{
if ( !mxRadioButton.is() )
return;
#if 1
// Have setState fire item event for
// RadioGroups::RadioGroup::itemStateChanged ()
::RadioButton *r = static_cast<RadioButton*>(mpWindow)->GetRadioButton ();
bool state = r->IsRadioCheckEnabled ();
r->EnableRadioCheck();
mxRadioButton->setState( !!bCheck );
r->EnableRadioCheck (state);
#else
mxRadioButton->setState( !!bCheck );
#endif
fireToggle();
}
bool IsChecked()
{
if ( !mxRadioButton.is() )
return false;
return mxRadioButton->getState();
}
void SetToggleHdl( const Link& link )
{
if (!link && !!maToggleHdl)
mxRadioButton->removeItemListener( this );
else if (!!link && !maToggleHdl)
mxRadioButton->addItemListener( this );
maToggleHdl = link;
}
inline void fireToggle()
{
maToggleHdl.Call( static_cast<Window *>( mpWindow ) );
}
virtual void SetClickHdl( const Link& link )
{
// Keep RadioGroups::RadioGroup's actionListener at HEAD
// of list. This way, it can handle RadioGroup's button
// states before all other callbacks and make sure the
// client code has the right state.
// IWBN to add an XRadioButton2 and layout::VCLXRadioButton
// with {get,set}RadioGroup() (and a "radiogroup" property
// even) and handle the grouping here in RadioButtonImpl.
uno::Reference< uno::XInterface > x = static_cast<VCLXRadioButton*> (mpWindow->GetVCLXWindow ())->getFirstActionListener ();
uno::Reference< awt::XActionListener > a = uno::Reference< awt::XActionListener> (x ,uno::UNO_QUERY );
mxButton->removeActionListener (a);
ButtonImpl::SetClickHdl (link);
mxButton->addActionListener (a);
}
void SAL_CALL disposing( lang::EventObject const& e )
throw (uno::RuntimeException)
{
ButtonImpl::disposing (e);
}
virtual void SAL_CALL itemStateChanged( const awt::ItemEvent& )
throw (uno::RuntimeException)
{
maToggleHdl.Call( static_cast<Window *>( mpWindow ) );
}
};
RadioButton::~RadioButton ()
{
SetToggleHdl (Link ());
}
void RadioButton::Check( bool bCheck )
{
getImpl().Check( bCheck );
}
bool RadioButton::IsChecked() const
{
return getImpl().IsChecked();
}
void RadioButton::SetToggleHdl( const Link& link )
{
if (&getImpl () && getImpl().mxRadioButton.is ())
getImpl().SetToggleHdl( link );
}
IMPL_GET_IMPL( RadioButton );
IMPL_GET_WINDOW( RadioButton );
IMPL_GET_VCLXWINDOW( RadioButton );
IMPL_CONSTRUCTORS( RadioButton, Button, "radiobutton" );
class CheckBoxImpl : public ButtonImpl
, public ::cppu::WeakImplHelper1< awt::XItemListener >
{
Link maToggleHdl;
public:
uno::Reference< awt::XCheckBox > mxCheckBox;
CheckBoxImpl( Context *context, const PeerHandle &peer, Window *window )
: ButtonImpl( context, peer, window )
, mxCheckBox( peer, uno::UNO_QUERY )
{
}
void SetToggleHdl( const Link& link )
{
if (!link && !!maToggleHdl)
mxCheckBox->removeItemListener( this );
else if (!!link && !maToggleHdl)
mxCheckBox->addItemListener( this );
maToggleHdl = link;
}
void SAL_CALL disposing( lang::EventObject const& e )
throw (uno::RuntimeException)
{
ButtonImpl::disposing (e);
}
virtual void SAL_CALL itemStateChanged( const awt::ItemEvent& )
throw (uno::RuntimeException)
{
maToggleHdl.Call( static_cast<Window *>( mpWindow ) );
}
};
CheckBox::~CheckBox ()
{
SetToggleHdl (Link ());
}
void CheckBox::Check( bool bCheck )
{
if ( !getImpl().mxCheckBox.is() )
return;
getImpl().mxCheckBox->setState( !!bCheck );
}
bool CheckBox::IsChecked() const
{
if ( !getImpl().mxCheckBox.is() )
return false;
return getImpl().mxCheckBox->getState() != 0;
}
void CheckBox::SetToggleHdl( const Link& link )
{
if (&getImpl () && getImpl().mxCheckBox.is ())
getImpl().SetToggleHdl( link );
}
IMPL_GET_IMPL( CheckBox );
IMPL_CONSTRUCTORS( CheckBox, Button, "checkbox" );
#define BUTTON_IMPL(t, parent, response) \
class t##Impl : public parent##Impl \
{ \
public: \
t##Impl( Context *context, PeerHandle const& peer, Window *window ) \
: parent##Impl( context, peer, window ) \
{ \
} \
void Click() \
{ \
if (Dialog *d = static_cast<Dialog *> (mpCtx)) \
d->EndDialog( response ); \
} \
}
/* Common button types currently unavailable in OOo: */
/* mpReset */
/* mpApply */
/* mpAction */
#define RET_RESET 6
#define RET_APPLY 7
#define BUTTONID_RESET RET_RESET
#define BUTTONID_APPLY RET_APPLY
BUTTON_IMPL( OKButton, PushButton, BUTTONID_OK );
BUTTON_IMPL( CancelButton, PushButton, BUTTONID_CANCEL );
BUTTON_IMPL( YesButton, PushButton, BUTTONID_YES );
BUTTON_IMPL( NoButton, PushButton, BUTTONID_NO );
BUTTON_IMPL( RetryButton, PushButton, BUTTONID_RETRY );
BUTTON_IMPL( IgnoreButton, PushButton, BUTTONID_IGNORE );
BUTTON_IMPL( ResetButton, PushButton, BUTTONID_RESET );
BUTTON_IMPL( ApplyButton, PushButton, BUTTONID_APPLY ); /* Deprecated? */
BUTTON_IMPL( HelpButton, PushButton, BUTTONID_HELP );
IMPL_CONSTRUCTORS( OKButton, PushButton, "okbutton" );
IMPL_CONSTRUCTORS( CancelButton, PushButton, "cancelbutton" );
IMPL_CONSTRUCTORS( YesButton, PushButton, "yesbutton" );
IMPL_CONSTRUCTORS( NoButton, PushButton, "nobutton" );
IMPL_CONSTRUCTORS( RetryButton, PushButton, "retrybutton" );
IMPL_CONSTRUCTORS( IgnoreButton, PushButton, "ignorebutton" );
IMPL_CONSTRUCTORS( ResetButton, PushButton, "resetbutton" );
IMPL_CONSTRUCTORS( ApplyButton, PushButton, "applybutton" ); /* Deprecated? */
IMPL_CONSTRUCTORS( HelpButton, PushButton, "helpbutton" );
IMPL_IMPL (ImageButton, PushButton)
IMPL_CONSTRUCTORS( ImageButton, PushButton, "imagebutton" );
class AdvancedButtonImpl : public PushButtonImpl
{
protected:
bool bAdvancedMode;
std::list< Window*> maAdvanced;
std::list< Window*> maSimple;
public:
rtl::OUString mAdvancedLabel;
rtl::OUString mSimpleLabel;
protected:
Window* Remove( std::list< Window*> lst, Window* w )
{
for ( std::list< Window*>::iterator it = maAdvanced.begin();
it != maAdvanced.end(); it++ )
if ( *it == w )
{
lst.erase( it );
return *it;
}
return 0;
}
public:
AdvancedButtonImpl( Context *context, PeerHandle const& peer, Window *window )
: PushButtonImpl( context, peer, window )
, bAdvancedMode( false )
// TODO: i18n
// Button::GetStandardText( BUTTON_ADVANCED );
// Button::GetStandardText( BUTTON_SIMPLE );
, mAdvancedLabel( rtl::OUString::createFromAscii( "Advanced..." ) )
, mSimpleLabel( rtl::OUString::createFromAscii( "Simple..." ) )
{
}
void Click()
{
bAdvancedMode = !bAdvancedMode;
if ( bAdvancedMode )
advancedMode();
else
simpleMode();
}
void setAlign ()
{
::PushButton *b = static_cast<PushButton*> (mpWindow)->GetPushButton ();
b->SetSymbolAlign (SYMBOLALIGN_RIGHT);
b->SetSmallSymbol ();
//mpWindow->SetStyle (mpWindow->GetStyle() | WB_CENTER);
}
void advancedMode()
{
::PushButton *b = static_cast<PushButton*> (mpWindow)->GetPushButton ();
b->SetSymbol (SYMBOL_PAGEUP);
setAlign ();
if (mSimpleLabel.getLength ())
b->SetText (mSimpleLabel);
for ( std::list< Window*>::iterator it = maAdvanced.begin();
it != maAdvanced.end(); it++ )
( *it )->Show();
for ( std::list< Window*>::iterator it = maSimple.begin();
it != maSimple.end(); it++ )
( *it )->Hide();
redraw ();
}
void simpleMode()
{
//mxButton->setLabel( mSimpleLabel );
::PushButton *b = static_cast<PushButton*> (mpWindow)->GetPushButton ();
b->SetSymbol (SYMBOL_PAGEDOWN);
if (mAdvancedLabel.getLength ())
b->SetText (mAdvancedLabel);
setAlign ();
for ( std::list< Window*>::iterator it = maAdvanced.begin();
it != maAdvanced.end(); it++ )
( *it )->Hide();
for ( std::list< Window*>::iterator it = maSimple.begin();
it != maSimple.end(); it++ )
( *it )->Show();
redraw (true);
}
void AddAdvanced( Window* w )
{
maAdvanced.push_back( w );
if ( !bAdvancedMode )
w->Hide();
}
void AddSimple( Window* w )
{
maSimple.push_back( w );
if ( bAdvancedMode )
w->Hide();
}
void RemoveAdvanced( Window* w )
{
Remove( maAdvanced, w );
}
void RemoveSimple( Window* w )
{
Remove( maSimple, w );
}
};
void AdvancedButton::AddAdvanced( Window* w )
{
getImpl().AddAdvanced( w );
}
void AdvancedButton::AddSimple( Window* w )
{
getImpl().AddSimple( w );
}
void AdvancedButton::RemoveAdvanced( Window* w )
{
getImpl().RemoveAdvanced( w );
}
void AdvancedButton::RemoveSimple( Window* w )
{
getImpl().RemoveSimple( w );
}
void AdvancedButton::SetAdvancedText (rtl::OUString const& text)
{
if (text.getLength ())
getImpl ().mAdvancedLabel = text;
}
void AdvancedButton::SetSimpleText (rtl::OUString const& text)
{
if (text.getLength ())
getImpl ().mSimpleLabel = text;
}
rtl::OUString AdvancedButton::GetAdvancedText () const
{
return getImpl ().mAdvancedLabel;
}
rtl::OUString AdvancedButton::GetSimpleText () const
{
return getImpl ().mSimpleLabel;
}
void AdvancedButton::SetDelta (int)
{
}
IMPL_CONSTRUCTORS_BODY( AdvancedButton, PushButton, "advancedbutton", getImpl().simpleMode () );
IMPL_GET_IMPL( AdvancedButton );
class MoreButtonImpl : public AdvancedButtonImpl
{
public:
MoreButtonImpl( Context *context, PeerHandle const& peer, Window *window )
: AdvancedButtonImpl( context, peer, window)
{
mSimpleLabel = Button::GetStandardText( BUTTON_MORE );
mAdvancedLabel = Button::GetStandardText( BUTTON_LESS );
}
void AddWindow( Window* w ) { AddAdvanced( w ); }
void RemoveWindow( Window* w ) { RemoveAdvanced( w ); }
};
// TODO
//BUTTON_IMPL( MoreButton, PushButton, 0 );
IMPL_CONSTRUCTORS_BODY( MoreButton, AdvancedButton, "morebutton", getImpl().simpleMode () );
IMPL_GET_IMPL( MoreButton );
void MoreButton::AddWindow( Window* w )
{
getImpl().AddWindow( w );
}
void MoreButton::RemoveWindow( Window* w )
{
getImpl().RemoveWindow( w );
}
void MoreButton::SetMoreText (rtl::OUString const& text)
{
SetAdvancedText (text);
}
void MoreButton::SetLessText (rtl::OUString const& text)
{
SetSimpleText (text);
}
rtl::OUString MoreButton::GetMoreText () const
{
return GetAdvancedText ();
}
rtl::OUString MoreButton::GetLessText () const
{
return GetSimpleText ();
}
} // namespace layout

View File

@@ -6,9 +6,9 @@
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: wcontainer.cxx,v $
* $RCSfile$
*
* $Revision: 1.3 $
* $Revision$
*
* This file is part of OpenOffice.org.
*
@@ -31,12 +31,10 @@
#include "wrapper.hxx"
#include "layout/layoutcore.hxx"
#include <com/sun/star/awt/XLayoutRoot.hpp>
#include <com/sun/star/awt/XLayoutContainer.hpp>
#include <comphelper/processfactory.hxx>
#include <layout/core/helper.hxx>
#include <tools/debug.hxx>
using namespace ::com::sun::star;
@@ -44,8 +42,8 @@ using namespace ::com::sun::star;
namespace layout
{
Container::Container( Context const* pCtx, char const* pId )
: mxContainer( pCtx->GetPeerHandle( pId ), uno::UNO_QUERY )
Container::Container( Context const* context, char const* pId )
: mxContainer( context->GetPeerHandle( pId ), uno::UNO_QUERY )
{
if ( !mxContainer.is() )
{
@@ -55,7 +53,7 @@ Container::Container( Context const* pCtx, char const* pId )
Container::Container( rtl::OUString const& rName, sal_Int32 nBorder )
{
mxContainer = layoutimpl::createContainer( rName );
mxContainer = layoutimpl::WidgetFactory::createContainer( rName );
uno::Reference< beans::XPropertySet > xProps( mxContainer, uno::UNO_QUERY_THROW );
xProps->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Border" ) ),
@@ -102,8 +100,8 @@ void Container::Clear()
{
css::uno::Sequence< css::uno::Reference < css::awt::XLayoutConstrains > > children;
children = mxContainer->getChildren();
for ( int i = 0; i < children.getLength(); i++ )
mxContainer->removeChild( children[ i ] );
for (int i = 0; i < children.getLength(); i++)
mxContainer->removeChild( children[i] );
}
void Container::ShowAll( bool bShow )
@@ -117,7 +115,7 @@ void Container::ShowAll( bool bShow )
{
uno::Sequence< uno::Reference < awt::XLayoutConstrains > > aChildren;
aChildren = xCont->getChildren();
for ( int i = 0; i < aChildren.getLength(); i++ )
for (int i = 0; i < aChildren.getLength(); i++)
{
uno::Reference < awt::XLayoutConstrains > xChild( aChildren[ i ] );
@@ -154,12 +152,12 @@ Table::Table( sal_Int32 nBorder, sal_Int32 nColumns )
uno::Any( nColumns ) );
}
void Table::Add( Window *pWindow, bool bXExpand, bool bYExpand,
void Table::Add( Window *window, bool bXExpand, bool bYExpand,
sal_Int32 nXSpan, sal_Int32 nYSpan )
{
if ( !pWindow )
if ( !window )
return;
WindowImpl &rImpl = pWindow->getImpl();
WindowImpl &rImpl = window->getImpl();
uno::Reference< awt::XLayoutConstrains > xChild( rImpl.mxWindow,
uno::UNO_QUERY );
mxContainer->addChild( xChild );
@@ -200,11 +198,11 @@ Box::Box( rtl::OUString const& rName, sal_Int32 nBorder, bool bHomogeneous )
uno::Any( bHomogeneous ) );
}
void Box::Add( Window *pWindow, bool bExpand, bool bFill, sal_Int32 nPadding)
void Box::Add( Window *window, bool bExpand, bool bFill, sal_Int32 nPadding)
{
if ( !pWindow )
if ( !window )
return;
WindowImpl &rImpl = pWindow->getImpl();
WindowImpl &rImpl = window->getImpl();
uno::Reference< awt::XLayoutConstrains > xChild( rImpl.mxWindow,
uno::UNO_QUERY );
@@ -237,13 +235,13 @@ void Box::setProps( uno::Reference< awt::XLayoutConstrains > xChild,
uno::Any( nPadding ) );
}
Table::Table( Context const* pCtx, char const* pId )
: Container( pCtx, pId )
Table::Table( Context const* context, char const* pId )
: Container( context, pId )
{
}
Box::Box( Context const* pCtx, char const* pId )
: Container( pCtx, pId )
Box::Box( Context const* context, char const* pId )
: Container( context, pId )
{
}
@@ -253,8 +251,8 @@ HBox::HBox( sal_Int32 nBorder, bool bHomogeneous )
{
}
HBox::HBox( Context const* pCtx, char const* pId )
: Box( pCtx, pId )
HBox::HBox( Context const* context, char const* pId )
: Box( context, pId )
{
}
@@ -264,8 +262,8 @@ VBox::VBox( sal_Int32 nBorder, bool bHomogeneous )
{
}
VBox::VBox( Context const* pCtx, char const* pId )
: Box( pCtx, pId )
VBox::VBox( Context const* context, char const* pId )
: Box( context, pId )
{
}

View File

@@ -0,0 +1,796 @@
/*************************************************************************
*
* 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$
*
* $Revision$
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General 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 "wrapper.hxx"
#include <comphelper/processfactory.hxx>
#include <com/sun/star/awt/XMetricField.hpp>
#include <com/sun/star/awt/XNumericField.hpp>
#include <com/sun/star/awt/XTextComponent.hpp>
#include <com/sun/star/awt/XListBox.hpp>
#include <com/sun/star/awt/XComboBox.hpp>
#include <cppuhelper/implbase1.hxx>
#include <com/sun/star/awt/XActionListener.hpp>
#include <com/sun/star/awt/XItemListener.hpp>
#include <com/sun/star/awt/XMouseListener.hpp>
#include <vcl/combobox.hxx>
#include <vcl/lstbox.hxx>
#include <toolkit/awt/vclxwindows.hxx>
using namespace ::com::sun::star;
using rtl::OUString;
#define LAYOUT_API_CALLS_HANDLER 0
namespace layout
{
class EditImpl : public ControlImpl
, public ::cppu::WeakImplHelper1< awt::XTextListener >
{
public:
Link maModifyHdl;
uno::Reference< awt::XTextComponent > mxEdit;
EditImpl( Context *context, const PeerHandle &peer, Window *window )
: ControlImpl( context, peer, window )
, mxEdit( peer, uno::UNO_QUERY )
{
}
~EditImpl ();
virtual void SAL_CALL disposing( lang::EventObject const& e )
throw (uno::RuntimeException);
virtual void SetModifyHdl( Link const& link );
void SAL_CALL textChanged( const awt::TextEvent& /* rEvent */ )
throw (uno::RuntimeException)
{
maModifyHdl.Call( mpWindow );
}
};
EditImpl::~EditImpl ()
{
}
void SAL_CALL EditImpl::disposing( lang::EventObject const& e )
throw (uno::RuntimeException)
{
ControlImpl::disposing (e);
mxEdit.clear ();
}
void EditImpl::SetModifyHdl( Link const& link )
{
if (!link && !!maModifyHdl)
mxEdit->removeTextListener( this );
else if (!!link && !maModifyHdl)
mxEdit->addTextListener( this );
maModifyHdl = link;
}
Edit::~Edit ()
{
SetModifyHdl (Link ());
}
void Edit::SetSelection( Selection const& rSelection )
{
#if LAYOUT_API_CALLS_HANDLER
if ( !getImpl().mxEdit.is() )
getImpl().mxEdit->setSelection( awt::Selection( rSelection.Min(), rSelection.Max() ) );
#else /* !LAYOUT_API_CALLS_HANDLER */
GetEdit ()->SetSelection (rSelection);
#endif /* !LAYOUT_API_CALLS_HANDLER */
}
void Edit::SetText( OUString const& rStr )
{
#if LAYOUT_API_CALLS_HANDLER
if ( getImpl().mxEdit.is() )
/// this calls handlers; endless loop in numfmt.cxx
getImpl().mxEdit->setText( rStr );
#else /* !LAYOUT_API_CALLS_HANDLER */
GetEdit ()->SetText (rStr);
#endif /* !LAYOUT_API_CALLS_HANDLER */
}
String Edit::GetText() const
{
if ( !getImpl().mxEdit.is() )
return getImpl().mxEdit->getText();
return OUString();
}
void Edit::SetModifyHdl( const Link& link )
{
if (&getImpl () && getImpl().mxEdit.is ())
getImpl().SetModifyHdl( link );
}
IMPL_CONSTRUCTORS( Edit, Control, "edit" );
IMPL_GET_IMPL( Edit );
IMPL_GET_WINDOW (Edit);
class MultiLineEditImpl : public EditImpl
{
public:
MultiLineEditImpl( Context *context, const PeerHandle &peer, Window *window )
: EditImpl( context, peer, window )
{
}
};
IMPL_CONSTRUCTORS( MultiLineEdit, Edit, "multilineedit" );
IMPL_GET_IMPL( MultiLineEdit );
class SpinFieldImpl : public EditImpl
{
public:
SpinFieldImpl( Context *context, const PeerHandle &peer, Window *window )
: EditImpl( context, peer, window )
{
}
};
IMPL_CONSTRUCTORS( SpinField, Edit, "spinfield" );
class NumericFieldImpl : public SpinFieldImpl
{
public:
NumericFieldImpl( Context *context, const PeerHandle &peer, Window *window )
: SpinFieldImpl( context, peer, window )
{
}
};
class MetricFieldImpl : public SpinFieldImpl
{
public:
MetricFieldImpl( Context *context, const PeerHandle &peer, Window *window )
: SpinFieldImpl( context, peer, window )
{
}
};
IMPL_GET_IMPL( SpinField );
IMPL_GET_IMPL( NumericField );
IMPL_GET_IMPL( MetricField );
class FormatterBaseImpl
{
protected:
PeerHandle mpeer;
public:
explicit FormatterBaseImpl( const PeerHandle &peer )
: mpeer( peer )
{
};
};
FormatterBase::FormatterBase( FormatterBaseImpl *pFormatImpl )
: mpFormatImpl( pFormatImpl )
{
}
class NumericFormatterImpl : public FormatterBaseImpl
{
public:
uno::Reference< awt::XNumericField > mxField;
explicit NumericFormatterImpl( const PeerHandle &peer )
: FormatterBaseImpl( peer )
, mxField( peer, uno::UNO_QUERY )
{
}
// FIXME: burn that CPU ! cut/paste from vclxwindows.cxx
double valueToDouble( sal_Int64 nValue )
{
sal_Int16 nDigits = mxField->getDecimalDigits();
double n = (double)nValue;
for ( sal_uInt16 d = 0; d < nDigits; d++ )
n /= 10;
return n;
} // FIXME: burn that CPU ! cut/paste from vclxwindows.cxx
sal_Int64 doubleToValue( double nValue )
{
sal_Int16 nDigits = mxField->getDecimalDigits();
double n = nValue;
for ( sal_uInt16 d = 0; d < nDigits; d++ )
n *= 10;
return (sal_Int64) n;
}
};
class MetricFormatterImpl : public FormatterBaseImpl
{
public:
uno::Reference< awt::XMetricField > mxField;
explicit MetricFormatterImpl( const PeerHandle &peer )
: FormatterBaseImpl( peer )
, mxField( peer, uno::UNO_QUERY )
{
}
};
NumericFormatter::NumericFormatter( FormatterBaseImpl *pImpl )
: FormatterBase( pImpl )
{
}
NumericFormatterImpl& NumericFormatter::getFormatImpl() const
{
return *( static_cast<NumericFormatterImpl *>( mpFormatImpl ) );
}
#define SET_IMPL(vclmethod, idlmethod) \
void NumericFormatter::vclmethod( sal_Int64 nValue ) \
{ \
if ( !getFormatImpl().mxField.is() ) \
return; \
getFormatImpl().mxField->idlmethod( getFormatImpl().valueToDouble( nValue ) ); \
}
SET_IMPL( SetMin, setMin )
SET_IMPL( SetMax, setMax )
SET_IMPL( SetLast, setLast )
SET_IMPL( SetFirst, setFirst )
SET_IMPL( SetValue, setValue )
SET_IMPL( SetSpinSize, setSpinSize )
sal_Int64 NumericFormatter::GetValue() const
{
if ( !getFormatImpl().mxField.is() )
return 0;
return getFormatImpl().doubleToValue( getFormatImpl().mxField->getValue() );
}
#undef SET_IMPL
IMPL_CONSTRUCTORS_2( NumericField, SpinField, NumericFormatter, "numericfield" );
MetricFormatter::MetricFormatter( FormatterBaseImpl *pImpl )
: FormatterBase( pImpl )
{
}
MetricFormatterImpl& MetricFormatter::getFormatImpl() const
{ return *( static_cast<MetricFormatterImpl *>( mpFormatImpl ) ); }
#define MetricUnitVclToUno(a) ((sal_uInt16)(a))
#define SET_IMPL(vclmethod, idlmethod) \
void MetricFormatter::vclmethod( sal_Int64 nValue, FieldUnit nUnit ) \
{ \
if ( !getFormatImpl().mxField.is() ) \
return; \
getFormatImpl().mxField->idlmethod( nValue, MetricUnitVclToUno( nUnit ) ); \
}
SET_IMPL( SetMin, setMin )
SET_IMPL( SetMax, setMax )
SET_IMPL( SetLast, setLast )
SET_IMPL( SetFirst, setFirst )
SET_IMPL( SetValue, setValue )
#undef SET_IMPL
void MetricFormatter::SetSpinSize( sal_Int64 nValue )
{
if ( !getFormatImpl().mxField.is() )
return;
getFormatImpl().mxField->setSpinSize( nValue );
}
sal_Int64 MetricFormatter::GetValue( FieldUnit nUnit ) const
{
if ( !getFormatImpl().mxField.is() )
return 0;
return getFormatImpl().mxField->getValue( MetricUnitVclToUno( nUnit ) );
}
IMPL_CONSTRUCTORS_2( MetricField, SpinField, MetricFormatter, "metricfield" );
class ComboBoxImpl : public EditImpl
, public ::cppu::WeakImplHelper1< awt::XActionListener >
, public ::cppu::WeakImplHelper1< awt::XItemListener >
{
public:
uno::Reference< awt::XComboBox > mxComboBox;
Link maClickHdl;
Link maSelectHdl;
Window *parent;
ComboBoxImpl( Context *context, const PeerHandle &peer, Window *window )
: EditImpl( context, peer, window )
, mxComboBox( peer, uno::UNO_QUERY )
{
}
~ComboBoxImpl ();
sal_uInt16 InsertEntry( OUString const& rStr, sal_uInt16 nPos )
{
if ( nPos == COMBOBOX_APPEND )
nPos = GetEntryCount();
mxComboBox->addItem( rtl::OUString( rStr ), nPos );
return nPos;
}
void RemoveEntry( sal_uInt16 nPos )
{
mxComboBox->removeItems( nPos, 1 );
}
sal_uInt16 GetEntryPos( String const& rStr ) const
{
uno::Sequence< rtl::OUString> aItems( mxComboBox->getItems() );
rtl::OUString rKey( rStr );
sal_uInt16 n = sal::static_int_cast< sal_uInt16 >(aItems.getLength());
for (sal_uInt16 i = 0; i < n; i++)
{
if ( aItems[ i ] == rKey )
return i;
}
return COMBOBOX_ENTRY_NOTFOUND;
}
OUString GetEntry( sal_uInt16 nPos ) const
{
return OUString( mxComboBox->getItem( nPos ) );
}
sal_uInt16 GetEntryCount() const
{
return mxComboBox->getItemCount();
}
void SetClickHdl( Link const& link )
{
if (!link && !!maClickHdl)
mxComboBox->removeActionListener( this );
else if (!!link && !maClickHdl)
mxComboBox->addActionListener( this );
maClickHdl = link;
}
void SetSelectHdl( Link const& link )
{
if (!link && !!maSelectHdl)
mxComboBox->removeItemListener( this );
else if (!!link && !maSelectHdl)
mxComboBox->addItemListener( this );
maSelectHdl = link;
}
void SAL_CALL disposing( lang::EventObject const& e )
throw (uno::RuntimeException);
void SAL_CALL actionPerformed (const awt::ActionEvent&)
throw (uno::RuntimeException)
{
ComboBox* pComboBox = static_cast<ComboBox*>( mpWindow );
if ( !pComboBox )
return;
maClickHdl.Call( pComboBox );
}
void SAL_CALL itemStateChanged( awt::ItemEvent const&)
throw (uno::RuntimeException)
{
ComboBox* pComboBox = static_cast<ComboBox*>( mpWindow );
if ( !pComboBox )
return;
maSelectHdl.Call( pComboBox );
}
};
ComboBox::~ComboBox ()
{
#ifndef __SUNPRO_CC
OSL_TRACE ("%s: deleting ComboBox for window: %p", __FUNCTION__, GetWindow ());
#endif
}
ComboBoxImpl::~ComboBoxImpl ()
{
#ifndef __SUNPRO_CC
OSL_TRACE ("%s: deleting ComboBoxImpl for window: %p", __FUNCTION__, mpWindow ? mpWindow->GetWindow () : 0);
OSL_TRACE ("%s: deleting ComboBoxImpl for listener: %p", __FUNCTION__, static_cast<XFocusListener*> (this));
#endif
}
void ComboBoxImpl::disposing( lang::EventObject const& e )
throw (uno::RuntimeException)
{
EditImpl::disposing (e);
mxComboBox.clear ();
}
sal_uInt16 ComboBox::InsertEntry( String const& rStr, sal_uInt16 nPos )
{
return getImpl().InsertEntry( rStr, nPos );
}
void ComboBox::RemoveEntry( String const& rStr )
{
getImpl().RemoveEntry( GetEntryPos( rStr ) );
}
void ComboBox::RemoveEntry( sal_uInt16 nPos )
{
getImpl().RemoveEntry( nPos );
}
void ComboBox::Clear()
{
uno::Sequence< rtl::OUString> aNoItems;
getImpl().setProperty( "StringItemList", uno::Any( aNoItems ) );
}
sal_uInt16 ComboBox::GetEntryPos( String const& rStr ) const
{
return getImpl().GetEntryPos( rStr );
}
String ComboBox::GetEntry( sal_uInt16 nPos ) const
{
rtl::OUString rItem = getImpl().mxComboBox->getItem( nPos );
return OUString( rItem );
}
sal_uInt16 ComboBox::GetEntryCount() const
{
return getImpl().GetEntryCount();
}
void ComboBox::SetClickHdl( const Link& link )
{
if (&getImpl () && getImpl().mxComboBox.is ())
getImpl().SetClickHdl( link );
}
void ComboBox::SetSelectHdl( const Link& link )
{
if (&getImpl () && getImpl().mxComboBox.is ())
getImpl().SetSelectHdl( link );
}
void ComboBox::EnableAutocomplete (bool enable, bool matchCase)
{
GetComboBox ()->EnableAutocomplete (enable, matchCase);
}
IMPL_CONSTRUCTORS_BODY( ComboBox, Edit, "combobox", getImpl().parent = parent; );
IMPL_GET_WINDOW (ComboBox);
/// IMPL_GET_IMPL( ComboBox );
static ComboBoxImpl* null_combobox_impl = 0;
ComboBoxImpl &ComboBox::getImpl () const
{
if (ComboBoxImpl* c = static_cast<ComboBoxImpl *>(mpImpl))
return *c;
return *null_combobox_impl;
}
class ListBoxImpl : public ControlImpl
, public ::cppu::WeakImplHelper1< awt::XActionListener >
, public ::cppu::WeakImplHelper1< awt::XItemListener >
, public ::cppu::WeakImplHelper1< awt::XMouseListener >
{
Link maClickHdl;
Link maSelectHdl;
Link maDoubleClickHdl;
public:
uno::Reference< awt::XListBox > mxListBox;
ListBoxImpl( Context *context, const PeerHandle &peer, Window *window )
: ControlImpl( context, peer, window )
, mxListBox( peer, uno::UNO_QUERY )
{
SelectEntryPos (0, true);
}
sal_uInt16 InsertEntry (String const& rStr, sal_uInt16 nPos)
{
if ( nPos == LISTBOX_APPEND )
nPos = mxListBox->getItemCount();
mxListBox->addItem( rtl::OUString( rStr ), nPos );
return nPos;
}
void RemoveEntry( sal_uInt16 nPos )
{
mxListBox->removeItems( nPos, 1 );
}
sal_uInt16 RemoveEntry( String const& rStr, sal_uInt16 nPos)
{
if ( nPos == LISTBOX_APPEND )
nPos = mxListBox->getItemCount();
mxListBox->addItem( rtl::OUString( rStr ), nPos );
return nPos;
}
sal_uInt16 GetEntryPos( String const& rStr ) const
{
uno::Sequence< rtl::OUString> aItems( mxListBox->getItems() );
rtl::OUString rKey( rStr );
sal_uInt16 n = sal::static_int_cast< sal_uInt16 >(aItems.getLength());
for (sal_uInt16 i = 0; i < n; i++)
{
if ( aItems[ i ] == rKey )
return i;
}
return LISTBOX_ENTRY_NOTFOUND;
}
OUString GetEntry( sal_uInt16 nPos ) const
{
return mxListBox->getItem( nPos );
}
sal_uInt16 GetEntryCount() const
{
return mxListBox->getItemCount();
}
void SelectEntryPos( sal_uInt16 nPos, bool bSelect )
{
mxListBox->selectItemPos( nPos, bSelect );
}
sal_uInt16 GetSelectEntryCount() const
{
return sal::static_int_cast< sal_uInt16 >( mxListBox->getSelectedItems().getLength() );
}
sal_uInt16 GetSelectEntryPos( sal_uInt16 nSelIndex ) const
{
sal_uInt16 nSelected = 0;
if ( mxListBox->isMutipleMode() )
{
uno::Sequence< short > aItems( mxListBox->getSelectedItemsPos() );
if ( nSelIndex < aItems.getLength() )
nSelected = aItems[ nSelIndex ];
}
else
nSelected = mxListBox->getSelectedItemPos();
return nSelected;
}
virtual void SAL_CALL disposing( lang::EventObject const& e )
throw (uno::RuntimeException)
{
ControlImpl::disposing (e);
mxListBox.clear ();
}
Link& GetClickHdl ()
{
return maClickHdl;
}
void SetClickHdl( Link const& link )
{
if (!link && !!maClickHdl)
mxListBox->removeActionListener( this );
else if (!!link && !maClickHdl)
mxListBox->addActionListener( this );
maClickHdl = link;
}
void SAL_CALL actionPerformed( const awt::ActionEvent& /* rEvent */ )
throw (uno::RuntimeException)
{
maClickHdl.Call( mpWindow );
}
Link& GetSelectHdl ()
{
return maSelectHdl;
}
void SetSelectHdl( Link const& link )
{
if (!link && !!maSelectHdl)
mxListBox->removeItemListener( this );
else if (!!link && !maSelectHdl)
mxListBox->addItemListener( this );
maSelectHdl = link;
}
void SAL_CALL itemStateChanged (awt::ItemEvent const&)
throw (uno::RuntimeException)
{
maSelectHdl.Call (static_cast <ListBox*> (mpWindow));
}
Link& GetDoubleClickHdl ()
{
return maDoubleClickHdl;
}
void SetDoubleClickHdl (Link const& link)
{
if (!link && !!maDoubleClickHdl)
mxWindow->removeMouseListener (this);
else if (!!link && !maSelectHdl)
mxWindow->addMouseListener (this);
maDoubleClickHdl = link;
}
void SAL_CALL mousePressed (awt::MouseEvent const&) throw (uno::RuntimeException)
{
}
void SAL_CALL mouseReleased (awt::MouseEvent const& e) throw (uno::RuntimeException)
{
if (e.ClickCount == 2)
maDoubleClickHdl.Call (mpWindow);
}
void SAL_CALL mouseEntered (awt::MouseEvent const&) throw (uno::RuntimeException)
{
}
void SAL_CALL mouseExited (awt::MouseEvent const&) throw (uno::RuntimeException)
{
}
};
ListBox::~ListBox ()
{
}
sal_uInt16 ListBox::InsertEntry (String const& rStr, sal_uInt16 nPos)
{
return getImpl().InsertEntry(rStr, nPos);
}
void ListBox::RemoveEntry( sal_uInt16 nPos )
{
return getImpl().RemoveEntry( nPos );
}
void ListBox::RemoveEntry( String const& rStr )
{
return getImpl().RemoveEntry( GetEntryPos( rStr ) );
}
void ListBox::Clear()
{
uno::Sequence< rtl::OUString> aNoItems;
getImpl().setProperty( "StringItemList", uno::Any( aNoItems ) );
}
sal_uInt16 ListBox::GetEntryPos( String const& rStr ) const
{
return getImpl().GetEntryPos( rStr );
}
String ListBox::GetEntry( sal_uInt16 nPos ) const
{
return getImpl().GetEntry( nPos );
}
sal_uInt16 ListBox::GetEntryCount() const
{
return getImpl().GetEntryCount();
}
void ListBox::SelectEntryPos( sal_uInt16 nPos, bool bSelect )
{
#if LAYOUT_API_CALLS_HANDLER
getImpl().SelectEntryPos( nPos, bSelect );
#else /* !LAYOUT_API_CALLS_HANDLER */
GetListBox ()->SelectEntryPos (nPos, bSelect);
#endif /* !LAYOUT_API_CALLS_HANDLER */
}
void ListBox::SelectEntry( String const& rStr, bool bSelect )
{
SelectEntryPos( GetEntryPos( rStr ), bSelect );
}
sal_uInt16 ListBox::GetSelectEntryCount() const
{
return getImpl().GetSelectEntryCount();
}
sal_uInt16 ListBox::GetSelectEntryPos( sal_uInt16 nSelIndex ) const
{
return getImpl().GetSelectEntryPos( nSelIndex );
}
String ListBox::GetSelectEntry( sal_uInt16 nSelIndex ) const
{
return GetEntry( GetSelectEntryPos( nSelIndex ) );
}
Link& ListBox::GetSelectHdl ()
{
return getImpl ().GetSelectHdl ();
}
void ListBox::SetSelectHdl( Link const& link )
{
getImpl().SetSelectHdl( link );
}
Link& ListBox::GetClickHdl ()
{
return getImpl ().GetSelectHdl ();
}
void ListBox::SetClickHdl( Link const& link )
{
if (&getImpl () && getImpl().mxListBox.is ())
getImpl().SetClickHdl( link );
}
Link& ListBox::GetDoubleClickHdl ()
{
return getImpl ().GetSelectHdl ();
}
void ListBox::SetDoubleClickHdl( Link const& link )
{
getImpl().SetDoubleClickHdl( link );
}
void ListBox::SetEntryData( sal_uInt16 pos, void* data)
{
GetListBox ()->SetEntryData (pos, data);
}
void* ListBox::GetEntryData( sal_uInt16 pos) const
{
return GetListBox ()->GetEntryData (pos);
}
void ListBox::SetNoSelection ()
{
GetListBox ()->SetNoSelection ();
}
IMPL_CONSTRUCTORS (ListBox, Control, "listbox");
IMPL_GET_IMPL (ListBox);
IMPL_GET_WINDOW (ListBox);
IMPL_IMPL (MultiListBox, ListBox)
IMPL_CONSTRUCTORS_BODY( MultiListBox, ListBox, "multilistbox", GetMultiListBox()->EnableMultiSelection( true ); );
IMPL_GET_IMPL( MultiListBox );
IMPL_GET_WINDOW( MultiListBox );
} // namespace layout

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,153 @@
/*************************************************************************
*
* 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$
*
* $Revision$
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General 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 LAYOUT_VCL_WRAPPER_HXX
#define LAYOUT_VCL_WRAPPER_HXX
#include <layout/layout.hxx>
#include <com/sun/star/uno/Reference.hxx>
#include <com/sun/star/awt/XDialog2.hpp>
#include <com/sun/star/awt/XFocusListener.hpp>
#include <com/sun/star/awt/XWindow.hpp>
#include <com/sun/star/awt/XVclWindowPeer.hpp>
#include <cppuhelper/implbase1.hxx>
#include <cstring>
namespace layout
{
namespace css = com::sun::star;
class WindowImpl
{
public:
Window *mpWindow;
Context *mpCtx;
css::uno::Reference< css::awt::XWindow > mxWindow;
css::uno::Reference< css::awt::XVclWindowPeer > mxVclPeer;
::Window *mvclWindow;
bool bFirstTimeVisible;
WindowImpl (Context *context, PeerHandle const &peer, Window *window);
virtual ~WindowImpl ();
void wrapperGone();
css::uno::Any getProperty (char const *name);
void setProperty (char const *name, css::uno::Any any);
void redraw (bool resize=false);
// XFocusListener
virtual void SAL_CALL disposing (css::lang::EventObject const&) throw (css::uno::RuntimeException);
};
class ControlImpl : public WindowImpl
, public ::cppu::WeakImplHelper1 <css::awt::XFocusListener>
{
public:
Link mGetFocusHdl;
Link mLoseFocusHdl;
ControlImpl( Context *context, PeerHandle const& peer, Window *window );
~ControlImpl ();
virtual void SetGetFocusHdl (Link const& link);
Link& GetGetFocusHdl ();
virtual void SetLoseFocusHdl (Link const& link);
Link& GetLoseFocusHdl ();
virtual void UpdateListening (Link const& link);
// XFocusListener
virtual void SAL_CALL disposing (css::lang::EventObject const&) throw (css::uno::RuntimeException);
void SAL_CALL focusGained (css::awt::FocusEvent const& e) throw (css::uno::RuntimeException);
void SAL_CALL focusLost (css::awt::FocusEvent const& e) throw (css::uno::RuntimeException);
};
inline WindowImpl &Window::getImpl() const{ return *(static_cast< WindowImpl * >( mpImpl )); }
// Helpers for defining boiler-plate constructors ...
// Could in-line in top-level but not with safe static_casts.
#define IMPL_GET_IMPL(t) \
inline t##Impl &t::getImpl() const \
{ \
return *(static_cast<t##Impl *>(mpImpl)); \
}
#define IMPL_CONSTRUCTORS_BODY(t,par,unoName,body) \
t::t( Context *context, const char *pId, sal_uInt32 nId ) \
: par( new t##Impl( context, context->GetPeerHandle( pId, nId ), this ) ) \
{ \
Window *parent = dynamic_cast<Window*> (context);\
body;\
if (parent)\
SetParent (parent);\
} \
t::t( Window *parent, WinBits bits) \
: par( new t##Impl( parent->getContext(), Window::CreatePeer( parent, bits, unoName ), this ) ) \
{ \
body;\
if ( parent )\
SetParent (parent);\
} \
t::t( Window *parent, ResId const& res) \
: par( new t##Impl( parent->getContext(), Window::CreatePeer( parent, 0, unoName ), this ) ) \
{ \
body;\
setRes (res);\
if (parent)\
SetParent (parent);\
}
#define IMPL_CONSTRUCTORS(t,par,unoName) IMPL_CONSTRUCTORS_BODY(t, par, unoName, )
#define IMPL_CONSTRUCTORS_2(t,win_par,other_par,unoName) \
t::t( Context *context, const char *pId, sal_uInt32 nId ) \
: win_par( new t##Impl( context, context->GetPeerHandle( pId, nId ), this ) ) \
, other_par( new other_par##Impl( Window::GetPeer() ) ) \
{ \
} \
t::t( Window *parent, WinBits bits) \
: win_par( new t##Impl( parent->getContext(), Window::CreatePeer( parent, bits, unoName ), this ) ) \
, other_par( new other_par##Impl( Window::GetPeer() ) ) \
{ \
}
#define IMPL_IMPL(t, parent) \
class t##Impl : public parent##Impl \
{ \
public: \
t##Impl( Context *context, PeerHandle const& peer, Window *window ) \
: parent##Impl( context, peer, window ) \
{ \
} \
};
} // namespace layout
#endif /* LAYOUT_VCL_WRAPPER_HXX */

View File

@@ -1,582 +0,0 @@
/*************************************************************************
*
* 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: wbutton.cxx,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.
*
************************************************************************/
#include "wrapper.hxx"
#include <com/sun/star/awt/PosSize.hpp>
#include <com/sun/star/awt/XActionListener.hpp>
#include <com/sun/star/awt/XButton.hpp>
#include <com/sun/star/awt/XCheckBox.hpp>
#include <com/sun/star/awt/XRadioButton.hpp>
#include <com/sun/star/graphic/XGraphic.hpp>
#include <cppuhelper/implbase1.hxx>
#include <toolkit/awt/vclxwindow.hxx>
#include <toolkit/helper/convert.hxx>
#include <vcl/button.hxx>
#include <vcl/event.hxx>
#include <vcl/msgbox.hxx>
#include <vcl/svapp.hxx>
#include <vcl/window.hxx>
#include <list>
#include "layout/layoutcore.hxx"
using namespace ::com::sun::star;
namespace layout
{
class ImageImpl
{
public:
css::uno::Reference< css::graphic::XGraphic > mxGraphic;
ImageImpl( const char *pName )
: mxGraphic( layoutimpl::loadGraphic( pName ) )
{
if ( !mxGraphic.is() )
{
DBG_ERROR1( "ERROR: failed to load image: `%s'\n", pName );
}
}
};
Image::Image( const char *pName )
: pImpl( new ImageImpl( pName ) )
{
}
Image::~Image()
{
delete pImpl;
}
class ButtonImpl : public ControlImpl
, public ::cppu::WeakImplHelper1< awt::XActionListener >
, public ::cppu::WeakImplHelper1< awt::XItemListener >
{
Link maClickHdl;
protected:
// we add toggle hooks here to cut on code
Link maToggleHdl;
public:
uno::Reference< awt::XButton > mxButton;
ButtonImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
: ControlImpl( pCtx, xPeer, pWindow )
, mxButton( xPeer, uno::UNO_QUERY )
{
mxButton->addActionListener( this );
}
~ButtonImpl()
{
}
virtual void Click() { /* make me pure virtual? */ };
void SetClickHdl( const Link& rLink )
{
maClickHdl = rLink;
if ( !rLink )
mxButton->removeActionListener( this );
else
mxButton->addActionListener( this );
}
virtual void SAL_CALL disposing( const css::lang::EventObject& /* Source */ )
throw (css::uno::RuntimeException)
{ mxButton.clear(); }
virtual void SAL_CALL actionPerformed( const css::awt::ActionEvent& /* rEvent */ )
throw (css::uno::RuntimeException)
{
if ( !maClickHdl )
Click();
else
maClickHdl.Call( static_cast<Window *>( mpWindow ) );
}
virtual // HACK: doesn't need to be virtual... remove in future...
void SAL_CALL itemStateChanged( const css::awt::ItemEvent& /* rEvent */ )
throw (css::uno::RuntimeException)
{
maToggleHdl.Call( static_cast<Window *>( mpWindow ) );
}
BOOL SetModeImage( css::uno::Reference< css::graphic::XGraphic > xGraph )
{
setProperty( "Graphic", uno::Any( xGraph ) );
return true;
}
};
void Button::SetText( const String& rStr )
{
if ( !getImpl().mxButton.is() )
return;
getImpl().mxButton->setLabel( rStr );
}
void Button::SetClickHdl( const Link& rLink )
{
getImpl().SetClickHdl( rLink );
}
BOOL Button::SetModeImage( const Image& rImage )
{
return getImpl().SetModeImage( rImage.getImpl().mxGraphic );
}
void Button::SetImageAlign( ImageAlign eAlign )
{
getImpl().setProperty( "ImageAlign", uno::Any( (sal_Int16) eAlign ) );
}
void Button::Click()
{
}
DECL_GET_IMPL_IMPL( Button );
DECL_CONSTRUCTOR_IMPLS( Button, Control, "button" );
class PushButtonImpl : public ButtonImpl
{
public:
PushButtonImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
: ButtonImpl( pCtx, xPeer, pWindow ) {}
void SetToggleHdl( const Link& rLink )
{
// XButton doesn't have an explicit event for Toggle. Anyway, it is a
// superset of the clicks: all clicks, and explicit toggles
maToggleHdl = rLink;
if ( !rLink )
mxButton->removeActionListener( this );
else
mxButton->addActionListener( this );
}
virtual void SAL_CALL actionPerformed( const css::awt::ActionEvent& rEvent )
throw (css::uno::RuntimeException)
{
ButtonImpl::actionPerformed( rEvent );
fireToggle();
}
inline void fireToggle()
{
maToggleHdl.Call( static_cast<Window *>( mpWindow ) );
}
};
void PushButton::Check( BOOL bCheck )
{
getImpl().setProperty( "State", uno::Any( (sal_Int16) !!bCheck ) );
// XButton doesn't have explicit toggle event
getImpl().fireToggle();
}
BOOL PushButton::IsChecked() const
{
return !!( getImpl().getProperty( "State" ).get< sal_Int16 >() );
}
void PushButton::Toggle()
{
Check( true );
}
void PushButton::SetToggleHdl( const Link& rLink )
{
getImpl().SetToggleHdl( rLink );
}
DECL_GET_IMPL_IMPL( PushButton );
DECL_CONSTRUCTOR_IMPLS( PushButton, Button, "pushbutton" );
// HACK: put every radio button into a group :/
static std::list< RadioButtonImpl*> mpRadioGroup;
class RadioButtonImpl : public ButtonImpl
{
public:
uno::Reference< awt::XRadioButton > mxRadioButton;
RadioButtonImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
: ButtonImpl( pCtx, xPeer, pWindow )
, mxRadioButton( xPeer, uno::UNO_QUERY )
{
// TEMP:
mpRadioGroup.push_back( this );
mxRadioButton->addItemListener( this );
}
~RadioButtonImpl()
{
//mxRadioButton->removeItemListener( this );
mpRadioGroup.pop_front();
}
void Check( BOOL bCheck )
{
if ( !mxRadioButton.is() )
return;
mxRadioButton->setState( !!bCheck );
fireToggle();
if ( bCheck )
unsetOthersGroup( this );
}
BOOL IsChecked()
{
if ( !mxRadioButton.is() )
return FALSE;
return mxRadioButton->getState();
}
static void unsetOthersGroup( RadioButtonImpl* current )
{
// set all others to false
for ( std::list< RadioButtonImpl*>::iterator i = mpRadioGroup.begin();
i != mpRadioGroup.end(); i++ )
{
if ( *i != current )
( *i )->Check( false );
}
}
void SetToggleHdl( const Link& rLink )
{
maToggleHdl = rLink;
#if 0
if ( !rLink )
mxRadioButton->removeItemListener( this );
else
mxRadioButton->addItemListener( this );
#endif
}
inline void fireToggle()
{
maToggleHdl.Call( static_cast<Window *>( mpWindow ) );
}
//HACK: temp
virtual void SAL_CALL itemStateChanged( const css::awt::ItemEvent& rEvent )
throw (css::uno::RuntimeException)
{
if ( !!maToggleHdl )
ButtonImpl::itemStateChanged( rEvent );
if ( IsChecked() )
unsetOthersGroup( this );
}
};
void RadioButton::Check( BOOL bCheck )
{
getImpl().Check( bCheck );
}
BOOL RadioButton::IsChecked() const
{
return getImpl().IsChecked();
}
void RadioButton::SetToggleHdl( const Link& rLink )
{
getImpl().SetToggleHdl( rLink );
}
DECL_GET_IMPL_IMPL( RadioButton );
#if 1
DECL_CONSTRUCTOR_IMPLS( RadioButton, Button, "radiobutton" );
#else //debugging aid
RadioButton::RadioButton( Context *pCtx, const char *pId, sal_uInt32 nId )
: Button( new RadioButtonImpl( pCtx, pCtx->GetPeerHandle( pId, nId ), this ) )
{
printf( "%s: name=%s\n", __PRETTY_FUNCTION__, pId );
}
RadioButton::RadioButton( Window *pParent, WinBits nBits )
: Button( new RadioButtonImpl( pParent->getContext(), Window::CreatePeer( pParent, nBits, "radiobutton" ), this ) )
{
}
#endif
class CheckBoxImpl : public ButtonImpl
{
public:
uno::Reference< awt::XCheckBox > mxCheckBox;
CheckBoxImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
: ButtonImpl( pCtx, xPeer, pWindow )
, mxCheckBox( xPeer, uno::UNO_QUERY ) {}
void SetToggleHdl( const Link& rLink )
{
maToggleHdl = rLink;
if ( !rLink )
mxCheckBox->removeItemListener( this );
else
mxCheckBox->addItemListener( this );
}
};
void CheckBox::Check( BOOL bCheck )
{
if ( !getImpl().mxCheckBox.is() )
return;
getImpl().mxCheckBox->setState( !!bCheck );
}
BOOL CheckBox::IsChecked() const
{
if ( !getImpl().mxCheckBox.is() )
return FALSE;
return getImpl().mxCheckBox->getState() != 0;
}
void CheckBox::SetToggleHdl( const Link& rLink )
{
getImpl().SetToggleHdl( rLink );
}
DECL_GET_IMPL_IMPL( CheckBox );
DECL_CONSTRUCTOR_IMPLS( CheckBox, Button, "checkbox" );
#define BUTTON_IMPL(t, parent, response) \
class t##Impl : public parent##Impl \
{ \
public: \
t##Impl( Context *pCtx, PeerHandle const& xPeer, Window *pWindow ) \
: parent##Impl( pCtx, xPeer, pWindow ) \
{ \
} \
void Click() \
{ \
Dialog *d = static_cast<Dialog *>( mpCtx ); \
d->EndDialog( response ); \
} \
}
/* Common button types currently unavailable in OOo: */
/* mpReset */
/* mpApply */
/* mpAction */
#define RET_RESET 6
#define RET_APPLY 7
#define BUTTONID_RESET RET_RESET
#define BUTTONID_APPLY RET_APPLY
BUTTON_IMPL( OKButton, PushButton, BUTTONID_OK );
BUTTON_IMPL( CancelButton, PushButton, BUTTONID_CANCEL );
BUTTON_IMPL( YesButton, PushButton, BUTTONID_YES );
BUTTON_IMPL( NoButton, PushButton, BUTTONID_NO );
BUTTON_IMPL( RetryButton, PushButton, BUTTONID_RETRY );
BUTTON_IMPL( IgnoreButton, PushButton, BUTTONID_IGNORE );
BUTTON_IMPL( ResetButton, PushButton, BUTTONID_RESET );
BUTTON_IMPL( ApplyButton, PushButton, BUTTONID_APPLY ); /* Deprecated? */
BUTTON_IMPL( HelpButton, PushButton, BUTTONID_HELP );
DECL_CONSTRUCTOR_IMPLS( OKButton, PushButton, "okbutton" );
DECL_CONSTRUCTOR_IMPLS( CancelButton, PushButton, "cancelbutton" );
DECL_CONSTRUCTOR_IMPLS( YesButton, PushButton, "yesbutton" );
DECL_CONSTRUCTOR_IMPLS( NoButton, PushButton, "nobutton" );
DECL_CONSTRUCTOR_IMPLS( RetryButton, PushButton, "retrybutton" );
DECL_CONSTRUCTOR_IMPLS( IgnoreButton, PushButton, "ignorebutton" );
DECL_CONSTRUCTOR_IMPLS( ResetButton, PushButton, "resetbutton" );
DECL_CONSTRUCTOR_IMPLS( ApplyButton, PushButton, "applybutton" ); /* Deprecated? */
DECL_CONSTRUCTOR_IMPLS( HelpButton, PushButton, "helpbutton" );
class AdvancedButtonImpl : public PushButtonImpl
{
protected:
bool bAdvancedMode;
std::list< Window*> maAdvanced;
std::list< Window*> maSimple;
rtl::OUString mSimpleLabel;
rtl::OUString mAdvancedLabel;
Window* Remove( std::list< Window*> lst, Window* w )
{
for ( std::list< Window*>::iterator it = maAdvanced.begin();
it != maAdvanced.end(); it++ )
if ( *it == w )
{
lst.erase( it );
return *it;
}
return 0;
}
void redraw()
{
uno::Reference <awt::XWindow> ref( mxWindow, uno::UNO_QUERY );
::Window* window = VCLXWindow::GetImplementation( ref )->GetWindow();
::Window* parent = window->GetParent();
::Rectangle r = Rectangle( parent->GetPosPixel(),
parent->GetSizePixel() );
parent->Invalidate( r, INVALIDATE_CHILDREN | INVALIDATE_NOCHILDREN );
parent->SetPosSizePixel( 0, 0, r.nRight - r.nLeft, r.nBottom - r.nTop,
awt::PosSize::SIZE );
}
public:
AdvancedButtonImpl( Context *pCtx, PeerHandle const& xPeer, Window *pWindow )
: PushButtonImpl( pCtx, xPeer, pWindow )
, bAdvancedMode( false )
// TODO: i18n
// Button::GetStandardText( BUTTON_ADVANCED );
// Button::GetStandardText( BUTTON_SIMPLE );
, mSimpleLabel( rtl::OUString::createFromAscii( "Advanced..." ) )
, mAdvancedLabel( rtl::OUString::createFromAscii( "Simple..." ) )
{
}
void Click()
{
bAdvancedMode = !bAdvancedMode;
if ( bAdvancedMode )
advancedMode();
else
simpleMode();
}
void advancedMode()
{
// TODO: set symbol/image?
// SYMBOL_PAGEUP, SYMBOL_PAGEDOWN
#if 0
// How to set images from here?
// XImageConsumer looks like a disaster
// Should move all this switching functionality to VCLXAdvancedButton?
/biek/home/janneke/vc/layout-cws/default_images/res/commandimagelist/
sc_arrowshapes_down.png
sch_flowchartshapes.flowchart-extract.png
sch_flowchartshapes.flowchart-merge.png
#endif
mxButton->setLabel( mAdvancedLabel );
for ( std::list< Window*>::iterator it = maAdvanced.begin();
it != maAdvanced.end(); it++ )
( *it )->Show();
for ( std::list< Window*>::iterator it = maSimple.begin();
it != maSimple.end(); it++ )
( *it )->Hide();
redraw();
}
void simpleMode()
{
mxButton->setLabel( mSimpleLabel );
for ( std::list< Window*>::iterator it = maAdvanced.begin();
it != maAdvanced.end(); it++ )
( *it )->Hide();
for ( std::list< Window*>::iterator it = maSimple.begin();
it != maSimple.end(); it++ )
( *it )->Show();
redraw();
}
void AddAdvanced( Window* w )
{
maAdvanced.push_back( w );
if ( !bAdvancedMode )
w->Hide();
}
void AddSimple( Window* w )
{
maSimple.push_back( w );
if ( bAdvancedMode )
w->Hide();
}
void RemoveAdvanced( Window* w )
{
Remove( maAdvanced, w );
}
void RemoveSimple( Window* w )
{
Remove( maSimple, w );
}
};
void AdvancedButton::AddAdvanced( Window* w )
{
getImpl().AddAdvanced( w );
}
void AdvancedButton::AddSimple( Window* w )
{
getImpl().AddSimple( w );
}
void AdvancedButton::RemoveAdvanced( Window* w )
{
getImpl().RemoveAdvanced( w );
}
void AdvancedButton::RemoveSimple( Window* w )
{
getImpl().RemoveSimple( w );
}
DECL_CONSTRUCTOR_IMPLS( AdvancedButton, PushButton, "advancedbutton" );
DECL_GET_IMPL_IMPL( AdvancedButton );
class MoreButtonImpl : public AdvancedButtonImpl
{
public:
MoreButtonImpl( Context *pCtx, PeerHandle const& xPeer, Window *pWindow )
: AdvancedButtonImpl( pCtx, xPeer, pWindow)
{
mAdvancedLabel = ::Button::GetStandardText( BUTTON_LESS );
mSimpleLabel = ::Button::GetStandardText( BUTTON_MORE );
}
void AddWindow( Window* w ) { AddAdvanced( w ); }
void RemoveWindow( Window* w ) { RemoveAdvanced( w ); }
};
// TODO
//BUTTON_IMPL( MoreButton, PushButton, 0 );
DECL_CONSTRUCTOR_IMPLS( MoreButton, AdvancedButton, "morebutton" );
DECL_GET_IMPL_IMPL( MoreButton );
void MoreButton::AddWindow( Window* w )
{
getImpl().AddWindow( w );
}
void MoreButton::RemoveWindow( Window* w )
{
getImpl().RemoveWindow( w );
}
} // namespace layout

View File

@@ -1,627 +0,0 @@
/*************************************************************************
*
* 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: wfield.cxx,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.
*
************************************************************************/
#include "wrapper.hxx"
#include <comphelper/processfactory.hxx>
#include <com/sun/star/awt/XMetricField.hpp>
#include <com/sun/star/awt/XCurrencyField.hpp>
#include <com/sun/star/awt/XTextComponent.hpp>
#include <com/sun/star/awt/XListBox.hpp>
#include <com/sun/star/awt/XComboBox.hpp>
#include <cppuhelper/implbase1.hxx>
#include <com/sun/star/awt/XActionListener.hpp>
#include <com/sun/star/awt/XItemListener.hpp>
using namespace ::com::sun::star;
namespace layout
{
class EditImpl : public ControlImpl,
public ::cppu::WeakImplHelper1< awt::XTextListener >
{
Link maModifyHdl;
public:
uno::Reference< awt::XTextComponent > mxEdit;
EditImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
: ControlImpl( pCtx, xPeer, pWindow )
, mxEdit( xPeer, uno::UNO_QUERY )
{
}
virtual void SAL_CALL disposing( const css::lang::EventObject& /* Source */ )
throw (css::uno::RuntimeException)
{
SetModifyHdl( Link() );
mxEdit.clear();
}
void SetModifyHdl( const Link& rLink )
{
if ( !mxEdit.is() )
return;
maModifyHdl = rLink;
if ( !rLink )
mxEdit->removeTextListener( this );
else
mxEdit->addTextListener( this );
}
void SAL_CALL textChanged( const css::awt::TextEvent& /* rEvent */ )
throw (css::uno::RuntimeException)
{
maModifyHdl.Call( mpWindow );
}
};
void Edit::SetText( const XubString& rStr ) const
{
if ( !getImpl().mxEdit.is() )
return;
getImpl().mxEdit->setText( rStr );
}
XubString Edit::GetText() const
{
if ( !getImpl().mxEdit.is() )
return XubString();
return XubString( getImpl().mxEdit->getText());
}
void Edit::SetModifyHdl( const Link& rLink )
{
getImpl().SetModifyHdl( rLink );
}
DECL_CONSTRUCTOR_IMPLS( Edit, Control, "edit" );
DECL_GET_IMPL_IMPL( Edit );
// Window/Control/Edit/MultiLineEdit
class MultiLineEditImpl : public EditImpl
{
public:
MultiLineEditImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
: EditImpl( pCtx, xPeer, pWindow )
{
}
};
DECL_CONSTRUCTOR_IMPLS( MultiLineEdit, Edit, "multilineedit" );
DECL_GET_IMPL_IMPL( MultiLineEdit );
// Window/Control/Edit/SpinField
class SpinFieldImpl : public EditImpl
{
public:
SpinFieldImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
: EditImpl( pCtx, xPeer, pWindow )
{
}
};
DECL_CONSTRUCTOR_IMPLS( SpinField, Edit, "spinfield" );
// Window/Control/Edit/SpinField/NumericField
class NumericFieldImpl : public SpinFieldImpl
{
public:
NumericFieldImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
: SpinFieldImpl( pCtx, xPeer, pWindow )
{
}
};
// Window/Control/Edit/SpinField/MetricField
class MetricFieldImpl : public SpinFieldImpl
{
public:
MetricFieldImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
: SpinFieldImpl( pCtx, xPeer, pWindow )
{
}
};
DECL_GET_IMPL_IMPL( SpinField );
DECL_GET_IMPL_IMPL( NumericField );
DECL_GET_IMPL_IMPL( MetricField );
// FormatterBase
class FormatterBaseImpl
{
protected:
PeerHandle mxPeer;
public:
explicit FormatterBaseImpl( const PeerHandle &xPeer )
: mxPeer( xPeer )
{
};
};
class NumericFormatterImpl : public FormatterBaseImpl
{
public:
uno::Reference< awt::XCurrencyField > mxField;
explicit NumericFormatterImpl( const PeerHandle &xPeer )
: FormatterBaseImpl( xPeer )
, mxField( xPeer, uno::UNO_QUERY )
{
}
// FIXME: burn that CPU ! cut/paste from vclxwindows.cxx
double valueToDouble( sal_Int64 nValue )
{
sal_Int16 nDigits = mxField->getDecimalDigits();
double n = (double)nValue;
for ( sal_uInt16 d = 0; d < nDigits; d++ )
n /= 10;
return n;
} // FIXME: burn that CPU ! cut/paste from vclxwindows.cxx
sal_Int64 doubleToValue( double nValue )
{
sal_Int16 nDigits = mxField->getDecimalDigits();
double n = nValue;
for ( sal_uInt16 d = 0; d < nDigits; d++ )
n *= 10;
return (sal_Int64) n;
}
};
class MetricFormatterImpl : public FormatterBaseImpl
{
public:
uno::Reference< awt::XMetricField > mxField;
explicit MetricFormatterImpl( const PeerHandle &xPeer )
: FormatterBaseImpl( xPeer )
, mxField( xPeer, uno::UNO_QUERY )
{
}
};
// NumericFormatter
NumericFormatter::NumericFormatter( FormatterBaseImpl *pImpl )
: FormatterBase( pImpl )
{
}
NumericFormatterImpl& NumericFormatter::getFormatImpl() const
{
return *( static_cast<NumericFormatterImpl *>( mpFormatImpl ) );
}
#define SET_IMPL(vclmethod, idlmethod) \
void NumericFormatter::vclmethod( sal_Int64 nValue ) \
{ \
if ( !getFormatImpl().mxField.is() ) \
return; \
getFormatImpl().mxField->idlmethod( getFormatImpl().valueToDouble( nValue ) ); \
}
SET_IMPL( SetMin, setMin )
SET_IMPL( SetMax, setMax )
SET_IMPL( SetLast, setLast )
SET_IMPL( SetFirst, setFirst )
SET_IMPL( SetValue, setValue )
SET_IMPL( SetSpinSize, setSpinSize )
sal_Int64 NumericFormatter::GetValue() const
{
if ( !getFormatImpl().mxField.is() )
return 0;
return getFormatImpl().doubleToValue( getFormatImpl().mxField->getValue() );
}
#undef SET_IMPL
DECL_CONSTRUCTOR_IMPLS_2( NumericField, SpinField, NumericFormatter, "numericfield" );
// MetricFormatter
MetricFormatter::MetricFormatter( FormatterBaseImpl *pImpl )
: FormatterBase( pImpl )
{
}
MetricFormatterImpl& MetricFormatter::getFormatImpl() const
{ return *( static_cast<MetricFormatterImpl *>( mpFormatImpl ) ); }
#define MetricUnitVclToUno(a) ((sal_uInt16)(a))
#define SET_IMPL(vclmethod, idlmethod) \
void MetricFormatter::vclmethod( sal_Int64 nValue, FieldUnit nUnit ) \
{ \
if ( !getFormatImpl().mxField.is() ) \
return; \
getFormatImpl().mxField->idlmethod( nValue, MetricUnitVclToUno( nUnit ) ); \
}
SET_IMPL( SetMin, setMin )
SET_IMPL( SetMax, setMax )
SET_IMPL( SetLast, setLast )
SET_IMPL( SetFirst, setFirst )
SET_IMPL( SetValue, setValue )
#undef SET_IMPL
void MetricFormatter::SetSpinSize( sal_Int64 nValue )
{
if ( !getFormatImpl().mxField.is() )
return;
getFormatImpl().mxField->setSpinSize( nValue );
}
sal_Int64 MetricFormatter::GetValue( FieldUnit nUnit ) const
{
if ( !getFormatImpl().mxField.is() )
return 0;
return getFormatImpl().mxField->getValue( MetricUnitVclToUno( nUnit ) );
}
DECL_CONSTRUCTOR_IMPLS_2( MetricField, SpinField, MetricFormatter, "metricfield" );
// Window/Control/Edit/ComboBox
class ComboBoxImpl : public EditImpl,
public ::cppu::WeakImplHelper1< awt::XActionListener >,
public ::cppu::WeakImplHelper1< awt::XItemListener >
{
Link maClickHdl, maSelectHdl;
public:
uno::Reference< awt::XComboBox > mxComboBox;
ComboBoxImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
: EditImpl( pCtx, xPeer, pWindow ),
mxComboBox( xPeer, uno::UNO_QUERY )
{
}
USHORT InsertEntry(const XubString& rStr, USHORT nPos)
{
if ( nPos == COMBOBOX_APPEND )
nPos = GetEntryCount();
mxComboBox->addItem( rtl::OUString( rStr ), nPos );
return nPos;
}
void RemoveEntry( USHORT nPos )
{
mxComboBox->removeItems( nPos, 1 );
}
USHORT GetEntryPos( const XubString& rStr ) const
{
uno::Sequence< rtl::OUString> aItems( mxComboBox->getItems() );
rtl::OUString rKey( rStr );
for ( unsigned int i = 0; aItems.getLength(); i++ )
{
if ( aItems[ i ] == rKey )
return sal::static_int_cast< USHORT >( i );
}
return COMBOBOX_ENTRY_NOTFOUND;
}
XubString GetEntry( USHORT nPos ) const
{
return XubString( mxComboBox->getItem( nPos ) );
}
USHORT GetEntryCount() const
{
return mxComboBox->getItemCount();
}
void SetClickHdl( const Link& rLink )
{
maClickHdl = rLink;
if ( !rLink )
mxComboBox->removeActionListener( this );
else
mxComboBox->addActionListener( this );
}
void SetSelectHdl( const Link& rLink )
{
maSelectHdl = rLink;
if ( !rLink )
mxComboBox->removeItemListener( this );
else
mxComboBox->addItemListener( this );
}
virtual void SAL_CALL disposing( const css::lang::EventObject& /* Source */ )
throw (css::uno::RuntimeException)
{
mxComboBox.clear();
}
virtual void SAL_CALL actionPerformed( const css::awt::ActionEvent& /* rEvent */ )
throw (css::uno::RuntimeException)
{
ComboBox* pComboBox = static_cast<ComboBox*>( mpWindow );
if ( !pComboBox )
return;
maClickHdl.Call( pComboBox );
}
virtual void SAL_CALL itemStateChanged( const css::awt::ItemEvent& /* rEvent */ )
throw (css::uno::RuntimeException)
{
ComboBox* pComboBox = static_cast<ComboBox*>( mpWindow );
if ( !pComboBox )
return;
maSelectHdl.Call( pComboBox );
}
};
USHORT ComboBox::InsertEntry( const XubString &rStr, USHORT nPos )
{
return getImpl().InsertEntry( rStr, nPos );
}
void ComboBox::RemoveEntry( const XubString& rStr )
{
getImpl().RemoveEntry( GetEntryPos( rStr ) );
}
void ComboBox::RemoveEntry( USHORT nPos )
{
getImpl().RemoveEntry( nPos );
}
void ComboBox::Clear()
{
uno::Sequence< rtl::OUString> aNoItems;
getImpl().setProperty( "StringItemList", uno::Any( aNoItems ) );
}
USHORT ComboBox::GetEntryPos( const XubString& rStr ) const
{
return getImpl().GetEntryPos( rStr );
}
XubString ComboBox::GetEntry( USHORT nPos ) const
{
rtl::OUString rItem = getImpl().mxComboBox->getItem( nPos );
return XubString( rItem );
}
USHORT ComboBox::GetEntryCount() const
{
return getImpl().GetEntryCount();
}
void ComboBox::SetClickHdl( const Link& rLink )
{
getImpl().SetClickHdl( rLink );
}
void ComboBox::SetSelectHdl( const Link& rLink )
{
getImpl().SetSelectHdl( rLink );
}
DECL_CONSTRUCTOR_IMPLS( ComboBox, Edit, "combobox" );
DECL_GET_IMPL_IMPL( ComboBox );
// Window/Control/ListBox
class ListBoxImpl : public ControlImpl,
public ::cppu::WeakImplHelper1< awt::XActionListener >,
public ::cppu::WeakImplHelper1< awt::XItemListener >
{
Link maClickHdl, maSelectHdl;
public:
uno::Reference< awt::XListBox > mxListBox;
ListBoxImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
: ControlImpl( pCtx, xPeer, pWindow ),
mxListBox( xPeer, uno::UNO_QUERY )
{
}
USHORT InsertEntry(const XubString& rStr, USHORT nPos)
{
if ( nPos == LISTBOX_APPEND )
nPos = mxListBox->getItemCount();
mxListBox->addItem( rtl::OUString( rStr ), nPos );
return nPos;
}
void RemoveEntry( USHORT nPos )
{
mxListBox->removeItems( nPos, 1 );
}
USHORT RemoveEntry(const XubString& rStr, USHORT nPos)
{
if ( nPos == LISTBOX_APPEND )
nPos = mxListBox->getItemCount();
mxListBox->addItem( rtl::OUString( rStr ), nPos );
return nPos;
}
USHORT GetEntryPos( const XubString& rStr ) const
{
uno::Sequence< rtl::OUString> aItems( mxListBox->getItems() );
rtl::OUString rKey( rStr );
for ( unsigned int i = 0; aItems.getLength(); i++ )
{
if ( aItems[ i ] == rKey )
return sal::static_int_cast< USHORT >( i );
}
return LISTBOX_ENTRY_NOTFOUND;
}
XubString GetEntry( USHORT nPos ) const
{
return mxListBox->getItem( nPos );
}
USHORT GetEntryCount() const
{
return mxListBox->getItemCount();
}
void SelectEntryPos( USHORT nPos, BOOL bSelect )
{
mxListBox->selectItemPos( nPos, bSelect );
}
USHORT GetSelectEntryCount() const
{
return sal::static_int_cast< USHORT >( mxListBox->getSelectedItems().getLength() );
}
USHORT GetSelectEntryPos( USHORT nSelIndex ) const
{
USHORT nSelected = 0;
if ( mxListBox->isMutipleMode() )
{
uno::Sequence< short > aItems( mxListBox->getSelectedItemsPos() );
if ( nSelIndex < aItems.getLength() )
nSelected = aItems[ nSelIndex ];
}
else
nSelected = mxListBox->getSelectedItemPos();
return nSelected;
}
void SetClickHdl( const Link& rLink )
{
maClickHdl = rLink;
if ( !rLink )
mxListBox->removeActionListener( this );
else
mxListBox->addActionListener( this );
}
void SetSelectHdl( const Link& rLink )
{
maSelectHdl = rLink;
if ( !rLink )
mxListBox->removeItemListener( this );
else
mxListBox->addItemListener( this );
}
virtual void SAL_CALL disposing( const css::lang::EventObject& /* Source */ )
throw (css::uno::RuntimeException)
{
mxListBox.clear();
}
void SAL_CALL actionPerformed( const css::awt::ActionEvent& /* rEvent */ )
throw (css::uno::RuntimeException)
{
maClickHdl.Call( mpWindow );
}
void SAL_CALL itemStateChanged( const css::awt::ItemEvent& /* rEvent */ )
throw (css::uno::RuntimeException)
{
ListBox* pListBox = static_cast<ListBox*>( mpWindow );
if ( !pListBox )
return;
maSelectHdl.Call( pListBox );
}
};
USHORT ListBox::InsertEntry(const XubString& rStr, USHORT nPos)
{
return getImpl().InsertEntry(rStr, nPos);
}
void ListBox::RemoveEntry( USHORT nPos )
{
return getImpl().RemoveEntry( nPos );
}
void ListBox::RemoveEntry( const XubString& rStr )
{
return getImpl().RemoveEntry( GetEntryPos( rStr ) );
}
void ListBox::Clear()
{
uno::Sequence< rtl::OUString> aNoItems;
getImpl().setProperty( "StringItemList", uno::Any( aNoItems ) );
}
USHORT ListBox::GetEntryPos( const XubString& rStr ) const
{
return getImpl().GetEntryPos( rStr );
}
XubString ListBox::GetEntry( USHORT nPos ) const
{
return getImpl().GetEntry( nPos );
}
USHORT ListBox::GetEntryCount() const
{
return getImpl().GetEntryCount();
}
void ListBox::SelectEntryPos( USHORT nPos, BOOL bSelect )
{
getImpl().SelectEntryPos( nPos, bSelect );
}
void ListBox::SelectEntry( const XubString& rStr, BOOL bSelect )
{
SelectEntryPos( GetEntryPos( rStr ), bSelect );
}
USHORT ListBox::GetSelectEntryCount() const
{
return getImpl().GetSelectEntryCount();
}
USHORT ListBox::GetSelectEntryPos( USHORT nSelIndex ) const
{
return getImpl().GetSelectEntryPos( nSelIndex );
}
XubString ListBox::GetSelectEntry( USHORT nSelIndex ) const
{
return GetEntry( GetSelectEntryPos( nSelIndex ) );
}
void ListBox::SetSelectHdl( const Link& rLink )
{
getImpl().SetSelectHdl( rLink );
}
void ListBox::SetClickHdl( const Link& rLink )
{
getImpl().SetClickHdl( rLink );
}
DECL_CONSTRUCTOR_IMPLS( ListBox, Control, "listbox" );
DECL_GET_IMPL_IMPL( ListBox );
} // namespace layout

View File

@@ -1,569 +0,0 @@
/*************************************************************************
*
* 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: wrapper.cxx,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.
*
************************************************************************/
#include "wrapper.hxx"
#include <com/sun/star/graphic/XGraphic.hpp>
#include <com/sun/star/awt/XFixedText.hpp>
#include <com/sun/star/awt/XDialog2.hpp>
#include <com/sun/star/awt/XProgressBar.hpp>
#include <com/sun/star/awt/WindowAttribute.hpp>
#include <com/sun/star/awt/VclWindowPeerAttribute.hpp>
#include <comphelper/processfactory.hxx>
#include <vcl/window.hxx>
#include <toolkit/awt/vclxwindow.hxx>
#include <layout/layoutcore.hxx>
#include <layout/factory.hxx>
#include <layout/root.hxx>
#include <vcl/image.hxx>
using namespace ::com::sun::star;
namespace layout
{
// Context bits ...
class ContextImpl
{
uno::Reference< awt::XLayoutRoot > mxRoot;
uno::Reference< container::XNameAccess > mxNameAccess;
PeerHandle mxTopLevel;
public:
ContextImpl( char const *pPath )
{
uno::Sequence< uno::Any > aParams( 1 );
aParams[0] <<= rtl::OUString( pPath, strlen( pPath ), RTL_TEXTENCODING_UTF8 );
uno::Reference< lang::XSingleServiceFactory > xFactory(
comphelper::createProcessComponent(
rtl::OUString::createFromAscii( "com.sun.star.awt.Layout" ) ),
uno::UNO_QUERY );
if ( !xFactory.is() )
{
throw uno::RuntimeException(
rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Layout engine not installed" ) ),
uno::Reference< uno::XInterface >() );
}
mxRoot = uno::Reference< awt::XLayoutRoot >(
xFactory->createInstanceWithArguments( aParams ),
uno::UNO_QUERY );
mxNameAccess = uno::Reference< container::XNameAccess >( mxRoot, uno::UNO_QUERY );
}
~ContextImpl()
{
}
PeerHandle getByName( const rtl::OUString &rName )
{
uno::Any val = mxNameAccess->getByName( rName );
PeerHandle xRet;
val >>= xRet;
return xRet;
}
PeerHandle getTopLevel() { return mxTopLevel; }
void setTopLevel( PeerHandle xToplevel ) { mxTopLevel = xToplevel; }
PeerHandle getRoot() { return mxRoot; }
};
Context::Context( const char *pPath )
: pImpl( new ContextImpl( pPath ) )
{
}
Context::~Context()
{
delete pImpl;
pImpl = NULL;
}
void Context::setToplevel( PeerHandle xToplevel )
{
pImpl->setTopLevel( xToplevel );
}
PeerHandle Context::getToplevel()
{
return pImpl->getTopLevel();
}
PeerHandle Context::getRoot()
{
return pImpl->getRoot();
}
PeerHandle Context::GetPeerHandle( const char *pId, sal_uInt32 nId ) const
{
PeerHandle xHandle;
xHandle = pImpl->getByName( rtl::OUString( pId, strlen( pId ), RTL_TEXTENCODING_UTF8 ) );
if ( !xHandle.is() )
{
DBG_ERROR1( "Failed to fetch widget '%s'", pId );
}
if ( nId != 0 )
{
rtl::OString aStr = rtl::OString::valueOf( (sal_Int32) nId );
xHandle = GetPeerHandle( aStr, 0 );
}
return xHandle;
}
// Window/Dialog
class DialogImpl : public WindowImpl
{
public:
uno::Reference< awt::XDialog2 > mxDialog;
DialogImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
: WindowImpl( pCtx, xPeer, pWindow )
, mxDialog( xPeer, uno::UNO_QUERY )
{
}
};
// Accessors
DECL_GET_IMPL_IMPL( Control )
DECL_GET_IMPL_IMPL( Dialog )
Window::Window( WindowImpl *pImpl )
: mpImpl( pImpl )
{
}
Window::~Window()
{
/* likely to be an UNO object - with floating references */
mpImpl->wrapperGone();
mpImpl = NULL;
}
Context *Window::getContext()
{
return this && mpImpl ? mpImpl->mpCtx : NULL;
}
PeerHandle Window::GetPeer()
{
if (!mpImpl)
return PeerHandle();
return mpImpl->mxWindow;
}
struct ToolkitVclPropsMap
{
WinBits vclStyle;
long initAttr;
const char *propName;
// the value to give the prop to enable/disable it -- not the most brilliant
// type declaration and storage, but does the work... properties are
// either a boolean or a short since they are either a directly wrappers for
// a WinBit, or aggregates related (like Align for WB_LEFT, _RIGHT and _CENTER).
bool isBoolean;
short enableProp, disableProp;
};
#define TYPE_BOOL true
#define TYPE_SHORT false
#define NOTYPE 0
static const ToolkitVclPropsMap toolkitVclPropsMap[] =
{
{ WB_BORDER, awt::WindowAttribute::BORDER, "Border", TYPE_SHORT, 1, 0 },
{ WB_NOBORDER, awt::VclWindowPeerAttribute::NOBORDER, "Border", TYPE_SHORT, 0, 1 },
{ WB_SIZEABLE, awt::WindowAttribute::SIZEABLE, NULL, NOTYPE, 0, 0 },
{ WB_MOVEABLE, awt::WindowAttribute::MOVEABLE, NULL, NOTYPE, 0, 0 },
{ WB_CLOSEABLE, awt::WindowAttribute::CLOSEABLE, NULL, NOTYPE, 0, 0 },
{ WB_HSCROLL, awt::VclWindowPeerAttribute::HSCROLL, NULL, NOTYPE, 0, 0 },
{ WB_VSCROLL, awt::VclWindowPeerAttribute::VSCROLL, NULL, NOTYPE, 0, 0 },
{ WB_LEFT, awt::VclWindowPeerAttribute::LEFT, "Align", TYPE_SHORT, 0, 0 },
{ WB_CENTER, awt::VclWindowPeerAttribute::CENTER, "Align", TYPE_SHORT, 1, 0 },
{ WB_RIGHT, awt::VclWindowPeerAttribute::RIGHT, "Align", TYPE_SHORT, 2, 0 },
{ WB_SPIN, awt::VclWindowPeerAttribute::SPIN, NULL, NOTYPE, 0, 0 },
{ WB_SORT, awt::VclWindowPeerAttribute::SORT, NULL, NOTYPE, 0, 0 },
{ WB_DROPDOWN, awt::VclWindowPeerAttribute::DROPDOWN, "Dropdown", TYPE_BOOL, 1, 0 },
{ WB_DEFBUTTON, awt::VclWindowPeerAttribute::DEFBUTTON, "DefaultButton", TYPE_BOOL, 1, 0 },
{ WB_READONLY, awt::VclWindowPeerAttribute::READONLY, NULL, NOTYPE, 0, 0 },
{ WB_CLIPCHILDREN, awt::VclWindowPeerAttribute::CLIPCHILDREN, NULL, NOTYPE, 0, 0 },
{ WB_GROUP, awt::VclWindowPeerAttribute::GROUP, NULL, NOTYPE, 0, 0 },
{ WB_OK, awt::VclWindowPeerAttribute::OK, NULL, NOTYPE, 0, 0 },
{ WB_OK_CANCEL, awt::VclWindowPeerAttribute::OK_CANCEL, NULL, NOTYPE, 0, 0 },
{ WB_YES_NO, awt::VclWindowPeerAttribute::YES_NO, NULL, NOTYPE, 0, 0 },
{ WB_YES_NO_CANCEL, awt::VclWindowPeerAttribute::YES_NO_CANCEL, NULL, NOTYPE, 1, 0 },
{ WB_RETRY_CANCEL, awt::VclWindowPeerAttribute::RETRY_CANCEL, NULL, NOTYPE, 1, 0 },
{ WB_DEF_OK, awt::VclWindowPeerAttribute::DEF_OK, NULL, NOTYPE, 0, 0 },
{ WB_DEF_CANCEL, awt::VclWindowPeerAttribute::DEF_CANCEL, NULL, NOTYPE, 1, 0 },
{ WB_DEF_RETRY, awt::VclWindowPeerAttribute::DEF_RETRY, NULL, NOTYPE, 0, 0 },
{ WB_DEF_YES, awt::VclWindowPeerAttribute::DEF_YES, NULL, NOTYPE, 0, 0 },
{ WB_DEF_NO, awt::VclWindowPeerAttribute::DEF_NO, NULL, NOTYPE, 0, 0 },
{ WB_AUTOHSCROLL, awt::VclWindowPeerAttribute::AUTOHSCROLL, "AutoHScroll", TYPE_BOOL, 1, 0 },
{ WB_AUTOVSCROLL, awt::VclWindowPeerAttribute::AUTOVSCROLL, "AutoVScroll", TYPE_BOOL, 1, 0 },
{ WB_WORDBREAK, 0, "MultiLine", TYPE_BOOL, 1, 0 },
{ WB_NOPOINTERFOCUS, 0, "FocusOnClick", TYPE_BOOL, 1, 0 },
{ WB_TOGGLE, 0, "Toggle", TYPE_BOOL, 1, 0 },
{ WB_REPEAT, 0, "Repeat", TYPE_BOOL, 1, 0 },
{ WB_NOHIDESELECTION, 0, "HideInactiveSelection", TYPE_BOOL, 1, 0 },
};
#undef TYPE_BOOL
#undef TYPE_SHORT
#undef NOTYPE
static const int toolkitVclPropsMapLen =
sizeof( toolkitVclPropsMap ) / sizeof( ToolkitVclPropsMap );
void Window::SetStyle( WinBits nStyle )
{
uno::Reference< awt::XVclWindowPeer > xPeer = mpImpl->mxVclPeer;
for ( int i = 0; i < toolkitVclPropsMapLen; i++ )
{
if ( toolkitVclPropsMap[ i ].propName )
{
short nValue;
if ( nStyle & toolkitVclPropsMap[ i ].vclStyle )
nValue = toolkitVclPropsMap[ i ].enableProp;
else
nValue = toolkitVclPropsMap[ i ].disableProp;
uno::Any aValue;
if ( toolkitVclPropsMap[ i ].isBoolean )
aValue = uno::makeAny( (bool) nValue );
else
aValue = uno::makeAny( (short) nValue );
mpImpl->setProperty( toolkitVclPropsMap[ i ].propName, aValue );
}
}
}
WinBits Window::GetStyle()
{
uno::Reference< awt::XVclWindowPeer > xPeer = mpImpl->mxVclPeer;
WinBits ret = 0;
for ( int i = 0; i < toolkitVclPropsMapLen; i++ )
{
if ( toolkitVclPropsMap[ i ].propName )
{
short nValue = 0;
if ( toolkitVclPropsMap[ i ].isBoolean )
{
bool bValue = false;
mpImpl->getProperty( toolkitVclPropsMap[ i ].propName ) >>= bValue;
nValue = bValue ? 1 : 0;
}
else
mpImpl->getProperty( toolkitVclPropsMap[ i ].propName ) >>= nValue;
if ( nValue == toolkitVclPropsMap[ i ].enableProp )
ret |= toolkitVclPropsMap[i].vclStyle;
}
}
return ret;
}
/* Unpleasant way to get an xToolkit pointer ... */
uno::Reference< awt::XToolkit > getToolkit()
{
static uno::Reference< awt::XToolkit > xToolkit;
if (!xToolkit.is())
{
// Urgh ...
xToolkit = uno::Reference< awt::XToolkit >(
::comphelper::getProcessServiceFactory()->createInstance(
rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.Toolkit" ) ) ),
uno::UNO_QUERY );
if ( !xToolkit.is() )
throw uno::RuntimeException(
rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "failed to create toolkit!") ),
uno::Reference< uno::XInterface >() );
}
return xToolkit;
}
PeerHandle Window::CreatePeer( Window *pParent, WinBits nStyle, const char *pName)
{
long nWinAttrbs = 0;
for ( int i = 0; i < toolkitVclPropsMapLen; i++ )
if ( nStyle & toolkitVclPropsMap[ i ].vclStyle )
nWinAttrbs |= toolkitVclPropsMap[ i ].initAttr;
return layoutimpl::createWidget( getToolkit(), pParent->GetPeer(),
rtl::OUString::createFromAscii( pName ), nWinAttrbs );
}
void Window::Enable( bool bEnable )
{
if ( !getImpl().mxWindow.is() )
return;
getImpl().mxWindow->setEnable( bEnable );
}
void Window::Show( BOOL bVisible )
{
if ( !getImpl().mxWindow.is() )
return;
getImpl().mxWindow->setVisible( bVisible );
}
void Window::GrabFocus()
{
if ( !getImpl().mxWindow.is() )
return;
getImpl().mxWindow->setFocus();
}
Dialog::Dialog( Window *pParent, const char *pXMLPath, const char *pId, sal_uInt32 nId )
: Context( pXMLPath )
, Window( new DialogImpl( this, Context::GetPeerHandle( pId, nId ), this ) )
{
if ( pParent )
SetParent( pParent );
}
Dialog::Dialog( ::Window *pParent, const char *pXMLPath, const char *pId, sal_uInt32 nId )
: Context( pXMLPath )
, Window( new DialogImpl( this, Context::GetPeerHandle( pId, nId ), this ) )
{
if ( pParent )
SetParent( pParent );
}
void Dialog::SetParent( ::Window *pParent )
{
uno::Reference <awt::XWindow> ref( GetPeer(), uno::UNO_QUERY );
::Window *window = VCLXWindow::GetImplementation( ref )->GetWindow();
window->SetParent( pParent );
}
void Dialog::SetParent( Window *pParent )
{
uno::Reference <awt::XWindow> parentRef( pParent->GetPeer(), uno::UNO_QUERY );
::Window *parentWindow = VCLXWindow::GetImplementation( parentRef )->GetWindow();
SetParent( parentWindow );
}
short Dialog::Execute()
{
if ( !getImpl().mxDialog.is() )
return -1;
return getImpl().mxDialog->execute();
}
void Dialog::EndDialog( long nResult )
{
if ( !getImpl().mxDialog.is() )
return;
getImpl().mxDialog->endDialog( nResult );
}
void Dialog::SetText( const String& rStr )
{
if ( !getImpl().mxDialog.is() )
return;
getImpl().mxDialog->setTitle( rStr );
}
class FixedLineImpl : public ControlImpl
{
public:
FixedLineImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
: ControlImpl( pCtx, xPeer, pWindow )
{
}
};
DECL_CONSTRUCTOR_IMPLS( FixedLine, Control, "hfixedline" );
DECL_GET_IMPL_IMPL( FixedLine )
bool FixedLine::IsEnabled()
{
//FIXME
return true;
}
class FixedTextImpl : public ControlImpl
{
public:
uno::Reference< awt::XFixedText > mxFixedText;
FixedTextImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
: ControlImpl( pCtx, xPeer, pWindow )
, mxFixedText( xPeer, uno::UNO_QUERY )
{
}
virtual void SAL_CALL disposing( const css::lang::EventObject& /* Source */ )
throw (css::uno::RuntimeException)
{
mxFixedText.clear();
}
};
DECL_CONSTRUCTOR_IMPLS( FixedText, Control, "fixedtext" );
DECL_GET_IMPL_IMPL( FixedText )
void FixedText::SetText( const String& rStr )
{
if ( !getImpl().mxFixedText.is() )
return;
getImpl().mxFixedText->setText( rStr );
}
class FixedInfoImpl : public FixedTextImpl
{
public:
FixedInfoImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
: FixedTextImpl( pCtx, xPeer, pWindow )
{
}
};
DECL_CONSTRUCTOR_IMPLS( FixedInfo, FixedText, "fixedinfo" );
DECL_GET_IMPL_IMPL( FixedInfo );
class ProgressBarImpl : public ControlImpl
{
public:
uno::Reference< awt::XProgressBar > mxProgressBar;
ProgressBarImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
: ControlImpl( pCtx, xPeer, pWindow )
, mxProgressBar( xPeer, uno::UNO_QUERY )
{
}
virtual void SAL_CALL disposing( const css::lang::EventObject& /* Source */ )
throw (css::uno::RuntimeException)
{
mxProgressBar.clear();
}
};
class FixedImageImpl: public ControlImpl
{
public:
uno::Reference< graphic::XGraphic > mxGraphic;
FixedImageImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow)
// const char *pName )
: ControlImpl( pCtx, xPeer, pWindow )
//, mxGraphic( layoutimpl::loadGraphic( pName ) )
, mxGraphic( xPeer, uno::UNO_QUERY )
{
if ( !mxGraphic.is() )
{
DBG_ERROR( "ERROR: failed to load image: `%s'" /*, pName*/ );
}
#if 0
else
getImpl().mxGraphic->...();
#endif
}
};
DECL_CONSTRUCTOR_IMPLS( FixedImage, Control, "fixedimage" );
DECL_GET_IMPL_IMPL( FixedImage )
void FixedImage::setImage( ::Image const& i )
{
(void) i;
if ( !getImpl().mxGraphic.is() )
return;
//FIXME: hack moved to proplist
//getImpl().mxGraphic =
}
#if 0
FixedImage::FixedImage( const char *pName )
: pImpl( new FixedImageImpl( pName ) )
{
}
FixedImage::~FixedImage()
{
delete pImpl;
}
#endif
DECL_CONSTRUCTOR_IMPLS( ProgressBar, Control, "ProgressBar" );
#if 0
ProgressBar::ProgressBar( Context *pCtx, const char *pId, sal_uInt32 nId )
: Control( new ProgressBarImpl( pCtx, pCtx->GetPeerHandle( pId, nId ), this ) )
{
}
ProgressBar::ProgressBar( Window *pParent, WinBits nBits)
// : Control( new ProgressBarImpl( pParent->getContext(), Window::CreatePeer( pParent, nBits, "ProgressBar" ), this ) )
: Control( new ProgressBarImpl( pParent->getContext(), Window::CreatePeer( pParent, nBits, "progressbar" ), this ) )
{
}
#endif
DECL_GET_IMPL_IMPL( ProgressBar )
void ProgressBar::SetForegroundColor( css::util::Color color )
{
if ( !getImpl().mxProgressBar.is() )
return;
getImpl().mxProgressBar->setForegroundColor( color );
}
void ProgressBar::SetBackgroundColor( css::util::Color color )
{
if ( !getImpl().mxProgressBar.is() )
return;
getImpl().mxProgressBar->setBackgroundColor( color );
}
void ProgressBar::SetValue( sal_Int32 i )
{
if ( !getImpl().mxProgressBar.is() )
return;
getImpl().mxProgressBar->setValue( i );
}
void ProgressBar::SetRange( sal_Int32 min, sal_Int32 max )
{
if ( !getImpl().mxProgressBar.is() )
return;
getImpl().mxProgressBar->setRange( min, max );
}
sal_Int32 ProgressBar::GetValue()
{
if ( !getImpl().mxProgressBar.is() )
return 0;
return getImpl().mxProgressBar->getValue();
}
} // namespace layout

View File

@@ -1,136 +0,0 @@
/*************************************************************************
*
* 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: wrapper.hxx,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 WRAPPER_HXX
#define WRAPPER_HXX
#include <layout/layout.hxx>
#include <com/sun/star/uno/Reference.hxx>
#include <com/sun/star/awt/XWindow.hpp>
#include <com/sun/star/awt/XVclWindowPeer.hpp>
#include <cstring>
namespace css = com::sun::star;
namespace layout
{
class WindowImpl
{
public:
Window *mpWindow;
Context *mpCtx;
css::uno::Reference< css::awt::XWindow > mxWindow;
css::uno::Reference< css::awt::XVclWindowPeer > mxVclPeer;
WindowImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
: mpWindow ( pWindow )
, mpCtx ( pCtx )
, mxWindow ( xPeer, css::uno::UNO_QUERY )
, mxVclPeer( xPeer, css::uno::UNO_QUERY )
{
}
virtual ~WindowImpl()
{
}
void wrapperGone()
{
mpWindow = NULL;
mpCtx = NULL;
if ( mxWindow.is() )
{
css::uno::Reference< css::lang::XComponent > xComp( mxWindow, css::uno::UNO_QUERY );
mxWindow.clear();
if ( xComp.is() )
xComp->dispose();
}
}
css::uno::Any getProperty( const char *pName )
{
if ( !this || !mxVclPeer.is() )
return css::uno::Any();
return mxVclPeer->getProperty
( rtl::OUString( pName, strlen( pName ), RTL_TEXTENCODING_ASCII_US ) );
}
void setProperty( const char *pName, css::uno::Any aAny )
{
if ( !this || !mxVclPeer.is() )
return;
mxVclPeer->setProperty
( rtl::OUString( pName, strlen( pName ), RTL_TEXTENCODING_ASCII_US ), aAny );
}
};
class ControlImpl : public WindowImpl
{
public:
ControlImpl( Context *pCtx, const PeerHandle &xPeer, Window *pWindow )
: WindowImpl( pCtx, xPeer, pWindow ) {}
};
inline WindowImpl &Window::getImpl() const
{ return *(static_cast< WindowImpl * >( mpImpl )); }
// Helpers for defining boiler-plate constructors ...
// Could in-line in top-level but not with safe static_casts.
#define DECL_GET_IMPL_IMPL(t) \
inline t##Impl &t::getImpl() const \
{ \
return *(static_cast<t##Impl *>(mpImpl)); \
}
#define DECL_CONSTRUCTOR_IMPLS(t,par,unoName) \
t::t( Context *pCtx, const char *pId, sal_uInt32 nId ) \
: par( new t##Impl( pCtx, pCtx->GetPeerHandle( pId, nId ), this ) ) \
{ \
} \
t::t( Window *pParent, WinBits nBits) \
: par( new t##Impl( pParent->getContext(), Window::CreatePeer( pParent, nBits, unoName ), this ) ) \
{ \
}
#define DECL_CONSTRUCTOR_IMPLS_2(t,win_par,other_par,unoName) \
t::t( Context *pCtx, const char *pId, sal_uInt32 nId ) \
: win_par( new t##Impl( pCtx, pCtx->GetPeerHandle( pId, nId ), this ) ) \
, other_par( new other_par##Impl( Window::GetPeer() ) ) \
{ \
} \
t::t( Window *pParent, WinBits nBits ) \
: win_par( new t##Impl( pParent->getContext(), Window::CreatePeer( pParent, nBits, unoName ), this ) ) \
, other_par( new other_par##Impl( Window::GetPeer() ) ) \
{ \
}
} // namespace layout
#endif // WRAPPER_HXX

View File

@@ -9,11 +9,11 @@ class DlgLayoutBuilder(object):
def addWidget (self, elem):
x, y = int(elem.getAttr('x')), int(elem.getAttr('y'))
if self.rows.has_key(y):
self.rows[y][x] = elem
else:
self.rows[y] = {}
self.rows[y][x] = elem
self.rows[y] = self.rows.get (y, {})
while self.rows[y].has_key(x):
y += 1
self.rows[y] = self.rows.get (y, {})
self.rows[y][x] = elem
def build (self):
root = Element('vbox')
@@ -53,6 +53,8 @@ class Boxer(object):
newnode = Element(dlgnode.name)
newnode.clone(dlgnode)
if dlgnode.name == 'string':
return newnode
newnode.setAttr("xmlns", "http://openoffice.org/2007/layout")
newnode.setAttr("xmlns:cnt", "http://openoffice.org/2007/layout/container")
mx = DlgLayoutBuilder(newnode)

View File

@@ -127,7 +127,6 @@ def convert (file_name, options):
lexer.includeDirs = options.include_path
lexer.stopOnHeader = options.stopOnHeader
lexer.debugMacro = options.debug_macro
# lexer.debug = True
if options.debug_lexer:
lexer.debug = True
lexer.tokenize()
@@ -145,8 +144,8 @@ def convert (file_name, options):
if options.debug_parser:
parser.debug = True
root = parser.parse()
print root.dump()
return
s = root.dump()
return s
# Parse the tokens.
root = parser.parse()
@@ -174,13 +173,18 @@ def post_process (s):
"""Make output directly usable by layout module."""
s = re.sub ('(</?)([a-z]+)-([a-z]+)-([a-z]+)', r'\1\2\3\4', s)
s = re.sub ('(</?)([a-z]+)-([a-z]+)', r'\1\2\3', s)
s = re.sub ('(<(radiobutton|(fixed(info|text)))[^>]*) text=', r'\1 label=', s)
s = re.sub ('(<(checkbox|(cancel|help|ignore|ok|push|more|no|radio|reset|retry|yes)button|(fixed(info|text)))[^>]*) text=', r'\1 label=', s)
s = re.sub (' (height|width|x|y)="[0-9]*"', '', s)
s = re.sub (' (label|text|title)="', r' _\1="', s)
s = re.sub ('&([^m][^p]*[^;]*)', r'&amp;\1', s)
s = re.sub (' hide="(TRUE|true|1)"', ' show="false"', s)
s = s.replace ('<modaldialog', '<modaldialog sizeable="true"')
s = s.replace (' rid=', ' id=')
s = s.replace (' border="true"', ' has_border="true"')
s = s.replace (' def-button="true"', ' default="true"')
s = s.replace (' def-button="true"', ' defbutton="true"')
s = s.replace (' drop-down="', ' dropdown="')
s = s.replace (' tab-stop="', ' tabstop="')
return s
XML_HEADER = '''<?xml version="1.0" encoding="UTF-8"?>

View File

@@ -0,0 +1 @@
empty

View File

@@ -0,0 +1,62 @@
#*************************************************************************
#
# OpenOffice.org - a multi-platform office productivity suite
#
# $RCSfile$
#
# $Revision$
#
# last change: $Author$ $Date$
#
# The Contents of this file are made available subject to
# the terms of GNU Lesser General Public License Version 2.1.
#
#
# GNU Lesser General Public License Version 2.1
# =============================================
# Copyright 2005 by Sun Microsystems, Inc.
# 901 San Antonio Road, Palo Alto, CA 94303, USA
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License version 2.1, as published by the Free Software Foundation.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, 5th Floor, Boston,
# MA 02110-1301 USA
#
#*************************************************************************
PRJ=../..
PRJNAME=toolkit
TARGET=layout
.INCLUDE : settings.mk
.IF "$(ENABLE_LAYOUT)" == "TRUE"
all: ALLTAR
XML_FILES=\
message-box.xml\
tab-dialog.xml\
#
.INCLUDE : layout.mk
.ELSE # ENABLE_LAYOUT != TRUE
all .PHONY:
.ENDIF # ENABLE_LAYOUT != TRUE
.INCLUDE : target.mk
localize.sdf:
echo '#empty' | cat - > $@
rm -f *-$@

View File

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- This is a template. i18n translation is not performed in-place;
i18n translated xml files are generated from this template by
transex3/layout/tralay. !-->
<modaldialog xmlns="http://openoffice.org/2007/layout"
xmlns:cnt="http://openoffice.org/2007/layout/container"
id="message-box" _title="" optimumsize="true"
has_border="true" sizeable="true" moveable="true" closeable="true">
<vbox border="5" spacing="5">
<hbox border="5" spacing="20">
<align cnt:expand="false" cnt:fill="true">
<fixedimage id="FI_ERROR" cnt:expand="false" cnt:v-align="0.5" cnt:v-fill="0" graphic="res/commandimagelist/msgbox-error.png" />
</align>
<align cnt:expand="false" cnt:fill="true">
<fixedimage id="FI_INFO" cnt:expand="false" cnt:v-align="0.5" cnt:v-fill="0" graphic="res/commandimagelist/msgbox-info.png" />
</align>
<align cnt:expand="false" cnt:fill="true">
<fixedimage id="FI_QUERY" cnt:expand="false" cnt:v-align="0.5" cnt:v-fill="0" graphic="res/commandimagelist/msgbox-query.png" />
</align>
<align cnt:expand="false" cnt:fill="true">
<fixedimage id="FI_WARNING" cnt:expand="false" cnt:v-align="0.5" cnt:v-fill="0" graphic="res/commandimagelist/msgbox-warning.png" />
</align>
<align cnt:expand="false" cnt:fill="true">
<fixedtext id="FT_MESSAGE" _label="FT-LABEL" cnt:v-align="0.5" cnt:v-fill="0" />
</align>
<flow/>
</hbox>
<dialogbuttonhbox border="0" spacing="5">
<flow/>
<!-- deprecoted vcl/MsgBox compatibility !-->
<retrybutton id="BTN_RETRY" />
<ignorebutton id="BTN_IGNORE" />
<yesbutton id="BTN_YES"/>
<cancelbutton id="BTN_CANCEL"/>
<helpbutton id="BTN_HELP"/>
<nobutton id="BTN_NO" xlabel="~Alternate"/>
</dialogbuttonhbox>
</vbox>
</modaldialog>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<dialog xmlns="http://openoffice.org/2007/layout"
xmlns:cnt="http://openoffice.org/2007/layout/container"
_title="layout::TabDialog" optimumsize="true"
id="tab-dialog"
has_border="true" sizeable="true" moveable="true">
<vbox spacing="5" border="5">
<tabcontrol id="ID_TABCONTROL"/>
<dialogbuttonhbox border="5" spacing="5" cnt:expand="false">
<flow/>
<okbutton defbutton="true" id="BTN_OK" show="false"/>
<pushbutton id="BTN_USER" _label="&lt;User&gt;" show="false"/>
<cancelbutton id="BTN_CANCEL" show="false"/>
<helpbutton id="BTN_HELP" show="false"/>
<resetbutton id="BTN_RESET" show="false"/>
<pushbutton id="BTN_BASEFMT" _label="&lt;Base Format&gt;" show="false"/>
</dialogbuttonhbox>
</vbox>
</dialog>

View File

@@ -54,8 +54,8 @@ LIB1FILES= $(SLB)$/awt.lib \
$(SLB)$/tree.lib \
$(SLB)$/controls.lib \
$(SLB)$/helper.lib\
$(SLB)$/layoutcore.lib \
$(SLB)$/vclcompat.lib
$(SLB)$/layout-core.lib \
$(SLB)$/layout-vcl.lib
SHL1TARGET= tk$(DLLPOSTFIX)
SHL1IMPLIB= itk

View File

@@ -33,11 +33,8 @@
CDEFS += -DTOOLKIT_DLLIMPLEMENTATION
VISIBILITY_HIDDEN=TRUE
# FIXME: sprinkle some TOOLKIT_DLLPUBLIC
CFLAGS+=-I$(PRJ)/source
CFLAGS+=-I$(PRJ)/inc/layout
.IF "$(ENABLE_LAYOUT)" == "TRUE"
CFLAGS+=-DENABLE_LAYOUT=1 -DTEST_LAYOUT=1
.ELSE
CFLAGS+=-DENABLE_LAYOUT=0
CFLAGS+=-DTEST_LAYOUT=1
.ENDIF # ENABLE_LAYOUT == TRUE

4
toolkit/workben/layout/.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
/de
/en-US
/nl
/ja

View File

@@ -0,0 +1,43 @@
Testing workbench and editor for Layout engine.
* Configure using --enable-layout.
* [d]make all
* export OOO_INSTALL_PREFIX=$(pwd)/ooo-layout
* [d]make install DESTDIR=$OOO_INSTALL_PREFIX
* Compile test program in toolkit/workben/layout
cd toolkit/workben/layout && dmake all
* FIXME: New three layer install/rpath feature needs these workarounds
|
| test -d $OOO_INSTALL_PREFIX/openoffice.org3 && export OOO_PREFIX_BRAND=$OOO_INSTALL_PREFIX/openoffice.org3 || export OOO_PREFIX_BRAND=$OOO_INSTALL_PREFIX
| cp -f ../..$INPATH/lib/libtkx.so $OOO_PREFIX/openoffice.org/basis3.0/program
| export LD_LIBRARY_PATH=$OOO_PREFIX_BRAND/basis-link/program:$OOO_PREFIX_BRAND/basis-link/ure-link/lib
|
| (see source/layout/helper.cxx)
* Run it on any .xml file
../../$INPATH/bin/test [--inst $OOO_INSTALL_PREFIX] zoom.xml
* Run it for specific dialogs, see test.cxx
../../$INPATH/bin/test [--inst $OOO_INSTALL_PREFIX] --test zoom
../../$INPATH/bin/test [--inst $OOO_INSTALL_PREFIX] --test wordcount
* Or source refresh in workben/layout, do something like
cd toolkit/workben/layout && . ./refresh [--inst $OOO_INSTALL_PREFIX]
Integration into OOo:
* After instaling, run
cd ooo-cvs/program
./soffice.bin
Start a [Writer] document and choose View/Zoom or Extra/Word count.

11
toolkit/workben/layout/TEST Executable file
View File

@@ -0,0 +1,11 @@
#! /bin/sh
for d in $(cd ../../../../.. && pwd)/ooo-svn /usr/lib/ooo3/; do
if test -d $d; then
export OOO_INSTALL_PREFIX=$d
break
fi
done
export SAL_ALLOW_LINKOO_SYMLINKS=1
test -d $OOO_INSTALL_PREFIX/openoffice.org3 && export OOO_PREFIX_BRAND=$OOO_INSTALL_PREFIX/openoffice.org3 || export OOO_PREFIX_BRAND=$OOO_INSTALL_PREFIX
export LD_LIBRARY_PATH="$OOO_PREFIX_BRAND/basis-link/program:$OOO_PREFIX_BRAND/basis-link/ure-link/lib"
../../unx*.pro/bin/test "$@"

View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- This is a template. i18n translation is not performed in-place;
i18n translated xml files are generated from this template by
transex3/layout/tralay. !-->
<dialog xmlns="http://openoffice.org/2007/layout"
xmlns:cnt="http://openoffice.org/2007/layout/container"
title="Align Test" optimumsize="true" has_border="true" sizeable="true" moveable="true">
<vbox spacing="5" border="5">
<fixedline/>
<hbox spacing="0" border="0">
<vbox spacing="5" border="5">
<fixedline _text="X" cnt:expand="false"/>
<pushbutton label="foo"/>
<pushbutton label="foo"/>
<pushbutton label="foo"/>
<pushbutton label="foo"/>
<pushbutton label="foo"/>
<pushbutton label="foo"/>
<pushbutton label="foo"/>
</vbox>
<vbox spacing="5" border="5">
<fixedline _text="X" cnt:expand="false"/>
<pushbutton label="bar"/>
</vbox>
</hbox>
<fixedline/>
<min-size cnt:spacing="0" min-width="200"/>
</vbox>
</dialog>

View File

@@ -4,6 +4,8 @@
xmlns:cnt="http://openoffice.org/2007/layout/container"
title="Box Test" optimumsize="true" has_border="true" sizeable="true" moveable="true">
<vbox>
<table>
<vbox>
<hbox cnt:expand="false" cnt:fill="false">
<pushbutton label="XML Left"
cnt:expand="false" cnt:fill="false"/>
@@ -28,5 +30,7 @@
<pushbutton label="XML Right"
cnt:expand="true" cnt:fill="true"/>
</hbox>
</vbox>
</table>
</vbox>
</dialog>

View File

@@ -32,43 +32,41 @@
#include "editor.hxx"
#undef NDEBUG
/*
#include <assert.h>
#include <stdio.h>
#include <string.h>
*/
#include <vector>
#include <cassert>
#include <cstdio>
#include <cstring>
#include <list>
#include <vector>
#include <com/sun/star/awt/WindowAttribute.hpp>
#include <com/sun/star/awt/XLayoutConstrains.hpp>
#include <com/sun/star/awt/XLayoutContainer.hpp>
#include <com/sun/star/awt/XToolkit.hpp>
#include <com/sun/star/awt/XVclWindowPeer.hpp>
#include <com/sun/star/awt/XWindow.hpp>
#include <com/sun/star/awt/XWindowPeer.hpp>
#include <rtl/strbuf.hxx>
#include <rtl/ustrbuf.hxx>
#include <toolkit/helper/property.hxx>
#include <vcl/lstbox.h>
using namespace layout::css;
using rtl::OUString;
#include <com/sun/star/awt/XWindow.hpp>
#include <com/sun/star/awt/XWindowPeer.hpp>
#include <com/sun/star/awt/XVclWindowPeer.hpp>
#include <com/sun/star/awt/XLayoutConstrains.hpp>
#include <com/sun/star/awt/XLayoutContainer.hpp>
#include <com/sun/star/awt/WindowAttribute.hpp>
#include <com/sun/star/awt/XToolkit.hpp>
#include <toolkit/helper/property.hxx>
#include <vcl/lstbox.h>
// FIXME:
//#define FILEDLG
// somewhat of a hack unfortunately ...
#include "layout/layoutcore.hxx"
#include "root.hxx"
#include "helper.hxx"
//** Utilities
#define OUSTRING_CSTR( str ) \
rtl::OUStringToOString( str, RTL_TEXTENCODING_ASCII_US ).getStr()
#include <layout/core/helper.hxx>
#include <layout/core/root.hxx>
#include <layout/core/helper.hxx>
// TODO: automatically generated
struct WidgetSpec {
@@ -94,19 +92,6 @@ static const WidgetSpec WIDGETS_SPECS[] = {
};
const int WIDGETS_SPECS_LEN = sizeof (WIDGETS_SPECS) / sizeof (WidgetSpec);
// TEMP: from helper
namespace layoutimpl {
typedef std::list< std::pair< rtl::OUString, rtl::OUString > > PropList;
css::uno::Reference< css::awt::XLayoutConstrains >
createWidget( css::uno::Reference< css::awt::XToolkit > xToolkit,
css::uno::Reference< css::uno::XInterface > xParent,
const rtl::OUString &rName, long nProps, bool bToplevel );
uno::Any anyFromString (const rtl::OUString &value, const uno::Type &type);
}
using namespace layout;
using namespace layoutimpl;
namespace css = ::com::sun::star;
@@ -136,9 +121,9 @@ static rtl::OUString anyToString (uno::Any value)
bool val = value.get<sal_Bool>();
return rtl::OUString( val ? "1" : "0", 1, RTL_TEXTENCODING_ASCII_US );
/* if ( val )
return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "true" ) );
else
return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "false" ) );*/
return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "true" ) );
else
return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "false" ) );*/
}
default:
break;
@@ -155,8 +140,9 @@ static inline double anyToDecimal (uno::Any value)
/* XLayoutContainer/XLayoutConstrains are a bit of a hasle to work with.
Let's wrap them. */
class Widget : public layoutimpl::LayoutWidget {
friend class EditorRoot;
class Widget : public layoutimpl::LayoutWidget
{
friend class EditorRoot;
Widget *mpParent;
std::vector< Widget *> maChildren;
@@ -173,7 +159,7 @@ public:
// to be used to wrap the root
Widget( uno::Reference< awt::XLayoutConstrains > xImport, const char *label )
: mpParent( 0 ), mbForeign( true )
: mpParent( 0 ), mbForeign( true )
{
mxWidget = xImport;
mxContainer = uno::Reference< awt::XLayoutContainer >( mxWidget, uno::UNO_QUERY );
@@ -197,17 +183,17 @@ public:
Widget( rtl::OUString id, uno::Reference< awt::XToolkit > xToolkit,
uno::Reference< awt::XLayoutContainer > xParent,
rtl::OUString unoName, long nAttrbs )
: mpParent( 0 ), mbForeign( false ), mrId( id ),
mnOriAttrbs( nAttrbs )
: mpParent( 0 ), mbForeign( false ), mrId( id ),
mnOriAttrbs( nAttrbs )
{
while ( xParent.is() && !uno::Reference< awt::XWindow >( xParent, uno::UNO_QUERY ).is() )
{
uno::Reference< awt::XLayoutContainer > xContainer( xParent, uno::UNO_QUERY );
assert( xContainer.is() );
xParent = uno::Reference< awt::XLayoutContainer >( xContainer->getParent(), uno::UNO_QUERY );
}
while ( xParent.is() && !uno::Reference< awt::XWindow >( xParent, uno::UNO_QUERY ).is() )
{
uno::Reference< awt::XLayoutContainer > xContainer( xParent, uno::UNO_QUERY );
assert( xContainer.is() );
xParent = uno::Reference< awt::XLayoutContainer >( xContainer->getParent(), uno::UNO_QUERY );
}
mxWidget = layoutimpl::createWidget( xToolkit, xParent, unoName, nAttrbs );
mxWidget = WidgetFactory::createWidget( xToolkit, xParent, unoName, nAttrbs );
assert( mxWidget.is() );
mxContainer = uno::Reference< awt::XLayoutContainer >( mxWidget, uno::UNO_QUERY );
@@ -225,14 +211,14 @@ public:
// TODO: disable editing of text fields, check boxes selected, etc...
#if 0
uno::Reference< awt::XVclWindowPeer> xVclPeer( mxWidget, uno::UNO_QUERY )
if ( xVclPeer.is() ) // XVclWindowPeer ignores missing / incorrect properties
if ( xVclPeer.is() ) // XVclWindowPeer ignores missing / incorrect properties
//FIXME: it looks odd on widgets like NumericField seeing text which is deleted
// when you interact with it... We can avoid it for those widgets, by doing a getProp
// of "Text" and check if it is empty or not.
xVclPeer->setProperty( rtl::OUString::createFromAscii( "Text" ),
uno::makeAny( rtl::OUString::createFromAscii( "new widget" ) ) );
xVclPeer->setProperty( rtl::OUString::createFromAscii( "Text" ),
uno::makeAny( rtl::OUString::createFromAscii( "new widget" ) ) );
#endif
// store original properties
@@ -365,9 +351,14 @@ public:
{
beans::Property prop = it.next();
rtl::OUString name( prop.Name );
rtl::OUString value( pChild->getProperty( name, CONTAINER_PROPERTY ) );
std::pair< rtl::OUString, rtl::OUString > pair( name, value );
pChild->maOriChildProps.push_back( pair );
try {
rtl::OUString value( pChild->getProperty( name, CONTAINER_PROPERTY ) );
std::pair< rtl::OUString, rtl::OUString > pair( name, value );
pChild->maOriChildProps.push_back( pair );
} catch ( beans::UnknownPropertyException &rEx ) {
fprintf (stderr, "ERROR: widget reports that it has a property it cannot return: '%s' this normally means that someone screwed up their PROPERTY_SET_INFO macro usage.\n",
rtl::OUStringToOString (rEx.Message, RTL_TEXTENCODING_UTF8).getStr());
}
}
}
@@ -402,7 +393,7 @@ public:
std::vector< Widget *> aChildChildren = pChild->maChildren;
for ( std::vector< Widget *>::const_iterator it = aChildChildren.begin();
it != aChildChildren.end(); it++ )
it != aChildChildren.end(); it++ )
pChild->removeChild( *it );
for ( std::vector< Widget *>::const_iterator it = aChildChildren.begin();
@@ -410,10 +401,10 @@ public:
if ( !addChild( *it ) )
{ // failure
for ( std::vector< Widget *>::const_iterator jt = aChildChildren.begin();
jt != it; jt++ )
jt != it; jt++ )
removeChild( *jt );
for ( std::vector< Widget *>::const_iterator jt = aChildChildren.begin();
jt != aChildChildren.end(); jt++ )
jt != aChildChildren.end(); jt++ )
pChild->addChild( *jt );
return false;
}
@@ -433,7 +424,7 @@ public:
{
int i = 0;
for ( std::vector< Widget *>::const_iterator it = maChildren.begin();
it != maChildren.end(); it++, i++ )
it != maChildren.end(); it++, i++ )
if ( *it == pChild )
break;
return i;
@@ -507,7 +498,7 @@ public:
case CONTAINER_PROPERTY:
if ( mpParent )
rValue = anyToString( layoutimpl::prophlp::getProperty(
mpParent->mxContainer->getChildProperties( mxWidget ), rPropName ) );
mpParent->mxContainer->getChildProperties( mxWidget ), rPropName ) );
break;
case WINBITS_PROPERTY:
// TODO
@@ -554,7 +545,7 @@ public:
int nPropIt;
PropertyIterator( Widget *pWidget, PropertyKind rKind )
: mrKind( rKind ), nPropIt( 0 )
: mrKind( rKind ), nPropIt( 0 )
{
switch ( rKind )
{
@@ -596,10 +587,10 @@ public:
beans::Property next()
{
/* rtl::OUString propName, propValue;
propName = maProps[ nPropIt ];
propValue = getProperty( propName, mrKind, false);
nPropIt++;
return std::pair< rtl::OUString, rtl::OUString > propPair( propName, propValue );*/
propName = maProps[ nPropIt ];
propValue = getProperty( propName, mrKind, false);
nPropIt++;
return std::pair< rtl::OUString, rtl::OUString > propPair( propName, propValue );*/
return maProps[ nPropIt++ ];
}
};
@@ -611,13 +602,13 @@ class EditorRoot : public layoutimpl::LayoutRoot {
public:
EditorRoot( const uno::Reference< lang::XMultiServiceFactory >& xFactory,
Widget *pParent )
: layoutimpl::LayoutRoot( xFactory ), mpParent( pParent )
: layoutimpl::LayoutRoot( xFactory ), mpParent( pParent )
{
}
// generation
virtual layoutimpl::LayoutWidget *create( rtl::OUString id, const rtl::OUString unoName,
long attrbs, uno::Reference< awt::XLayoutContainer > xParent )
long attrbs, uno::Reference< awt::XLayoutContainer > xParent )
{
if ( unoName.compareToAscii( "dialog" ) == 0 )
return mpParent;
@@ -637,126 +628,126 @@ public:
/* Working with the layout in 1D, as if it was a flat list. */
namespace FlatLayout
{
Widget *next( Widget *pWidget )
{
Widget *pNext;
pNext = pWidget->down();
if ( pNext ) return pNext;
pNext = pWidget->next();
if ( pNext ) return pNext;
for ( Widget *pUp = pWidget->up(); pUp != NULL; pUp = pUp->up() )
if ( (pNext = pUp->next()) != NULL )
return pNext;
return NULL;
}
Widget *next( Widget *pWidget )
{
Widget *pNext;
pNext = pWidget->down();
if ( pNext ) return pNext;
pNext = pWidget->next();
if ( pNext ) return pNext;
for ( Widget *pUp = pWidget->up(); pUp != NULL; pUp = pUp->up() )
if ( (pNext = pUp->next()) != NULL )
return pNext;
return NULL;
}
/*
Widget *prev( Widget *pWidget )
{
Widget *pPrev;
pPrev = pWidget->prev();
if ( !pPrev )
return pWidget->up();
Widget *prev( Widget *pWidget )
{
Widget *pPrev;
pPrev = pWidget->prev();
if ( !pPrev )
return pWidget->up();
Widget *pBottom = pPrev->down();
if ( pBottom )
{
while ( pBottom->down() || pBottom->next() )
{
for ( Widget *pNext = pBottom->next(); pNext; pNext = pNext->next() )
pBottom = pNext;
Widget *pDown = pBottom->down();
if ( pDown )
pBottom = pDown;
}
return pBottom;
}
return pPrev;
}
Widget *pBottom = pPrev->down();
if ( pBottom )
{
while ( pBottom->down() || pBottom->next() )
{
for ( Widget *pNext = pBottom->next(); pNext; pNext = pNext->next() )
pBottom = pNext;
Widget *pDown = pBottom->down();
if ( pDown )
pBottom = pDown;
}
return pBottom;
}
return pPrev;
}
*/
bool moveWidget( Widget *pWidget, bool up /*or down*/ )
bool moveWidget( Widget *pWidget, bool up /*or down*/ )
{
// Keep child parent&pos for in case of failure
Widget *pOriContainer = pWidget->up();
unsigned int oriChildPos = pOriContainer->getChildPos( pWidget );
// Get parent&sibling before removing it, since relations get cut
Widget *pSibling = up ? pWidget->prev() : pWidget->next();
Widget *pContainer = pWidget->up();
if ( !pContainer )
return false;
// try to swap with parent or child
// We need to allow for this at least for the root node...
if ( !pSibling )
{
// Keep child parent&pos for in case of failure
Widget *pOriContainer = pWidget->up();
unsigned int oriChildPos = pOriContainer->getChildPos( pWidget );
// Get parent&sibling before removing it, since relations get cut
Widget *pSibling = up ? pWidget->prev() : pWidget->next();
Widget *pContainer = pWidget->up();
if ( !pContainer )
return false;
// try to swap with parent or child
// We need to allow for this at least for the root node...
if ( !pSibling )
if ( up )
{
if ( up )
{
if ( pContainer->swapWithChild( pWidget ) )
return true;
}
else
{
// TODO: this is a nice feature, but we probably want to do it explicitely...
#if 0
if ( pWidget->down() && pWidget->swapWithChild( pWidget->down() ) )
return true;
#endif
}
}
pContainer->removeChild( pWidget );
// if has up sibling -- append to it, else swap with it
if ( pSibling )
{
if ( pSibling->addChild( pWidget, up ? 0xffff : 0 ) )
if ( pContainer->swapWithChild( pWidget ) )
return true;
unsigned int childPos = pContainer->getChildPos( pSibling );
if ( pContainer->addChild( pWidget, childPos + (up ? 0 : 1) ) )
return true; // should always be succesful
}
// go through parents -- try to get prepended to them
else
{
for ( ; pContainer && pContainer->up(); pContainer = pContainer->up() )
{
unsigned int childPos = pContainer->up()->getChildPos( pContainer );
if ( pContainer->up()->addChild( pWidget, childPos + (up ? 0 : 1) ) )
return true;
}
// TODO: this is a nice feature, but we probably want to do it explicitely...
#if 0
if ( pWidget->down() && pWidget->swapWithChild( pWidget->down() ) )
return true;
#endif
}
}
// failed -- try to get it to its old position
if ( !pOriContainer->addChild( pWidget, oriChildPos ) )
{
// a parent should never reject a child back. but if it ever
// happens, just kill it, we don't run an orphanate here ;P
delete pWidget;
pContainer->removeChild( pWidget );
// if has up sibling -- append to it, else swap with it
if ( pSibling )
{
if ( pSibling->addChild( pWidget, up ? 0xffff : 0 ) )
return true;
unsigned int childPos = pContainer->getChildPos( pSibling );
if ( pContainer->addChild( pWidget, childPos + (up ? 0 : 1) ) )
return true; // should always be succesful
}
// go through parents -- try to get prepended to them
else
{
for ( ; pContainer && pContainer->up(); pContainer = pContainer->up() )
{
unsigned int childPos = pContainer->up()->getChildPos( pContainer );
if ( pContainer->up()->addChild( pWidget, childPos + (up ? 0 : 1) ) )
return true;
}
return false;
}
// NOTE: root is considered to be number -1
Widget *get( Widget *pRoot, int nb )
// failed -- try to get it to its old position
if ( !pOriContainer->addChild( pWidget, oriChildPos ) )
{
Widget *it;
for ( it = pRoot; it != NULL && nb >= 0; it = next( it ) )
nb--;
return it;
// a parent should never reject a child back. but if it ever
// happens, just kill it, we don't run an orphanate here ;P
delete pWidget;
return true;
}
return false;
}
int get( Widget *pRoot, Widget *pWidget )
{
int nRet = -1;
Widget *it;
for ( it = pRoot; it != NULL && it != pWidget; it = next( it ) )
nRet++;
return nRet;
}
// NOTE: root is considered to be number -1
Widget *get( Widget *pRoot, int nb )
{
Widget *it;
for ( it = pRoot; it != NULL && nb >= 0; it = next( it ) )
nb--;
return it;
}
int get( Widget *pRoot, Widget *pWidget )
{
int nRet = -1;
Widget *it;
for ( it = pRoot; it != NULL && it != pWidget; it = next( it ) )
nRet++;
return nRet;
}
}
//** PropertiesList widget
@@ -774,7 +765,7 @@ class PropertiesList : public layout::Table
DECL_LINK( FlagToggledHdl, layout::CheckBox* );
AnyWidget( Widget *pWidget, rtl::OUString aPropName, Widget::PropertyKind aPropKind )
: mpWidget( pWidget ), maPropName( aPropName ), maPropKind( aPropKind )
: mpWidget( pWidget ), maPropName( aPropName ), maPropKind( aPropKind )
{
mpFlag = 0;
mbBlockFlagCallback = false;
@@ -852,7 +843,7 @@ class PropertiesList : public layout::Table
AnyEdit( Widget *pWidget, rtl::OUString aPropName,
Widget::PropertyKind aPropKind, layout::Window *pWinParent )
: AnyWidget( pWidget, aPropName, aPropKind ), layout::HBox( 0, false ), mpWinParent( pWinParent )
: AnyWidget( pWidget, aPropName, aPropKind ), layout::HBox( 0, false ), mpWinParent( pWinParent )
{
mpEdit = NULL;
mpExpand = new layout::PushButton( pWinParent, WB_TOGGLE );
@@ -880,7 +871,7 @@ class PropertiesList : public layout::Table
if ( mpEdit )
{
text = mpEdit->GetText();
printf("Remove mpEdit and expand\n");
printf("Remove mpEdit and expand\n");
Remove( mpEdit );
Remove( mpExpand );
delete mpEdit;
@@ -974,7 +965,7 @@ printf("Remove mpEdit and expand\n");
{
AnyInteger( Widget *pWidget, rtl::OUString aPropName,
Widget::PropertyKind aPropKind, Window *pWinParent )
: AnyWidget( pWidget, aPropName, aPropKind ), NumericField( pWinParent, WB_SPIN|WB_BORDER )
: AnyWidget( pWidget, aPropName, aPropKind ), NumericField( pWinParent, WB_SPIN|WB_BORDER )
{
load();
SetModifyHdl( LINK( this, AnyInteger, ApplyPropertyHdl ) );
@@ -1003,7 +994,7 @@ printf("Remove mpEdit and expand\n");
{
AnyFloat( Widget *pWidget, rtl::OUString aPropName,
Widget::PropertyKind aPropKind, Window *pWinParent )
: AnyInteger( pWidget, aPropName, aPropKind, pWinParent )
: AnyInteger( pWidget, aPropName, aPropKind, pWinParent )
{}
virtual void store()
@@ -1016,7 +1007,7 @@ printf("Remove mpEdit and expand\n");
{
AnyCheckBox( Widget *pWidget, rtl::OUString aPropName,
Widget::PropertyKind aPropKind, layout::Window *pWinParent )
: AnyWidget( pWidget, aPropName, aPropKind ), layout::CheckBox( pWinParent )
: AnyWidget( pWidget, aPropName, aPropKind ), layout::CheckBox( pWinParent )
{
// adding some whitespaces to make the hit area larger
// SetText( String::CreateFromAscii( "" ) );
@@ -1060,7 +1051,7 @@ printf("Remove mpEdit and expand\n");
{
AnyListBox( Widget *pWidget, rtl::OUString aPropName,
Widget::PropertyKind aPropKind, Window *pWinParent )
: AnyWidget( pWidget, aPropName, aPropKind ), layout::ListBox( pWinParent, WB_DROPDOWN )
: AnyWidget( pWidget, aPropName, aPropKind ), layout::ListBox( pWinParent, WB_DROPDOWN )
{
SetSelectHdl( LINK( this, AnyWidget, ApplyPropertyHdl ) );
}
@@ -1084,7 +1075,7 @@ printf("Remove mpEdit and expand\n");
{
AnyAlign( Widget *pWidget, rtl::OUString aPropName,
Widget::PropertyKind aPropKind, Window *pWinParent )
: AnyListBox( pWidget, aPropName, aPropKind, pWinParent )
: AnyListBox( pWidget, aPropName, aPropKind, pWinParent )
{
InsertEntry( XubString::CreateFromAscii( "Left" ) );
InsertEntry( XubString::CreateFromAscii( "Center" ) );
@@ -1100,7 +1091,7 @@ printf("Remove mpEdit and expand\n");
{
AnyComboBox( Widget *pWidget, rtl::OUString aPropName,
Widget::PropertyKind aPropKind, Window *pWinParent )
: AnyWidget( pWidget, aPropName, aPropKind ), layout::ComboBox( pWinParent, WB_DROPDOWN )
: AnyWidget( pWidget, aPropName, aPropKind ), layout::ComboBox( pWinParent, WB_DROPDOWN )
{
SetModifyHdl( LINK( this, AnyComboBox, ApplyPropertyHdl ) );
}
@@ -1124,7 +1115,7 @@ printf("Remove mpEdit and expand\n");
{
AnyFontStyle( Widget *pWidget, rtl::OUString aPropName,
Widget::PropertyKind aPropKind, Window *pWinParent )
: AnyComboBox( pWidget, aPropName, aPropKind, pWinParent )
: AnyComboBox( pWidget, aPropName, aPropKind, pWinParent )
{
InsertEntry( XubString::CreateFromAscii( "Bold" ) );
InsertEntry( XubString::CreateFromAscii( "Italic" ) );
@@ -1138,71 +1129,71 @@ printf("Remove mpEdit and expand\n");
layout::CheckBox *mpFlag;
AnyWidget *mpValue;
public:
PropertyEntry( layout::Window *pWinParent, AnyWidget *pAnyWidget )
public:
PropertyEntry( layout::Window *pWinParent, AnyWidget *pAnyWidget )
{
mpLabel = new layout::FixedText( pWinParent );
{
mpLabel = new layout::FixedText( pWinParent );
{
// append ':' to aPropName
rtl::OUStringBuffer buf( pAnyWidget->maPropName );
buf.append( sal_Unicode (':') );
mpLabel->SetText( buf.makeStringAndClear() );
}
mpValue = pAnyWidget;
mpFlag = new layout::CheckBox( pWinParent );
mpFlag->SetToggleHdl( LINK( mpValue, AnyWidget, FlagToggledHdl ) );
mpValue->mpFlag = mpFlag;
// append ':' to aPropName
rtl::OUStringBuffer buf( pAnyWidget->maPropName );
buf.append( sal_Unicode (':') );
mpLabel->SetText( buf.makeStringAndClear() );
}
mpValue = pAnyWidget;
mpFlag = new layout::CheckBox( pWinParent );
mpFlag->SetToggleHdl( LINK( mpValue, AnyWidget, FlagToggledHdl ) );
mpValue->mpFlag = mpFlag;
}
~PropertyEntry()
{
~PropertyEntry()
{
#if DEBUG_PRINT
fprintf(stderr, "REMOVING label, flag and value\n");
#endif
delete mpLabel;
delete mpFlag;
delete mpValue;
}
delete mpLabel;
delete mpFlag;
delete mpValue;
}
// Use this factory rather than the constructor -- check for NULL
static PropertyEntry *construct( Widget *pWidget, rtl::OUString aPropName,
Widget::PropertyKind aPropKind, sal_uInt16 nType,
layout::Window *pWinParent )
{
AnyWidget *pAnyWidget;
switch (nType) {
case uno::TypeClass_STRING:
if ( aPropName.compareToAscii( "FontStyleName" ) == 0 )
{
pAnyWidget = new AnyFontStyle( pWidget, aPropName, aPropKind, pWinParent );
break;
}
pAnyWidget = new AnyEdit( pWidget, aPropName, aPropKind, pWinParent );
// Use this factory rather than the constructor -- check for NULL
static PropertyEntry *construct( Widget *pWidget, rtl::OUString aPropName,
Widget::PropertyKind aPropKind, sal_uInt16 nType,
layout::Window *pWinParent )
{
AnyWidget *pAnyWidget;
switch (nType) {
case uno::TypeClass_STRING:
if ( aPropName.compareToAscii( "FontStyleName" ) == 0 )
{
pAnyWidget = new AnyFontStyle( pWidget, aPropName, aPropKind, pWinParent );
break;
case uno::TypeClass_SHORT:
if ( aPropName.compareToAscii( "Align" ) == 0 )
{
pAnyWidget = new AnyAlign( pWidget, aPropName, aPropKind, pWinParent );
break;
}
// otherwise, treat as any other number...
case uno::TypeClass_LONG:
case uno::TypeClass_UNSIGNED_LONG:
pAnyWidget = new AnyInteger( pWidget, aPropName, aPropKind, pWinParent );
}
pAnyWidget = new AnyEdit( pWidget, aPropName, aPropKind, pWinParent );
break;
case uno::TypeClass_SHORT:
if ( aPropName.compareToAscii( "Align" ) == 0 )
{
pAnyWidget = new AnyAlign( pWidget, aPropName, aPropKind, pWinParent );
break;
case uno::TypeClass_FLOAT:
case uno::TypeClass_DOUBLE:
pAnyWidget = new AnyFloat( pWidget, aPropName, aPropKind, pWinParent );
break;
case uno::TypeClass_BOOLEAN:
pAnyWidget = new AnyCheckBox( pWidget, aPropName, aPropKind, pWinParent );
break;
default:
return NULL;
}
return new PropertyEntry( pWinParent, pAnyWidget );
}
// otherwise, treat as any other number...
case uno::TypeClass_LONG:
case uno::TypeClass_UNSIGNED_LONG:
pAnyWidget = new AnyInteger( pWidget, aPropName, aPropKind, pWinParent );
break;
case uno::TypeClass_FLOAT:
case uno::TypeClass_DOUBLE:
pAnyWidget = new AnyFloat( pWidget, aPropName, aPropKind, pWinParent );
break;
case uno::TypeClass_BOOLEAN:
pAnyWidget = new AnyCheckBox( pWidget, aPropName, aPropKind, pWinParent );
break;
default:
return NULL;
}
};
return new PropertyEntry( pWinParent, pAnyWidget );
}
};
layout::Window *mpParentWindow;
@@ -1249,12 +1240,12 @@ printf("Remove mpEdit and expand\n");
return true;
} while ( min <= max );
return false;
}
}
public:
PropertiesList( layout::Dialog *dialog )
: layout::Table( dialog, "properties-box" )
, mpParentWindow( dialog ), mpSeparator( 0 )
: layout::Table( dialog, "properties-box" )
, mpParentWindow( dialog ), mpSeparator( 0 )
{
}
@@ -1318,7 +1309,7 @@ public:
Container::Clear();
for ( std::list< PropertyEntry* >::iterator it = maPropertiesList.begin();
it != maPropertiesList.end(); it++)
it != maPropertiesList.end(); it++)
delete *it;
maPropertiesList.clear();
@@ -1378,14 +1369,14 @@ IMPL_LINK( PropertiesList::PropertyEntry::AnyEdit, ExpandEditHdl, layout::PushBu
class SortListBox
{ // For a manual sort ListBox; asks for a ListBox and Up/Down/Remove
// buttons to wrap
DECL_LINK( ItemSelectedHdl, layout::ListBox* );
DECL_LINK( UpPressedHdl, layout::Button* );
DECL_LINK( DownPressedHdl, layout::Button* );
DECL_LINK( RemovePressedHdl, layout::Button* );
layout::PushButton *mpUpButton, *mpDownButton, *mpRemoveButton;
DECL_LINK( ItemSelectedHdl, layout::ListBox* );
DECL_LINK( UpPressedHdl, layout::Button* );
DECL_LINK( DownPressedHdl, layout::Button* );
DECL_LINK( RemovePressedHdl, layout::Button* );
layout::PushButton *mpUpButton, *mpDownButton, *mpRemoveButton;
protected:
layout::ListBox *mpListBox;
layout::ListBox *mpListBox;
virtual void upPressed( USHORT nPos )
{
@@ -1431,8 +1422,8 @@ layout::ListBox *mpListBox;
public:
SortListBox( layout::ListBox *pListBox, layout::PushButton *pUpButton, layout::PushButton *pDownButton,
layout::PushButton *pRemoveButton )
: mpUpButton( pUpButton), mpDownButton( pDownButton), mpRemoveButton( pRemoveButton ),
mpListBox( pListBox )
: mpUpButton( pUpButton), mpDownButton( pDownButton), mpRemoveButton( pRemoveButton ),
mpListBox( pListBox )
{
mpListBox->SetSelectHdl( LINK( this, SortListBox, ItemSelectedHdl ) );
@@ -1516,10 +1507,10 @@ public:
Widget *mpRootWidget;
LayoutTree( layout::Dialog *dialog )
: SortListBox( new layout::ListBox( dialog, "layout-tree" ),
new layout::PushButton( dialog, "layout-up-button" ),
new layout::PushButton( dialog, "layout-down-button" ),
new layout::PushButton( dialog, "layout-remove-button" ) )
: SortListBox( new layout::ListBox( dialog, "layout-tree" ),
new layout::PushButton( dialog, "layout-up-button" ),
new layout::PushButton( dialog, "layout-down-button" ),
new layout::PushButton( dialog, "layout-remove-button" ) )
{
layout::PeerHandle handle = dialog->GetPeerHandle( "preview-box" );
uno::Reference< awt::XLayoutConstrains > xWidget( handle, uno::UNO_QUERY );
@@ -1617,7 +1608,7 @@ public:
for ( int kind = 0; kind < 2; kind++ )
{
Widget::PropertyKind wKind = kind == 0 ? Widget::WINDOW_PROPERTY
: Widget::CONTAINER_PROPERTY;
: Widget::CONTAINER_PROPERTY;
Widget::PropertyIterator it( i, wKind );
while ( it.hasNext() )
{
@@ -1629,16 +1620,16 @@ public:
if ( prop.Type.getTypeClass() == uno::TypeClass_BOOLEAN )
{
if ( value.compareToAscii( "0" ) )
value = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("false") );
value = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("false") );
else
value = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("true") );
value = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("true") );
}
if ( value.getLength() > 0 )
printf("%s%s=\"%s\" ",
kind == 0 ? "" : "cnt:",
OUSTRING_CSTR( toXMLNaming( prop.Name ) ), OUSTRING_CSTR( value )
);
kind == 0 ? "" : "cnt:",
OUSTRING_CSTR( toXMLNaming( prop.Name ) ), OUSTRING_CSTR( value )
);
}
}
@@ -1719,7 +1710,7 @@ class EditorImpl : public LayoutTree::Listener
public:
EditorImpl( layout::Dialog *dialog,
// we should probable open this channel (or whatever its called) ourselves
// we should probable open this channel (or whatever its called) ourselves
uno::Reference< lang::XMultiServiceFactory > xMSF );
virtual ~EditorImpl();
@@ -1754,7 +1745,7 @@ EditorImpl::EditorImpl( layout::Dialog *dialog,
mpLayoutTree->setListener( this );
/* if ( xImport.is() )
mpLayoutTree->getWidget( -1 )->addChild( new Widget( xImport, "import" ) );*/
mpLayoutTree->getWidget( -1 )->addChild( new Widget( xImport, "import" ) );*/
// create buttons
layout::Container aWidgets( dialog, "create-widget" );
@@ -1797,7 +1788,7 @@ EditorImpl::~EditorImpl()
delete mpPropertiesList;
delete mpLayoutTree;
for ( std::list< layout::PushButton * >::const_iterator i = maCreateButtons.begin();
i != maCreateButtons.end(); i++)
i != maCreateButtons.end(); i++)
delete *i;
delete pImportButton;
delete pExportButton;
@@ -1808,14 +1799,14 @@ EditorImpl::~EditorImpl()
void EditorImpl::loadFile( const rtl::OUString &aTestFile )
{
fprintf( stderr, "TEST: layout instance\n" );
fprintf( stderr, "TEST: layout instance\n" );
uno::Reference< awt::XLayoutRoot > xRoot
( new EditorRoot( mxFactory, mpLayoutTree->mpRootWidget ) );
/*
mxMSF->createInstance
( ::rtl::OUString::createFromAscii( "com.sun.star.awt.Layout" ) ),
uno::UNO_QUERY );
mxMSF->createInstance
( ::rtl::OUString::createFromAscii( "com.sun.star.awt.Layout" ) ),
uno::UNO_QUERY );
*/
if ( !xRoot.is() )
{
@@ -1877,13 +1868,13 @@ void EditorImpl::widgetSelected( Widget *pWidget )
if ( !pWidget || pWidget->isContainer() )
{
for ( std::list< layout::PushButton *>::const_iterator it = maCreateButtons.begin();
it != maCreateButtons.end(); it++)
it != maCreateButtons.end(); it++)
(*it)->Enable();
}
else
{
for ( std::list< layout::PushButton *>::const_iterator it = maCreateButtons.begin();
it != maCreateButtons.end(); it++)
it != maCreateButtons.end(); it++)
(*it)->Disable();
}
@@ -1894,7 +1885,7 @@ IMPL_LINK( EditorImpl, CreateWidgetHdl, layout::Button *, pBtn )
{
int i = 0;
for ( std::list< layout::PushButton *>::const_iterator it = maCreateButtons.begin();
it != maCreateButtons.end(); it++, i++ )
it != maCreateButtons.end(); it++, i++ )
{
if ( pBtn == *it )
break;

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- This is a template. i18n translation is not performed in-place;
i18n translated xml files are generated from this template by
transex3/layout/tralay. !-->
<dialog xmlns="http://openoffice.org/2007/layout"
xmlns:cnt="http://openoffice.org/2007/layout/container"
title="Empty Test" optimumsize="true" has_border="true" sizeable="true" moveable="true">
<vbox spacing="1" border="10">
<min-size min-width="200"/>
<fixedline height="1"/>
<vbox spacing="10">
<vbox show="false"/>
<vbox show="false"/>
<vbox show="false"/>
<vbox show="false"/>
<vbox show="false"/>
<vbox show="false"/>
<vbox show="false"/>
<vbox show="false"/>
<vbox show="false"/>
<vbox show="false"/>
</vbox>
<fixedline height="1"/>
</vbox>
</dialog>

View File

@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- This is a template. i18n translation is not performed in-place;
i18n translated XML files are generated from this template by
transex3/layout/tralay. !-->
<modaldialog sizeable="true" closeable="true" moveable="true" output-size="true" id="RID_SCDLG_INSERT_TABLE" sv-look="true" _title="Insert Sheet" xmlns="http://openoffice.org/2007/layout" xmlns:cnt="http://openoffice.org/2007/layout/container">
<vbox spacing="5" border="5">
<fixedline id="FL_POSITION" _text="Position"/>
<hbox>
<vbox cnt:padding="13" spacing="5">
<radiobutton radiogroup="insert-sheet-position" id="RB_BEFORE" tabstop="true" _label="B~efore current sheet"/>
<radiobutton radiogroup="insert-sheet-position" id="RB_BEHIND" tabstop="true" _label="~After current sheet"/>
</vbox>
</hbox>
<fixedline id="FL_TABLE" _text="Sheet"/>
<hbox>
<vbox cnt:padding="13" spacing="5">
<radiobutton radiogroup="insert-sheet-source" id="RB_NEW" _label="~New sheet"/>
<hbox>
<vbox cnt:padding="13" spacing="5" cnt:fill="false" cnt:expand="false">
<fixedtext id="FT_COUNT" _label="N~o. of sheets"/>
<fixedtext id="FT_NAME" _label="Na~me"/>
</vbox>
<vbox>
<hbox>
<numericfield has_border="true" maximum="256" minimum="1" repeat="true" id="NF_COUNT" spin="true" spin-size="1" tabstop="true" value="1" cnt:fill="true" cnt:expand="false"/>
</hbox>
<edit has_border="true" id="ED_TABNAME" cnt:fill="true" cnt:expand="true"/>
</vbox>
</hbox>
</vbox>
</hbox>
<hbox>
<vbox cnt:padding="13" spacing="5">
<radiobutton radiogroup="insert-sheet-source" id="RB_FROMFILE" _label="~From file"/>
<hbox>
<vbox cnt:padding="13" spacing="5">
<hbox>
<multilistbox auto-hscroll="true" has_border="true" id="LB_TABLES" simple-mode="true" string-item-list=" : : : : " cnt:fill="true" cnt:expand="true"/>
<vbox cnt:fill="false" cnt:expand="false" spacing="5">
<pushbutton id="BTN_BROWSE" _label="~Browse..." cnt:expand="false"/>
<checkbox id="CB_LINK" _label="Lin~k" cnt:expand="false"/>
<flow/>
</vbox>
</hbox>
<fixedtext id="FT_PATH" label="FT-PATH"/>
</vbox>
</hbox>
</vbox>
</hbox>
<dialogbuttonhbox border="5" spacing="5">
<okbutton defbutton="true" id="BTN_OK"/>
<cancelbutton id="BTN_CANCEL"/>
<helpbutton id="BTN_HELP"/>
</dialogbuttonhbox>
</vbox>
</modaldialog>

View File

@@ -40,21 +40,18 @@ ENABLE_EXCEPTIONS=TRUE
.IF "$(ENABLE_LAYOUT)" == "TRUE"
CFLAGS += -I$(PRJ)/source/layout
# Allow zoom and wordcount to be built without depending on svx,sv,sfx2
CFLAGS += -I../$(PRJ)/svx/inc -I../$(PRJ)/svtools/inc -I../$(PRJ)/sfx2/inc
CFLAGS += -I../$(PRJ)/svx/inc -I../$(PRJ)/svtools/inc -I../$(PRJ)/sfx2/inc -I../$(PRJ)/sc/inc -I../$(PRJ)/sc/source/ui/inc -I../$(PRJ)/sw/inc
.INCLUDE : $(PRJ)$/util$/makefile.pmk
CFLAGS += -DENABLE_LAYOUT=1 -DTEST_LAYOUT=1
.IF "$(COMNAME)" == "gcc3"
CFLAGS+=-Wall -Wno-non-virtual-dtor
.ENDIF
CXXFILES=\
editor.cxx \
plugin.cxx \
recover.cxx \
wordcountdialog.cxx \
test.cxx \
@@ -62,8 +59,11 @@ CXXFILES=\
OBJFILES=\
$(OBJ)$/editor.obj \
$(OBJ)$/plugin.obj \
$(OBJ)$/recover.obj \
$(OBJ)$/test.obj \
$(OBJ)$/tpsort.obj \
$(OBJ)$/sortdlg.obj \
$(OBJ)$/wordcountdialog.obj \
$(OBJ)$/zoom.obj
@@ -77,28 +77,39 @@ APP1STDLIBS= \
$(CPPUHELPERLIB) \
$(SALLIB) \
$(XMLSCRIPTLIB) \
$(TKLIB)
$(TKLIB) \
$(SVXLIB) \
$(ISCLIB) \
#
svtools = $(INCCOM)/svtools
all: $(svtools) ALLTAR
default: ALLTAR
.INCLUDE : target.mk
.INCLUDE : target.mk
XML_FILES=\
insert-sheet.xml\
message-box.xml\
move-copy-sheet.xml\
recover.xml\
sort-options.xml\
string-input.xml\
tab-dialog.xml\
wordcount.xml\
zoom.xml\
TRALAY=$(AUGMENT_LIBRARY_PATH) tralay
XML_LANGS=$(alllangiso)
#ALL_XMLS=$(foreach,i,$(XML_LANGS) $(foreach,j,$(XML_FILES) $i/$j))
ALLTAR: $(foreach,i,$(XML_FILES) en-US/$i)
ALLTAR: localize.sdf $(BIN)/testrc $(svtools) $(foreach,i,$(XML_FILES) en-US/$i)
$(XML_LANGS:f:t"/%.xml ")/%.xml: %.xml
$(TRALAY) -m localize.sdf -o . -l $(XML_LANGS:f:t" -l ") $<
rm -rf en-US
$(BIN)/%: %.in
cp $< $@
$(svtools):
# FIXME: there's a bug in svtools layout or usage
# Include files are in svtools/inc, but are referenced as <svtools/..>
@@ -109,14 +120,35 @@ $(svtools):
ln -sf ..$/$(PRJ)$/svtools$/inc $(INCCOM)$/svtools
dist .PHONY :
cp -pv message-box.xml $(PRJ)/uiconfig/layout
cp -pv tab-dialog.xml $(PRJ)/uiconfig/layout
$(SHELL) ./un-test.sh zoom.cxx > ../$(PRJ)/svx/source/dialog/zoom.cxx
$(SHELL) ./un-test.sh zoom.hxx > ../$(PRJ)/svx/source/dialog/zoom.hxx
touch ../$(PRJ)/svx/source/dialog/dlgfact.cxx
cp -pv zoom.xml ../$(PRJ)/svx/uiconfig/layout
$(SHELL) ./un-test.sh wordcountdialog.cxx > ../$(PRJ)/sw/source/ui/dialog/wordcountdialog.cxx
$(SHELL) ./un-test.sh wordcountdialog.hxx > ../$(PRJ)/sw/source/ui/inc/wordcountdialog.hxx
touch ../$(PRJ)/sw/source/ui/dialog/swdlgfact.cxx
# FIXME: broken setup
cp -pv wordcount.xml ../$(PRJ)/sw/uiconfig/layout
# FIXME: broken setup
ln -sf ../inc/wordcountdialog.hxx ../$(PRJ)/sw/source/ui/dialog/wordcountdialog.hxx
$(SHELL) ./un-test.sh tpsort.cxx > ../$(PRJ)/sc/source/ui/dbgui/tpsort.cxx
$(SHELL) ./un-test.sh tpsort.hxx > ../$(PRJ)/sc/source/ui/inc/tpsort.hxx
$(SHELL) ./un-test.sh sortdlg.cxx > ../$(PRJ)/sc/source/ui/dbgui/sortdlg.cxx
$(SHELL) ./un-test.sh sortdlg.hxx > ../$(PRJ)/sc/source/ui/inc/sortdlg.hxx
touch ../$(PRJ)/sc/source/ui/attrdlg/scdlgfact.cxx
touch ../$(PRJ)/sc/source/ui/view/cellsh2.cxx
cp -pv insert-sheet.xml ../$(PRJ)/sc/uiconfig/layout
cp -pv move-copy-sheet.xml ../$(PRJ)/sc/uiconfig/layout
cp -pv sort-options.xml ../$(PRJ)/sc/uiconfig/layout
cp -pv string-input.xml ../$(PRJ)/sc/uiconfig/layout
localize.sdf: $(PRJ)/../svx/source/dialog/localize.sdf $(PRJ)/../sw/source/ui/dialog/localize.sdf $(PRJ)/../sc/source/ui/src/localize.sdf
grep sortdlg.src $(PRJ)/../sc/source/ui/src/localize.sdf | awk -F'\t' '{{printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "layout", "sc\\uiconfig\\layout\\sort-options.xml", $$3, "layout", $$6 "_label", "", "", $$8, "0", $$10, $$11, $$12, "", $$14, $$15}}' | sed -e 's/\(\(FL\|STR\)_[^\t]*\)_label/\1_text/' -e 's/\t_label/\tRID_SCDLG_SORT_title/' > sort-options-$@
grep wordcountdialog.src $(PRJ)/../sw/source/ui/dialog/localize.sdf | awk -F'\t' '{{printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "layout", "sw\\uiconfig\\layout\\wordcount.xml", $$3, "layout", $$6 "_label", "", "", $$8, "0", $$10, $$11, $$12, "", $$14, $$15}}' | sed -e 's/\(\(FL\|STR\)_[^\t]*\)_label/\1_text/' -e 's/\t_label/\tDLG_WORDCOUNT_title/' > wordcount-$@
grep zoom.src $(PRJ)/source/dialog/localize.sdf | awk -F'\t' '{{printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "layout", "svx\\uiconfig\\layout\\zoom.xml", $$3, "layout", $$6 "_label", "", "", $$8, "0", $$10, $$11, $$12, "", $$14, $$15}}' | sed -e 's/\(\(FL\|STR\)_[^\t]*\)_label/\1_text/' -e 's/\t_label/\tRID_SVXDLG_ZOOM_title/' > zoom-$@
echo '#empty' | cat - sort-options-$@ wordcount-$@ zoom-$@ > $@
rm -f *-$@
.ELSE # ENABLE_LAYOUT != TRUE
all .PHONY:

View File

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- This is a template. i18n translation is not performed in-place;
i18n translated xml files are generated from this template by
transex3/layout/tralay. !-->
<modaldialog xmlns="http://openoffice.org/2007/layout"
xmlns:cnt="http://openoffice.org/2007/layout/container"
id="message-box" _title="" optimumsize="true"
has_border="true" sizeable="true" moveable="true" closeable="true">
<vbox border="5" spacing="5">
<hbox border="5" spacing="20">
<align cnt:expand="false" cnt:fill="true">
<fixedimage id="FI_ERROR" cnt:expand="false" cnt:v-align="0.5" cnt:v-fill="0" graphic="res/commandimagelist/msgbox-error.png" />
</align>
<align cnt:expand="false" cnt:fill="true">
<fixedimage id="FI_INFO" cnt:expand="false" cnt:v-align="0.5" cnt:v-fill="0" graphic="res/commandimagelist/msgbox-info.png" />
</align>
<align cnt:expand="false" cnt:fill="true">
<fixedimage id="FI_QUERY" cnt:expand="false" cnt:v-align="0.5" cnt:v-fill="0" graphic="res/commandimagelist/msgbox-query.png" />
</align>
<align cnt:expand="false" cnt:fill="true">
<fixedimage id="FI_WARNING" cnt:expand="false" cnt:v-align="0.5" cnt:v-fill="0" graphic="res/commandimagelist/msgbox-warning.png" />
</align>
<align cnt:expand="false" cnt:fill="true">
<fixedtext id="FT_MESSAGE" _label="FT-LABEL" cnt:v-align="0.5" cnt:v-fill="0" />
</align>
<flow/>
</hbox>
<dialogbuttonhbox border="0" spacing="5">
<flow/>
<!-- deprecoted vcl/MsgBox compatibility !-->
<retrybutton id="BTN_RETRY" />
<ignorebutton id="BTN_IGNORE" />
<yesbutton id="BTN_YES"/>
<cancelbutton id="BTN_CANCEL"/>
<helpbutton id="BTN_HELP"/>
<nobutton id="BTN_NO" xlabel="~Alternate"/>
</dialogbuttonhbox>
</vbox>
</modaldialog>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- This is a template. i18n translation is not performed in-place;
i18n translated XML files are generated from this template by
transex3/layout/tralay. !-->
<modaldialog sizeable="true" closeable="true" help-id="FID_TAB_MOVE" moveable="true" output-size="true" id="RID_SCDLG_MOVETAB" sv-look="true" _title="Move/Copy Sheet" xmlns="http://openoffice.org/2007/layout" xmlns:cnt="http://openoffice.org/2007/layout/container">
<vbox spacing="5" border="5">
<string id="STR_NEWDOC" _text="- new document -"/>
<fixedtext id="FT_DEST" _label="To ~document"/>
<listbox has_border="true" dropdown="true" id="LB_DEST" tabstop="true"/>
<fixedtext id="FT_INSERT" _label="~Insert before"/>
<listbox has_border="true" id="LB_INSERT" tabstop="true" string-item-list=" : : : : " />
<checkbox id="BTN_COPY" tabstop="true" _label="~Copy"/>
<dialogbuttonhbox border="5" spacing="5">
<flow/>
<cancelbutton id="BTN_CANCEL" tabstop="true"/>
<helpbutton id="BTN_HELP" tabstop="true"/>
<okbutton defbutton="true" id="BTN_OK" tabstop="true"/>
</dialogbuttonhbox>
</vbox>
</modaldialog>

View File

@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- This is a template. i18n translation is not performed in-place;
i18n translated XML files are generated from this template by
transex3/layout/tralay. !-->
<tabpage help-id="HID_NUMBERFORMAT" show="false" id="RID_SVXPAGE_NUMBERFORMAT" _title="Number Format" _text="Number Format" xmlns="http://openoffice.org/2007/layout" xmlns:cnt="http://openoffice.org/2007/layout/container" sizeable="true">
<!--
<imagelist prefix="nu" id="IL_ICON">
<maskcolor blue="0xFFFF" green="0x0000" red="0xFFFF" type="Color"/>
<idlist none="IID_INFO"/>
<idcount none="3"/>
</imagelist>
<imagelist prefix="nuh" id="IL_ICON_HC">
<maskcolor blue="0xFFFF" green="0x0000" red="0xFFFF" type="Color"/>
<idlist none="IID_INFO"/>
<idcount none="3"/>
</imagelist>
!-->
<vbox spacing="5" border="5">
<string id="STR_EUROPE" _text="Europe"/>
<string id="STR_AUTO_ENTRY" _text="Automatic"/>
<hbox spacing="5">
<vbox spacing="5" cnt:fill="true" cnt:expand="true">
<fixedtext id="FT_CATEGORY" _label="~Category"/>
<listbox line-count="8" auto-hscroll="true" has_border="true" id="LB_CATEGORY" _string-item-list="All:User-defined:Number:Percent:Currency:Date:Time:Scientific:Fraction:Boolean Value:Text"/>
<flow/>
</vbox>
<vbox spacing="5" cnt:fill="true" cnt:expand="true">
<fixedtext id="FT_FORMAT" _label="F~ormat"/>
<listbox has_border="true" line-count="7" dropdown="true" id="LB_CURRENCY" tabstop="true" _string-item-list="Automatically" cnt:expand="false" cnt:fill="false"/>
<svxfontlistbox line-count="7" dropdown="false" has_border="true" help-id="HID_NUMBERFORMAT_LB_FORMAT" id="LB_FORMAT" tabstop="true" string-item-list=" : : : : : : : : : : : : : : : "/>
</vbox>
<vbox spacing="5" cnt:fill="true" cnt:expand="true">
<fixedtext id="FT_LANGUAGE" _label="~Language" cnt:expand="false" cnt:fill="false"/>
<svxlanguagebox has_border="true" dropdown="true" id="LB_LANGUAGE" sort="true" string-item-list="Dutch:" cnt:expand="false" cnt:fill="false"/>
<checkbox id="CB_SOURCEFORMAT" show="false" _label="So~urce format" cnt:expand="false" cnt:fill="false"/>
<flow cnt:expand="true" cnt:fill="true"/>
<window has_border="true" help-id="HID_NUMBERFORMAT_WND_NUMBER_PREVIEW" id="WND_NUMBER_PREVIEW" sv-look="true"/>
</vbox>
</hbox>
<fixedline id="FL_OPTIONS" _text="Options"/>
<hbox>
<vbox cnt:padding="13" spacing="5">
<hbox spacing="5">
<vbox spacing="5" cnt:fill="false" cnt:expand="false">
<fixedtext id="FT_DECIMALS" _label="~Decimal places"/>
<fixedtext id="FT_LEADZEROES" _label="Leading ~zeroes"/>
</vbox>
<vbox spacing="5" cnt:fill="false" cnt:expand="false">
<numericfield has_border="true" first="0" last="15" minimum="0" value="2" maximum="20" repeat="true" id="ED_DECIMALS" spin="true" spin-size="1" strict-format="true" cnt:expand="false"/>
<numericfield has_border="true" first="0" last="15" minimum="0" value="1" maximum="20" repeat="true" id="ED_LEADZEROES" spin="true" spin-size="1" strict-format="true" cnt:fill="false"/>
</vbox>
<vbox spacing="5" cnt:fill="false" cnt:expand="false">
<checkbox id="BTN_NEGRED" _label="~Negative numbers red"/>
<checkbox id="BTN_THOUSAND" _label="~Thousands separator"/>
</vbox>
</hbox>
</vbox>
</hbox>
<fixedtext id="FT_EDFORMAT" _label="~Format code"/>
<hbox spacing="5" cnt:expand="false">
<edit has_border="true" id="ED_FORMAT"/>
<imagebutton cnt:expand="false" cnt:fill="false" help-id="HID_NUMBERFORMAT_TBI_ADD" quick-help-text="Add" id="IB_ADD" sv-look="true" graphic="svx/res/nu01.png"/>
<imagebutton cnt:expand="false" help-id="HID_NUMBERFORMAT_TBI_INFO" quick-help-text="Edit Comment" id="IB_INFO" sv-look="true" graphic="svx/res/nu03.png"/>
<imagebutton cnt:expand="false" help-id="HID_NUMBERFORMAT_TBI_REMOVE" quick-help-text="Remove" id="IB_REMOVE" sv-look="true" graphic="svx/res/nu02.png"/>
</hbox>
<fixedtext no-label="true" show="false" id="FT_COMMENT" word-break="true" cnt:expand="false"/>
<edit has_border="true" show="false" id="ED_COMMENT" cnt:expand="false"/>
</vbox>
</tabpage>

View File

@@ -0,0 +1,73 @@
/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile$
*
* $Revision$
*
* last change: $Author$ $Date$
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
*
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2005 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
************************************************************************/
#define _LAYOUT_PLUGIN_CXX
#include "plugin.hxx"
#include <com/sun/star/awt/XDialog2.hpp>
#include <dialcontrol.hxx>
#include <toolkit/awt/vclxwindow.hxx>
#include <layout/layout-pre.hxx>
using namespace com::sun::star;
#define LAYOUT_RES(x) #x
#undef ModalDialog
#define ModalDialog( parent, id ) Dialog( parent, "plugin.xml", id )
PluginDialog::PluginDialog( Window* pParent )
: ModalDialog( pParent, LAYOUT_RES( RID_DLG_PLUGIN ) )
, aHeaderImage( this, LAYOUT_RES( FI_HEADER ) )
, aHeaderText( this, LAYOUT_RES( FT_HEADER ) )
, aHeaderLine( this, LAYOUT_RES( FL_HEADER ) )
, aPlugin( this, LAYOUT_RES( PL_DIAL ),
// FIXME: width=, height=, are not recognized as properties.
// new svx::DialControl( LAYOUT_DIALOG_PARENT, Size( 0, 0 ), 0 ) )
new svx::DialControl( LAYOUT_DIALOG_PARENT, Size( 80, 80 ), 0 ) )
//, aDialControl( static_cast<svx::DialControl&> ( aPlugin.GetPlugin() ) )
, aDialControl( static_cast<svx::DialControl&> ( *aPlugin.mpPlugin ) )
, aOKBtn( this, LAYOUT_RES( BTN_OK ) )
, aCancelBtn( this, LAYOUT_RES( BTN_CANCEL ) )
, aHelpBtn( this, LAYOUT_RES( BTN_HELP ) )
{
aDialControl.SetRotation( 425 );
}
PluginDialog::~PluginDialog()
{
}

View File

@@ -0,0 +1,65 @@
/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile$
*
* $Revision$
*
* last change: $Author$ $Date$
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
*
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2005 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
************************************************************************/
#ifndef _LAYOUT_PLUGIN_HXX
#define _LAYOUT_PLUGIN_HXX
#include <layout/layout.hxx>
#include <layout/layout-pre.hxx>
namespace svx {
class DialControl;
}
class PluginDialog : public ModalDialog
{
private:
FixedImage aHeaderImage;
FixedText aHeaderText;
FixedLine aHeaderLine;
Plugin aPlugin;
svx::DialControl& aDialControl;
OKButton aOKBtn;
CancelButton aCancelBtn;
HelpButton aHelpBtn;
public:
PluginDialog( Window* pParent );
~PluginDialog();
};
#include <layout/layout-post.hxx>
#endif /* _LAYOUT_PLUGIN_HXX */

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- This is a template. i18n translation is not performed in-place;
i18n translated xml files are generated from this template by
transex3/layout/tralay. !-->
<modaldialog xmlns="http://openoffice.org/2007/layout"
xmlns:cnt="http://openoffice.org/2007/layout/container"
id="RID_DLG_PLUGIN" _title="Plugin Test" optimumsize="true"
help-id="SID_ATTR_PLUGIN"
has_border="true" sizeable="true" moveable="true">
<vbox spacing="5" border="5">
<hbox spacing="5" cnt:expand="false">
<fixedimage id="FI_HEADER" cnt:expand="false" graphic="res/commandimagelist/sc_apply.png" />
<fixedtext id="FT_HEADER" _label="Plugin Test"/>
</hbox>
<fixedline id="FL_HEADER"/>
<hbox>
<flow cnt:padding="80"/>
<plugin id="PL_DIAL" width="80" height="80"/>
</hbox>
<dialogbuttonhbox border="5" spacing="5">
<flow/>
<okbutton defbutton="true" id="BTN_OK"/>
<cancelbutton id="BTN_CANCEL" />
<helpbutton id="BTN_HELP"/>
</dialogbuttonhbox>
</vbox>
</modaldialog>

View File

@@ -55,6 +55,13 @@ using namespace com::sun::star;
#include <layout/layout-pre.hxx>
#if ENABLE_LAYOUT
#undef SVX_RES
#define SVX_RES(x) #x
#undef SfxModalDialog
#define SfxModalDialog( parent, id ) Dialog( parent, "recover.xml", id )
#endif /* ENABLE_LAYOUT */
#if TEST_LAYOUT
SvxRecoverDialog::SvxRecoverDialog( Window* pParent )
#else /* !TEST_LAYOUT */

View File

@@ -35,7 +35,7 @@
#include <vcl/button.hxx>
#include <vcl/field.hxx>
#include <vcl/fixed.hxx>
#include <box.hxx>
#include <layout/core/box.hxx>
#include <layout/layout-pre.hxx>
class SvxRecoverDialog : public SfxModalDialog

View File

@@ -58,7 +58,7 @@ LINE TEST"/>
<checkbox id="CH_LOGFILE" _label="Open additional text document to display the restore logfile"/>
<dialogbuttonhbox border="5" spacing="5">
<flow/>
<okbutton id="BTN_OK" _label="Restore"/>
<okbutton defbutton="true" id="BTN_OK" _label="Restore"/>
<cancelbutton id="BTN_CANCEL" />
<helpbutton id="BTN_HELP"/>
</dialogbuttonhbox>

View File

@@ -1,3 +1,7 @@
echo "source me ..."
test -n "${INPATH}" && rm -Rf ../../${INPATH}
build debug=true && cp ../../${INPATH}/lib/*.so ../../../solver/680/${INPATH}/lib && dmake debug=true && ../../${INPATH}/bin/test "$@"
build debug=true\
&& cp ../../${INPATH}/lib/*.so ../../../solver/300/${INPATH}/lib \
&& cp -f ../..$INPATH/lib/libtkx.so $OOO_INSTALL_PREFIX/openoffice.org/basis3.0/program \
&& dmake debug=true \
&& ../../${INPATH}/bin/test "$@"

View File

@@ -37,12 +37,12 @@
// include ---------------------------------------------------------------
#include <stdio.h>
#include <cstdio>
#include <tools/shl.hxx>
#include <sfx2/objsh.hxx>
#include <vcl/msgbox.hxx>
#include <stdio.h>
#include <cstdio>
namespace SVX {
#include <svx/paraprev.hxx> // Preview

View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- This is a template. i18n translation is not performed in-place;
i18n translated XML files are generated from this template by
transex3/layout/tralay. !-->
<tabpage help-id="HID_SCPAGE_SORT_OPTIONS"
id="RID_SCPAGE_SORT_OPTIONS"
sv-look="true" xmlns="http://openoffice.org/2007/layout" xmlns:cnt="http://openoffice.org/2007/layout/container"
optimumsize="true"
sizeable="true" moveable="true">
<vbox spacing="4" border="5">
<string id="STR_COL_LABEL" _text="Range contains column la~bels"/>
<string id="STR_ROW_LABEL" _text="Range contains ~row labels"/>
<string id="SCSTR_UNDEFINED" _text="- undefined -"/>
<vbox spacing="4" border="5">
<checkbox id="BTN_CASESENSITIVE" tabstop="true" _label="Case ~sensitive"/>
<checkbox id="BTN_LABEL" tabstop="true"/>
<checkbox id="BTN_FORMATS" tabstop="true" _label="Include ~formats"/>
<checkbox id="BTN_NATURALSORT" tabstop="true" _label="Enable ~natural sort"/>
<checkbox id="BTN_COPYRESULT" tabstop="true" _label="~Copy sort results to:"/>
<hbox>
<listbox has_border="true" dropdown="true" id="LB_OUTAREA" tabstop="true"/>
<edit has_border="true" disable="true" id="ED_OUTAREA" tabstop="true"/>
</hbox>
<checkbox id="BTN_SORT_USER" tabstop="true" _label="Custom sort ~order"/>
<listbox has_border="true" disable="true" dropdown="true" id="LB_SORT_USER" tabstop="true"/>
<hbox>
<fixedtext id="FT_LANGUAGE" _label="~Language"/>
<fixedtext id="FT_ALGORITHM" _label="O~ptions"/>
</hbox>
<hbox>
<svxlanguagebox has_border="true" dropdown="true" id="LB_LANGUAGE" sort="true" tabstop="true" _string-item-list="Default"/>
<listbox has_border="true" dropdown="true" id="LB_ALGORITHM" tabstop="true"/>
</hbox>
<fixedline id="FL_DIRECTION" _text="Direction"/>
<radiobutton id="BTN_TOP_DOWN" radiogroup="sort-options" tabstop="true" _label="~Top to bottom (sort rows)"/>
<radiobutton id="BTN_LEFT_RIGHT" radiogroup="sort-options" tabstop="true" _label="L~eft to right (sort columns)"/>
</vbox>
</vbox>
</tabpage>

Some files were not shown because too many files have changed in this diff Show More