]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/xforms/FormParagraph.C
doxygen fixes
[lyx.git] / src / frontends / xforms / FormParagraph.C
index 791af6a5a237e6226b4cea543203bb5efef857a3..dd5c4bb3151dffefeb08cf3fbbb08a50fb836d95 100644 (file)
@@ -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 <config.h>
 
 #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 <functional>
+
 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<string> units_vec = getLatexUnits();
-    for (std::vector<string>::iterator it = units_vec.begin();
+    vector<string> units_vec = getLatexUnits();
+#if 0
+    for (vector<string>::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<string>::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 {