J�rgen S's "power user" patch

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@3395 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Angus Leeming 2002-01-16 16:34:03 +00:00
parent 9c58df4a88
commit fd84082699
7 changed files with 166 additions and 50 deletions

View File

@ -1,3 +1,20 @@
2002-01-15 Jürgen Spitzmüller <j.spitzmueller@gmx.de>
* xforms_helpers.C: modify getLengthFromWidgets to ignore the unit
choice if the input field contains a LyXGlueLength.
* FormParagraph.C: Allow to insert and display gluelengths in VSpace
* FormParagraph.C
* FormDocument.C
* FormTabular.C: Change input filter to allow inserting
gluelengths/lyxlength or numbers with unit choices.
* FormMinipage.C: Use getLengthFromWidgets instead of the code there,
which was more or less duplicated.
* FormGraphics.C: set default units, dependent on US/other paper.
2002-01-16 Angus Leeming <a.leeming@ic.ac.uk>
* Dialogs.C: no longer need to #include the Controller classes, as this

View File

@ -119,26 +119,6 @@ void FormDocument::build()
fl_set_input_return(paper_->input_head_sep, FL_RETURN_CHANGED);
fl_set_input_return(paper_->input_foot_skip, FL_RETURN_CHANGED);
// Set input filters on width and height to make them accept only
// unsigned numbers.
fl_set_input_filter(paper_->input_custom_width,
fl_unsigned_float_filter);
fl_set_input_filter(paper_->input_custom_height,
fl_unsigned_float_filter);
fl_set_input_filter(paper_->input_top_margin,
fl_unsigned_float_filter);
fl_set_input_filter(paper_->input_bottom_margin,
fl_unsigned_float_filter);
fl_set_input_filter(paper_->input_inner_margin,
fl_unsigned_float_filter);
fl_set_input_filter(paper_->input_outer_margin,
fl_unsigned_float_filter);
fl_set_input_filter(paper_->input_head_height,
fl_unsigned_float_filter);
fl_set_input_filter(paper_->input_head_sep,
fl_unsigned_float_filter);
fl_set_input_filter(paper_->input_foot_skip,
fl_unsigned_float_filter);
// Create the contents of the unit choices
// Don't include the "%" terms...
@ -210,10 +190,9 @@ void FormDocument::build()
fl_set_input_return(class_->input_doc_skip, FL_RETURN_CHANGED);
fl_set_input_return(class_->input_doc_spacing, FL_RETURN_CHANGED);
// Set input filters on doc skip to make it accept only
// Set input filters on doc spacing to make it accept only
// unsigned numbers.
fl_set_input_filter(class_->input_doc_skip,
fl_unsigned_float_filter);
fl_set_input_filter(class_->input_doc_spacing, fl_unsigned_float_filter);
bc().addReadOnly (class_->radio_doc_indent);
bc().addReadOnly (class_->radio_doc_skip);
@ -1223,12 +1202,58 @@ void FormDocument::checkReadOnly()
}
bool FormDocument::CheckDocumentInput(FL_OBJECT *, long)
bool FormDocument::CheckDocumentInput(FL_OBJECT * ob, long)
{
string str;
bool ok = true;
char const * input;
// this has to be all out of if/elseif because it has to deactivate
// the document buttons and so the whole stuff has to be tested again.
// disable OK/Apply if input is not valid
str = fl_get_input(class_->input_doc_skip);
ok = ok && (str.empty() || isValidLength(str) || isStrDbl(str));
str = fl_get_input(paper_->input_custom_width);
ok = ok && (str.empty() || isValidLength(str) || isStrDbl(str));
str = fl_get_input(paper_->input_custom_height);
ok = ok && (str.empty() || isValidLength(str) || isStrDbl(str));
str = fl_get_input(paper_->input_outer_margin);
ok = ok && (str.empty() || isValidLength(str) || isStrDbl(str));
str = fl_get_input(paper_->input_inner_margin);
ok = ok && (str.empty() || isValidLength(str) || isStrDbl(str));
str = fl_get_input(paper_->input_top_margin);
ok = ok && (str.empty() || isValidLength(str) || isStrDbl(str));
str = fl_get_input(paper_->input_bottom_margin);
ok = ok && (str.empty() || isValidLength(str) || isStrDbl(str));
str = fl_get_input(paper_->input_head_height);
ok = ok && (str.empty() || isValidLength(str) || isStrDbl(str));
str = fl_get_input(paper_->input_head_sep);
ok = ok && (str.empty() || isValidLength(str) || isStrDbl(str));
str = fl_get_input(paper_->input_foot_skip);
ok = ok && (str.empty() || isValidLength(str) || isStrDbl(str));
//display warning if input is not valid
if (ob == class_->input_doc_skip
|| ob == paper_->input_custom_width
|| ob == paper_->input_custom_height
|| ob == paper_->input_outer_margin
|| ob == paper_->input_inner_margin
|| ob == paper_->input_top_margin
|| ob == paper_->input_bottom_margin
|| ob == paper_->input_head_height
|| ob == paper_->input_head_sep
|| ob == paper_->input_foot_skip) {
if (!ok) {
fl_set_object_label(dialog_->text_warning,
_("Warning: Invalid Length (valid example: 10mm)"));
fl_show_object(dialog_->text_warning);
return false;
} else {
fl_hide_object(dialog_->text_warning);
return true;
}
}
// "Synchronize" the choice and the input field, so that it
// is impossible to commit senseless data.
input = fl_get_input (class_->input_doc_skip);

View File

@ -262,7 +262,13 @@ void FormGraphics::update()
fl_set_input(dialog_->input_width, number.c_str());
int pos = 1;
//use inch as default with US papersizes in lyxrc
if (lyxrc.default_papersize < 3)
pos = 2;
switch (igp.widthResize) {
case InsetGraphicsParams::CM:
pos = 1; break;
case InsetGraphicsParams::INCH:
pos = 2; break;
@ -284,7 +290,13 @@ void FormGraphics::update()
fl_set_input(dialog_->input_height, number.c_str());
pos = 1;
//use inch as default with US papersizes in lyxrc
if (lyxrc.default_papersize < 3)
pos = 2;
switch (igp.heightResize) {
case InsetGraphicsParams::CM:
pos = 1; break;
case InsetGraphicsParams::INCH:
pos = 2; break;

View File

@ -24,6 +24,7 @@
#include "support/lstrings.h"
#include "helper_funcs.h"
#include "debug.h"
#include "xforms_helpers.h"
typedef FormCB<ControlMinipage, FormDB<FD_form_minipage> > base_class;
@ -58,11 +59,9 @@ void FormMinipage::build()
void FormMinipage::apply()
{
string const units = fl_get_choice_text(dialog_->choice_width_units);
double const val = strToDbl(fl_get_input(dialog_->input_width));
controller().params().pageWidth =
tostr(val) + frontStrip(strip(subst(units,"%%","%")));
getLengthFromWidgets(dialog_->input_width,
dialog_->choice_width_units);
if (fl_get_button(dialog_->radio_top))
controller().params().pos = InsetMinipage::top;

View File

@ -123,8 +123,6 @@ void FormParagraph::build()
fl_set_input_return(dialog_->input_labelwidth, FL_RETURN_CHANGED);
fl_set_input_return(dialog_->input_linespacing, FL_RETURN_CHANGED);
fl_set_input_filter(dialog_->input_linespacing, fl_unsigned_float_filter);
fl_set_input_filter(dialog_->input_space_above, fl_float_filter);
fl_set_input_filter(dialog_->input_space_below, fl_float_filter);
// Create the contents of the unit choices
// Don't include the "%" terms...
@ -249,7 +247,7 @@ void FormParagraph::apply()
case 7:
string const length =
getLengthFromWidgets(dialog_->input_space_below,
dialog_->choice_value_space_below);
dialog_->choice_value_space_below);
space_bottom = VSpace(LyXGlueLength(length));
break;
}
@ -414,10 +412,15 @@ void FormParagraph::update()
bool const metric = lyxrc.default_papersize > 3;
string const default_unit = metric ? "cm" : "in";
string const length = par_->params().spaceTop().length().asString();
updateWidgetsFromLengthString(dialog_->input_space_above,
dialog_->choice_value_space_above,
length, default_unit);
break;
//check if there's a stretch or shrink factor
if (!isValidLength(length) && !isStrDbl(length))
fl_set_input(dialog_->input_space_above, length.c_str());
else {
updateWidgetsFromLengthString(dialog_->input_space_above,
dialog_->choice_value_space_above,
length, default_unit);
}
break;
}
}
@ -455,10 +458,15 @@ void FormParagraph::update()
string const default_unit = metric ? "cm" : "in";
string const length =
par_->params().spaceBottom().length().asString();
updateWidgetsFromLengthString(dialog_->input_space_below,
dialog_->choice_value_space_below,
length, default_unit);
break;
//check if there's a stretch or shrink factor
if (!isValidLength(length) && !isStrDbl(length))
fl_set_input(dialog_->input_space_below, length.c_str());
else {
updateWidgetsFromLengthString(dialog_->input_space_below,
dialog_->choice_value_space_below,
length, default_unit);
}
break;
}
}
@ -512,6 +520,33 @@ bool FormParagraph::input(FL_OBJECT * ob, long)
}
}
//
// warnings if input is senseless
//
string input = fl_get_input (dialog_->input_space_above);
bool invalid = false;
if (fl_get_choice(dialog_->choice_space_above)==7)
invalid = !input.empty() && !isValidGlueLength(input) && !isStrDbl(input);
input = fl_get_input (dialog_->input_space_below);
if (fl_get_choice(dialog_->choice_space_below)==7)
invalid = invalid
|| (!input.empty() && !isValidGlueLength(input) && !isStrDbl(input));
if (ob == dialog_->input_space_above || ob == dialog_->input_space_below) {
if (invalid) {
fl_set_object_label(dialog_->text_warning,
_("Warning: Invalid Length (valid example: 10mm)"));
fl_show_object(dialog_->text_warning);
return false;
} else {
fl_hide_object(dialog_->text_warning);
return true;
}
}
if (fl_get_choice (dialog_->choice_linespacing) == 5)
setEnabled (dialog_->input_linespacing, true);
else {

View File

@ -24,6 +24,7 @@
#include "insets/insettabular.h"
#include "buffer.h"
#include "xforms_helpers.h"
#include "lyxrc.h" // to set the default length values
#include "helper_funcs.h"
#include "input_validators.h"
#include "support/lstrings.h"
@ -220,7 +221,8 @@ void FormTabular::update()
setEnabled(cell_options_->radio_valign_center, true);
special = tabular->GetAlignSpecial(cell, LyXTabular::SET_SPECIAL_MULTI);
fl_set_input(cell_options_->input_special_multialign, special.c_str());
string const default_unit = "cm";
bool const metric = lyxrc.default_papersize > 3;
string const default_unit = metric ? "cm" : "in";
updateWidgetsFromLength(cell_options_->input_mcolumn_width,
cell_options_->choice_value_mcolumn_width,
pwidth, default_unit);
@ -305,7 +307,8 @@ void FormTabular::update()
setEnabled(column_options_->input_special_alignment, !isReadonly);
pwidth = tabular->GetColumnPWidth(cell);
string const default_unit = "cm";
bool const metric = lyxrc.default_papersize > 3;
string const default_unit = metric ? "cm" : "in";
updateWidgetsFromLength(column_options_->input_column_width,
column_options_->choice_value_column_width,
pwidth, default_unit);
@ -512,20 +515,40 @@ bool FormTabular::input(FL_OBJECT * ob, long)
if ((ob == column_options_->input_column_width) ||
(ob == column_options_->choice_value_column_width))
{
string const str =
getLengthFromWidgets(column_options_->input_column_width,
column_options_->choice_value_column_width);
inset_->tabularFeatures(lv_->view(), LyXTabular::SET_PWIDTH, str);
string const str =
getLengthFromWidgets(column_options_->input_column_width,
column_options_->choice_value_column_width);
inset_->tabularFeatures(lv_->view(), LyXTabular::SET_PWIDTH, str);
//check if the input is valid
string const input =
fl_get_input(column_options_->input_column_width);
if (!input.empty() && !isValidLength(input) && !isStrDbl(input)) {
fl_set_object_label(dialog_->text_warning,
_("Warning: Invalid Length (valid example: 10mm)"));
fl_show_object(dialog_->text_warning);
return false;
}
update(); // update for alignment
return true;
}
if ((ob == cell_options_->input_mcolumn_width) ||
(ob == cell_options_->choice_value_mcolumn_width))
{
string const str =
getLengthFromWidgets(cell_options_->input_mcolumn_width,
cell_options_->choice_value_mcolumn_width);
inset_->tabularFeatures(lv_->view(), LyXTabular::SET_MPWIDTH, str);
string const str =
getLengthFromWidgets(cell_options_->input_mcolumn_width,
cell_options_->choice_value_mcolumn_width);
inset_->tabularFeatures(lv_->view(), LyXTabular::SET_MPWIDTH, str);
//check if the input is valid
string const input =
fl_get_input(cell_options_->input_mcolumn_width);
if (!input.empty() && !isValidLength(input) && !isStrDbl(input)) {
fl_set_object_label(dialog_->text_warning,
_("Warning: Invalid Length (valid example: 10mm)"));
fl_show_object(dialog_->text_warning);
return false;
}
update(); // update for alignment
return true;
}

View File

@ -20,6 +20,7 @@
#include "gettext.h"
#include "support/LAssert.h"
#include "lyxlength.h"
#include "lyxgluelength.h"
using std::ofstream;
using std::pair;
@ -158,6 +159,10 @@ string getLengthFromWidgets(FL_OBJECT * input, FL_OBJECT * choice)
if (length.empty())
return string();
//don't return unit-from-choice if the input(field) contains a unit
if (isValidGlueLength(length))
return length;
string unit = strip(frontStrip(fl_get_choice_text(choice)));
unit = subst(unit, "%%", "%");