X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fxforms%2FFormParagraph.C;h=dd5c4bb3151dffefeb08cf3fbbb08a50fb836d95;hb=82a83d7ae6eee25e1182c713a726b17037844ffb;hp=791af6a5a237e6226b4cea543203bb5efef857a3;hpb=5f3773f2b89ba9f19079ab8702b33bd8fb2d06a5;p=lyx.git diff --git a/src/frontends/xforms/FormParagraph.C b/src/frontends/xforms/FormParagraph.C index 791af6a5a2..dd5c4bb315 100644 --- a/src/frontends/xforms/FormParagraph.C +++ b/src/frontends/xforms/FormParagraph.C @@ -1,13 +1,10 @@ -/* This file is part of - * ====================================================== - * - * LyX, The Document Processor - * - * Copyright 2000-2001 The LyX Team. +/** + * \file FormParagraph.C + * Copyright 2000-2001 The LyX Team. + * See the file COPYING. * - * @author Jürgen Vigna - * - *======================================================*/ + * \author Jürgen Vigna, jug@sad.it + */ #include @@ -20,20 +17,28 @@ #include "FormParagraph.h" #include "form_paragraph.h" #include "Dialogs.h" -#include "support/lstrings.h" #include "Liason.h" #include "LyXView.h" #include "buffer.h" #include "lyxtext.h" #include "xforms_helpers.h" +#include "lyxrc.h" // to set the deafult length values #include "BufferView.h" +#include "lyxtextclasslist.h" #include "Spacing.h" #include "ParagraphParameters.h" #include "input_validators.h" #include "helper_funcs.h" +#include "support/lstrings.h" + +#include + using Liason::setMinibuffer; using SigC::slot; +using std::vector; +using std::bind2nd; +using std::remove_if; FormParagraph::FormParagraph(LyXView * lv, Dialogs * d) @@ -74,6 +79,12 @@ void FormParagraph::changedParagraph() if (p == 0 || p == par_) return; + // OBS FIX LOOK HERE + + // shouldn't we chage the par_ pointer too? + // anyway for me the below function does just nothing! + // (Jug 20020108) + // For now don't bother checking if the params are different, // just activate the Apply button bc().valid(); @@ -82,8 +93,8 @@ void FormParagraph::changedParagraph() void FormParagraph::redraw() { - if( form() && form()->visible ) - fl_redraw_form( form() ); + if (form() && form()->visible) + fl_redraw_form(form()); } @@ -114,17 +125,29 @@ 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); + + setPrehandler(dialog_->input_space_above); + setPrehandler(dialog_->input_space_below); + setPrehandler(dialog_->input_labelwidth); + setPrehandler(dialog_->input_linespacing); // Create the contents of the unit choices // Don't include the "%" terms... - std::vector units_vec = getLatexUnits(); - for (std::vector::iterator it = units_vec.begin(); + vector units_vec = getLatexUnits(); +#if 0 + for (vector::iterator it = units_vec.begin(); it != units_vec.end(); ++it) { if (contains(*it, "%")) it = units_vec.erase(it, it+1) - 1; } +#else + // Something similar to this is a better way to erase + vector::iterator del = + remove_if(units_vec.begin(), units_vec.end(), + bind2nd(contains_functor(), "%")); + units_vec.erase(del, units_vec.end()); +#endif + string units = getStringFromVector(units_vec, "|"); fl_addto_choice(dialog_->choice_value_space_above, units.c_str()); @@ -240,7 +263,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; } @@ -279,7 +302,7 @@ void FormParagraph::apply() // Actually apply these settings - lv_->view()->update(lv_->view()->text, + lv_->view()->update(text, BufferView::SELECT | BufferView::FITCUR | BufferView::CHANGE); lv_->buffer()->markDirty(); setMinibuffer(lv_, _("Paragraph layout set")); @@ -309,10 +332,11 @@ void FormParagraph::update() fl_set_button(dialog_->radio_align_center, 0); fl_set_button(dialog_->radio_align_block, 0); + LyXTextClass const & tclass = textclasslist[buf->params.textclass]; + int align = par_->getAlign(); if (align == LYX_ALIGN_LAYOUT) - align = textclasslist.Style(buf->params.textclass, - par_->getLayout()).align; + align = tclass[par_->layout()].align; switch (align) { case LYX_ALIGN_RIGHT: @@ -329,9 +353,7 @@ void FormParagraph::update() break; } - LyXAlignment alignpos = - textclasslist.Style(buf->params.textclass, - par_->getLayout()).alignpossible; + LyXAlignment alignpos = tclass[par_->layout()].alignpossible; setEnabled(dialog_->radio_align_block, bool(alignpos & LYX_ALIGN_BLOCK)); setEnabled(dialog_->radio_align_center, bool(alignpos & LYX_ALIGN_CENTER)); @@ -399,19 +421,21 @@ void FormParagraph::update() break; case VSpace::LENGTH: { - setEnabled(dialog_->input_space_above, true); - setEnabled(dialog_->choice_value_space_above, true); - string const default_unit = "cm"; - string const length = par_->params().spaceTop().length().asString(); - updateWidgetsFromLengthString(dialog_->input_space_above, - dialog_->choice_value_space_above, - length, default_unit); - break; + fl_set_choice (dialog_->choice_space_above, 7); + setEnabled(dialog_->input_space_above, true); + setEnabled(dialog_->choice_value_space_above, true); + 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; } } fl_set_button (dialog_->check_space_above, - par_->params().spaceTop().keep()); + par_->params().spaceTop().keep()); fl_set_input (dialog_->input_space_below, ""); setEnabled(dialog_->input_space_below, false); @@ -437,20 +461,22 @@ void FormParagraph::update() break; case VSpace::LENGTH: { - setEnabled(dialog_->input_space_below, true); - setEnabled(dialog_->choice_value_space_below, true); - string const default_unit = "cm"; - string const length = - par_->params().spaceBottom().length().asString(); - updateWidgetsFromLengthString(dialog_->input_space_below, - dialog_->choice_value_space_below, - length, default_unit); - break; + fl_set_choice (dialog_->choice_space_below, 7); + setEnabled(dialog_->input_space_below, true); + setEnabled(dialog_->choice_value_space_below, true); + bool const metric = lyxrc.default_papersize > 3; + 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; } } fl_set_button(dialog_->check_space_below, - par_->params().spaceBottom().keep()); + par_->params().spaceBottom().keep()); fl_set_button(dialog_->check_noindent, par_->params().noindent()); } @@ -472,31 +498,60 @@ bool FormParagraph::input(FL_OBJECT * ob, long) if (fl_get_choice (dialog_->choice_space_above) != 7) { fl_set_input (dialog_->input_space_above, ""); setEnabled (dialog_->input_space_above, false); - setEnabled (dialog_->choice_value_space_above, false); + setEnabled (dialog_->choice_value_space_above, false); } else { setEnabled (dialog_->input_space_above, !lv_->buffer()->isReadonly()); - setEnabled (dialog_->choice_value_space_above, !lv_->buffer()->isReadonly()); - int const default_unit = 8; - if (strip(fl_get_input(dialog_->input_space_above)).empty()) - fl_set_choice(dialog_->choice_value_space_above, - default_unit); + setEnabled (dialog_->choice_value_space_above, !lv_->buffer()->isReadonly()); + bool const metric = lyxrc.default_papersize > 3; + int const default_unit = metric ? 8 : 9; + if (strip(fl_get_input(dialog_->input_space_above)).empty()) + fl_set_choice(dialog_->choice_value_space_above, + default_unit); } } if (ob == dialog_->choice_space_below) { if (fl_get_choice (dialog_->choice_space_below) != 7) { fl_set_input (dialog_->input_space_below, ""); setEnabled (dialog_->input_space_below, false); - setEnabled (dialog_->choice_value_space_below, false); + setEnabled (dialog_->choice_value_space_below, false); } else { setEnabled (dialog_->input_space_below, !lv_->buffer()->isReadonly()); - setEnabled (dialog_->choice_value_space_below, !lv_->buffer()->isReadonly()); - int const default_unit = 8; - if (strip(fl_get_input(dialog_->input_space_below)).empty()) - fl_set_choice(dialog_->choice_value_space_below, - default_unit); + setEnabled (dialog_->choice_value_space_below, !lv_->buffer()->isReadonly()); + bool const metric = lyxrc.default_papersize > 3; + int const default_unit = metric ? 8 : 9; + if (strip(fl_get_input(dialog_->input_space_below)).empty()) + fl_set_choice(dialog_->choice_value_space_below, + default_unit); } } + // + // 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 {