On Tuesday 01 October 2002 4:26 pm, Rob Lahaye wrote:
> Angus Leeming wrote:
> > Incidentally, you remember your request about removing the
> > text_warning area and instead setting the widget label to
> > red if the input is invalid?
> >
> > Well attached is a proper patch that does just this for
> > LyXGlueLengths and which I have implemented for the Space
> > Above field in the paragraph dialog.
> >
> > Perhaps you might like to try it out and incorporate it in
> > your mega patch if it does as you desire.
>
> Sure, YES! I'll happily add this to my patch here and extend
> its use into the other forms as well. I have two
> comments/questions.
>
> With your setup, a call in, f.ex. FormParagraph.C, is as follows:
> > +
> > + bc().addCheckedWidget(
> > + new CheckedGlueLength(dialog_->input_space_above,
> > + dialog_->choice_value_space_above,
> > + dialog_->choice_space_above));
>
> This is very specific for the Paragraph case, which has a
> choice, input and a unit-choice. However, generally a length +
> unit has not the last choice entry. For example see Width &
> Height input in the graphics dialog.
Which bit of this do you find confusing:
class CheckedGlueLength : public CheckedWidget {
public:
/** The label widget's label will be turned red if input and choice
do not make a valid LyXGlueLength.
label may be one of input or choice or may be something else.
It should not be 0!
*/
CheckedGlueLength(FL_OBJECT * input,
FL_OBJECT * choice,
FL_OBJECT * label);
?
But, sure, this is a sample piece of code. You may find this preferable:
CheckedGlueLength(FL_OBJECT * input,
FL_OBJECT * choice,
FL_OBJECT * label=input);
Ie, the default value for the third arg is the same as the first, so you can
get away with writing just two.
Or, indeed, this
CheckedGlueLength(FL_OBJECT * input,
FL_OBJECT * choice,
FL_OBJECT * label=0);
although that means you'd have to alter checked_widgets.C a little too.
> Another thing: if every call to "bc().addCheckedWidget()"
> requires a "new CheckedGlueLength()" call, I'd rather move the
> creation of the new class object into addCheckedWidget(), so
> we will only need to type:
>
> bc().addCheckedWidget(dialog_->input_space_above,
> dialog_->choice_value_space_above);
>
> Or would that violate a fundamental C++ rule?
>
> How about rename "addCheckedWidget()" into
> "addCheckGlueLength()"?
No, the ButtonController knows nothing about the widgets themselves.
It doesn't even know about the existence of a GUI.
However, you could easily add a helper function to checked_widgets.h:
class ButtonControllerBase;
void addCheckedGlueLength(ButtonControllerBase & bc,
FL_OBJECT * input,
FL_OBJECT * choice,
FL_OBJECT * label = input);
and in checked_widgets.C
#include "controllers/ButtonControllerBase.h"
void addCheckedGlueLength(ButtonControllerBase & bc,
FL_OBJECT * input,
FL_OBJECT * choice,
FL_OBJECT * label)
{
bc.addCheckedWidget(new CheckedGlueLength(input, choice, label);
}
used as
addCheckedGlueLength(bc(), dialog_->input, dialog_->choice);
> Regards,
> Rob.
> -----------------
> PS: how do you create a diff file from CVS with new files
> showing up in the diff file as:
>
> Index: src/frontends/xforms/checkedwidgets.h
> ==============================================================
>===== RCS file: src/frontends/xforms/checkedwidgets.h
> diff -N src/frontends/xforms/checkedwidgets.h
> --- /dev/null 1 Jan 1970 00:00:00 -0000
>
> When I do "cvs diff -Nu > cvs.diff", the file has in the top
> lines: ? src/frontends/xforms/checkedwidgets.C
> ? src/frontends/xforms/checkedwidgets.h
>
> Without the contents of the new files in the diff.
I have read access to cvs.lyx.org and so can
cvs add checkedwidgets.h
cvs diff > difffile
Ask Lars for an account and read access too.
Hope all this helps,
Angus