-*-outline-*-

* CWS
** 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
class Widget
*** root.hxx:
/*
  TODO: (ricardo) I think we should cut on LayoutRoot, stripping out its widget
  proxy interface (just make it return the root widget).

*** root.cxx:
LayoutWidget::~LayoutWidget()
{
    /* should we dispose of the references...? */
    // at least of its children... Or should root?
*** root.cxx:
LayoutRoot::~LayoutRoot()
{
// TODO: we want to delete the top level LayoutWidget...


* portability
** --enable-layout does not compile on Sun?
[SunStudio12 on Linux works...]

TODO: Try not including layout-pre.hxx twice, but use
layout-pre-header.hxx and layout-pre-source.hxx (both include an
un-multiple-inclusion-shielded layout-pre.hxx).

"/export/home/fstrba/devel-cvs/ooo-build/build/ooh680-m1/layout/workben/zoom.cxx", line 412: Error: layout is not a member of layout.
"/export/home/fstrba/devel-cvs/ooo-build/build/ooh680-m1/layout/workben/zoom.cxx", line 412: Error: Formal argument 1 of type layout::RadioButton* in call to SvxZoomDialog::UserHdl(layout::RadioButton*) is being passed RadioButton*.
"/export/home/fstrba/devel-cvs/ooo-build/build/ooh680-m1/layout/workben/zoom.cxx", line 431: Error: layout is not a member of layout.
"/export/home/fstrba/devel-cvs/ooo-build/build/ooh680-m1/layout/workben/zoom.cxx", line 431: Error: Formal argument 1 of type layout::MetricField* in call to SvxZoomDialog::SpinHdl(layout::MetricField*) is being passed MetricField*.
"/export/home/fstrba/devel-cvs/ooo-build/build/ooh680-m1/layout/workben/zoom.cxx", line 441: Error: layout is not a member of layout.
"/export/home/fstrba/devel-cvs/ooo-build/build/ooh680-m1/layout/workben/zoom.cxx", line 441: Error: Formal argument 1 of type layout::Button* in call to SvxZoomDialog::OKHdl(layout::Button*) is being passed Button*.
6 Error(s) detected.

    #412
    ( ( layout :: layout :: RadioButton * ) pCaller ) ; } long SvxZoomDialog :: UserHdl ( layout :: RadioButton * pBtn )
    {
    fprintf ( ( & __iob [ 2 ] ) , "SvxZoomDialog::UserHdl\n" ) ;
    bModified |= 1 ;
    if ( pBtn == & aUserBtn )
    {
    aUserEdit . Enable ( ) ;
    aUserEdit . GrabFocus ( ) ;
    }
    else
    aUserEdit . Disable ( ) ;
    return 0 ;
    }

** LayoutDialogs compilation errors on Windows
in VCL headers there, need to include more headers to also get stuff like HWND defined.

* code
** features
*** Symbols on MoreButton/AdvancedButton?

*** support more widgets (as necessary)
**** see toolkit/source/awt/vclxtoolkit.cxx and svtools/source/uno/unoiface.cxx
**** SubDialog
**** Pull-down menu
**** embed custom widget
**** embed old .src TAB
**** have a LAYOUT TAB be embedded in an old .src dialog
**** FileControl?
**** roadmap?
**** datefield?
**** patternfield?
**** patternbox?
**** dockingarea?
**** errorbox?
**** groupbox?
**** menubutton?
**** messbox?
**** simpleanimation?

*** support cnt:cnt:? 
*** support using label (verb) on yes/ok no/cancel buttons for some platforms
but keep using yes/no on Windows, eg?
*** remove -DTEST_LAYOUT=1 from util/makefile.mk?

** fixes
*** missing properties
	'title' -> 'Set Zoom'
Missing prop Title
Missing prop ValueStep
Missing prop Radiogroup
Missing prop Default
*** bug in wordcountdialog: right alignment of numbers `jump' when resizing
       the dialog.  the 0 and 00 are never exactly aligned.
*** look into code duplication: source/core/*.
*** Remove magic constants
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\|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
	- dump old wiki pointers into layout/doc for reference
    + share code with vcl/source/gdi/impimagetree.cxx
    + 'layout.zip'?
    + support multiple translatable attributes
    + ? rewrite tralay from scratch (in python, perl, c++?) ?


* distributing: [LayoutDialogs]
git diff 5db78fc5 layout scp2 > layout-dialogs-layout.diff
git diff 5db78fc5 |grep -v gitignore | grep 'git a'|grep -Ev 'a/(layout|scp2)/'|sed -e's@.*git a/@@' -e 's@/.*@@' | sort -u | tr '\n' ' '
git diff 5db78fc5 $(git diff 5db78fc5 |grep -v gitignore | grep 'git a'| grep -Ev 'a/(layout|scp2)/' | sed -e's@.*git a/@@' -e 's@/.*@@' | sort -u | tr '\n' ' ') > layout-dialogs.diff

Soo...

m237: fc105178

#git diff  offapi toolkit > layout-dialogs-offapi-toolkit.diff

git diff fc105178 layout | sed 's@^\([+-]\{3\}\) \(a\|b\)/@\1 @' > layout-dialogs-layout.diff
git diff fc105178 config_office scp2 | sed 's@^\([+-]\{3\}\) \(a\|b\)/@\1 @' > layout-dialogs-config_office-scp2.diff
git diff fc105178 svx sw | sed 's@^\([+-]\{3\}\) \(a\|b\)/@\1 @' > layout-dialogs-svx-sw.diff

m241: 5e9b2546
m241': b8e24264
m241'': 53ddc663
m1: fbde8234
m1': d1f42c99
m1'': 1a8dec5c
m1'''': c93389f7

* porting
** Zoom dialog
*** list of radio buttons indented: workben/zoom-indent.xml ?
** Word Count dialog
** Recover dialog (redesign)
** pivotfilter dialog (Kohei?)
** paragraph dialog


TODO


* play with / improve Ricardo's editor
** broken after new uno registration

   it barfs on
   
    void selectedWidget( Widget *pWidget )
    {
        clear();

   it looks like a window is deleted twice.

** this is not meant to be a production level tool, but still,
   it can be improved I think :-)

* improve Kohei's converter (poke him on IRC (afternoons) about this)

** current hack: workben/run-s2x

   . Imported into layout

	+ Kohei wrote the start of a nice script to convert ugly,
	  obsolete resource files to nice new XML files ;-)
		+ unfortunately it is buggy.
		+ see ooo-build/scratch/layout-src2xml/*
		+ we should move this into the git repo.
	+ bug to fix: case problems in XML
		+ XML produced has wrong case items, and names are
		  different to those we (and AWT) expects ->
		  de-stdlycapsise
		+ cf. layout/source/core/helper.cxx:
			toUnoNaming, anyFromString
			setProperties
			+ NB. we want to have nice 'clean' looking non-stdlycaps XML
		+ also toolkit/source/awt/vclxwindows.cxx /ImplGetPropertyIds/
		+ also toolkit/source/helper/property.cxx
	+ bug to fix: property name problems
		+ often the resource name strings (cf. legacy resource
		  compiler in rsc/) don't match the awt toolkit properties
		+ ie. need to map Label="foo" to Text="foo" (or whatever).

* OLD notes

+ Before OOoCon
    + editor polish
	+ cut / paste
	+ export xml
	+ "import .src"
	[ use native VCL menus ... ]
    + dialogs:
	+ porting 'Format' dialog.
	+ wrapper code - improving ...
    + XML fixes
	+ "load" command for shared fragments
    + slides:
	+ UNO object hierarchy for a given window ...

+ Later
    + dual-compile code under VCL & 'layout' and compare
      event ordering (eg.).
	+ test-tool
    + scrolled-pane impl.

