]> git.lyx.org Git - features.git/commitdiff
J�rgen Spitzm�ller's changes to the document dialog.
authorAngus Leeming <leeming@lyx.org>
Tue, 23 Oct 2001 09:00:12 +0000 (09:00 +0000)
committerAngus Leeming <leeming@lyx.org>
Tue, 23 Oct 2001 09:00:12 +0000 (09:00 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2914 a592a061-630c-0410-9148-cb99ea01b6c8

src/frontends/xforms/ChangeLog
src/frontends/xforms/FormDocument.C
src/frontends/xforms/form_document.C
src/frontends/xforms/form_document.h
src/frontends/xforms/forms/form_document.fd

index ab34a22f8d7cd45a6c20b2400525187d7c1548e1..6bab7bb1e87a48ac7f2366f6b1370e3e6dd05b39 100644 (file)
@@ -1,3 +1,13 @@
+2001-10-19  Jürgen Spitzmüller  <j.spitzmueller@gmx.de>
+
+       * forms/form_document.fd:
+         Class: add a value choice for Default Skip.
+         Some rearrangements (minor tweaks).
+       * FormDocument.C: Handle that choice, minor tweaks.
+       * forms/form_paragraph.fd: Add value choices
+       * FormParagraph.C: Handle that choices.
+       * FormMinipage.C/FormGraphics.C: Small tweaks.
+
 2001-10-15  Angus Leeming  <a.leeming@ic.ac.uk>
 
        * FormDocument.C: fixed some bugs in the Paper tab.
index 77bc376f6bfc53124d1a847628aac5486b1b3f49..2fda2c10b7409cba29a718d53e81ffb241cb4297 100644 (file)
@@ -203,10 +203,16 @@ void FormDocument::build()
                        "default|empty|plain|headings|fancy");
        fl_addto_choice(class_->choice_doc_skip,
                        _(" Smallskip | Medskip | Bigskip | Length "));
+       fl_addto_choice(class_->choice_default_skip_units,  units.c_str());
        fl_set_input_return(class_->input_doc_extra, FL_RETURN_CHANGED);
        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
+       // unsigned numbers.
+       fl_set_input_filter(class_->input_doc_skip,
+                           fl_unsigned_float_filter);
+
        bc().addReadOnly (class_->radio_doc_indent);
        bc().addReadOnly (class_->radio_doc_skip);
 
@@ -399,6 +405,31 @@ bool FormDocument::input( FL_OBJECT * ob, long data )
                break;
        }
 
+       bool const length_input = fl_get_choice(class_->choice_doc_skip) == 4;
+       if (ob == class_->choice_doc_skip) {
+               setEnabled(class_->input_doc_skip, length_input);
+               setEnabled(class_->choice_default_skip_units, length_input);
+       }
+
+       if (ob == class_->choice_doc_spacing)
+               setEnabled(class_->input_doc_spacing,
+                          fl_get_choice(class_->choice_doc_spacing) == 4);
+
+       bool const skip_used = fl_get_button(class_->radio_doc_skip);
+       if (ob == class_->radio_doc_skip ||
+           ob == class_->radio_doc_indent) {
+               setEnabled(class_->choice_doc_skip, skip_used);
+               setEnabled(class_->input_doc_skip, skip_used);
+               setEnabled(class_->choice_default_skip_units, skip_used);
+               // Default unit choice is cm if metric, inches if US paper.
+               int const paperchoice = fl_get_choice(paper_->choice_papersize);
+               bool const metric = paperchoice < 3 || paperchoice > 5;
+               int const default_unit = metric ? 8 : 9;
+               if (strip(fl_get_input(class_->input_doc_skip)).empty())
+                       fl_set_choice(class_->choice_default_skip_units,
+                                     default_unit);
+       }
+
        if (ob == options_->check_use_natbib) {
                setEnabled(options_->choice_citation_format,
                           fl_get_button(options_->check_use_natbib));
@@ -644,11 +675,16 @@ bool FormDocument::class_apply()
            params.setDefSkip(VSpace(VSpace::BIGSKIP));
            break;
        case 4:
-               params.setDefSkip
-                       (VSpace(LyXGlueLength(fl_get_input(class_->input_doc_skip))));
+       {
+               string const length =
+                       getLengthFromWidgets(class_->input_doc_skip,
+                                            class_->choice_default_skip_units);
+
+               params.setDefSkip(VSpace(LyXGlueLength(length)));
                break;
-               // DocumentDefskipCB assures that this never happens
+       }
        default:
+               // DocumentDefskipCB assures that this never happens
                params.setDefSkip(VSpace(VSpace::MEDSKIP));
                break;
        }
@@ -869,6 +905,11 @@ void FormDocument::class_update(BufferParams const & params)
                fl_set_button(class_->radio_doc_indent, 1);
        else
                fl_set_button(class_->radio_doc_skip, 1);
+
+       bool const input_length = fl_get_choice(class_->choice_doc_skip) == 4;
+       setEnabled(class_->choice_default_skip_units, input_length);
+       setEnabled(class_->input_doc_skip, input_length);
+
        switch (params.getDefSkip().kind()) {
        case VSpace::SMALLSKIP: 
                fl_set_choice (class_->choice_doc_skip, 1);
@@ -879,17 +920,26 @@ void FormDocument::class_update(BufferParams const & params)
        case VSpace::BIGSKIP: 
                fl_set_choice (class_->choice_doc_skip, 3);
                break;
-       case VSpace::LENGTH: 
-               fl_set_choice (class_->choice_doc_skip, 4);
-               fl_set_input (class_->input_doc_skip,
-                             params.getDefSkip().asLyXCommand().c_str());
+       case VSpace::LENGTH:
+       {
+               int const paperchoice = params.papersize2 + 1;
+               bool const metric = paperchoice < 3 || paperchoice > 5;
+               string const default_unit = metric ? "cm" : "in";
+               string const length = params.getDefSkip().asLyXCommand();
+               updateWidgetsFromLengthString(class_->input_doc_skip,
+                                             class_->choice_default_skip_units,
+                                             length, default_unit);
                break;
+       }
        default:
                fl_set_choice (class_->choice_doc_skip, 2);
                break;
        }
        fl_set_button(class_->radio_doc_sides_one, 0);
        fl_set_button(class_->radio_doc_sides_two, 0);
+       setEnabled(class_->choice_doc_skip,
+                  fl_get_button(class_->radio_doc_skip));
+
        if (params.sides == LyXTextClass::TwoSides)
                fl_set_button(class_->radio_doc_sides_two, 1);
        else
@@ -901,6 +951,9 @@ void FormDocument::class_update(BufferParams const & params)
        else
                fl_set_button(class_->radio_doc_columns_one, 1);
        fl_set_input(class_->input_doc_spacing, "");
+
+       setEnabled(class_->input_doc_spacing, input_length);
+
        switch (params.spacing.getSpace()) {
        case Spacing::Default: // nothing bad should happen with this
        case Spacing::Single:
@@ -1097,7 +1150,7 @@ void FormDocument::checkReadOnly()
 }
 
 
-bool FormDocument::CheckDocumentInput(FL_OBJECT * ob, long)
+bool FormDocument::CheckDocumentInput(FL_OBJECT *, long)
 {
        string str;
        bool ok = true;
@@ -1106,20 +1159,6 @@ bool FormDocument::CheckDocumentInput(FL_OBJECT * ob, long)
        // "Synchronize" the choice and the input field, so that it
        // is impossible to commit senseless data.
        input = fl_get_input (class_->input_doc_skip);
-       if (ob == class_->input_doc_skip) {
-               if (!*input) {
-                       fl_set_choice (class_->choice_doc_skip, 2);
-               } else if (isValidGlueLength (input)) {
-                       fl_set_choice (class_->choice_doc_skip, 4);
-               } else {
-                       fl_set_choice(class_->choice_doc_skip, 4);
-                       ok = false;
-               }
-       } else {
-               if (*input && !isValidGlueLength(input))
-                       ok = false;
-       }
-
        if ((fl_get_choice(class_->choice_doc_skip) == 4) && !*input)
                ok = false;
        else if (fl_get_choice(class_->choice_doc_skip) != 4)
@@ -1128,7 +1167,7 @@ bool FormDocument::CheckDocumentInput(FL_OBJECT * ob, long)
        input = fl_get_input(class_->input_doc_spacing);
        if ((fl_get_choice(class_->choice_doc_spacing) == 4) && !*input)
                ok = false;
-       else  if (fl_get_choice(class_->choice_doc_spacing) != 4)
+       else if (fl_get_choice(class_->choice_doc_spacing) != 4)
                fl_set_input (class_->input_doc_spacing, "");
        return ok;
 }
index 5c53e0480b1225f1a68d0e4c573d05c3be6a861a..c3513c60bddee5a3eb81a188d034c08f0dc42e94 100644 (file)
@@ -250,13 +250,13 @@ FD_form_doc_class * FormDocument::build_doc_class()
   fdui->form = fl_bgn_form(FL_NO_BOX, 440, 345);
   fdui->form->u_vdata = this;
   obj = fl_add_box(FL_FLAT_BOX, 0, 0, 440, 345, "");
-  obj = fl_add_labelframe(FL_ENGRAVED_FRAME, 300, 200, 120, 80, _("Separation"));
+  obj = fl_add_labelframe(FL_ENGRAVED_FRAME, 20, 245, 400, 85, _("Separation"));
     fl_set_object_lsize(obj, FL_NORMAL_SIZE);
     fl_set_object_lstyle(obj, FL_BOLD_STYLE);
-  obj = fl_add_labelframe(FL_ENGRAVED_FRAME, 300, 110, 120, 70, _("Page cols"));
+  obj = fl_add_labelframe(FL_ENGRAVED_FRAME, 300, 110, 115, 80, _("Page cols"));
     fl_set_object_lsize(obj, FL_NORMAL_SIZE);
     fl_set_object_lstyle(obj, FL_BOLD_STYLE);
-  obj = fl_add_labelframe(FL_ENGRAVED_FRAME, 300, 20, 120, 70, _("Sides"));
+  obj = fl_add_labelframe(FL_ENGRAVED_FRAME, 300, 20, 120, 75, _("Sides"));
     fl_set_object_lsize(obj, FL_NORMAL_SIZE);
     fl_set_object_lstyle(obj, FL_BOLD_STYLE);
   {
@@ -293,7 +293,7 @@ FD_form_doc_class * FormDocument::build_doc_class()
     fl_set_object_callback(obj, C_FormBaseDeprecatedInputCB, INPUT);
   {
     char const * const dummy = N_("Spacing|#g");
-    fdui->choice_doc_spacing = obj = fl_add_choice(FL_NORMAL_CHOICE, 120, 240, 90, 30, idex(_(dummy)));
+    fdui->choice_doc_spacing = obj = fl_add_choice(FL_NORMAL_CHOICE, 120, 200, 160, 30, idex(_(dummy)));
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
     fl_set_object_boxtype(obj, FL_FRAME_BOX);
@@ -306,12 +306,12 @@ FD_form_doc_class * FormDocument::build_doc_class()
   }
     fl_set_object_lsize(obj, FL_NORMAL_SIZE);
     fl_set_object_callback(obj, C_FormBaseDeprecatedInputCB, INPUT);
-  fdui->input_doc_skip = obj = fl_add_input(FL_NORMAL_INPUT, 220, 200, 60, 30, "");
+  fdui->input_doc_skip = obj = fl_add_input(FL_NORMAL_INPUT, 285, 290, 60, 30, "");
     fl_set_object_lsize(obj, FL_NORMAL_SIZE);
     fl_set_object_callback(obj, C_FormBaseDeprecatedInputCB, INPUT);
   {
     char const * const dummy = N_("Default Skip:|#u");
-    fdui->choice_doc_skip = obj = fl_add_choice(FL_NORMAL_CHOICE, 120, 200, 90, 30, idex(_(dummy)));
+    fdui->choice_doc_skip = obj = fl_add_choice(FL_NORMAL_CHOICE, 285, 255, 125, 30, idex(_(dummy)));
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
     fl_set_object_boxtype(obj, FL_FRAME_BOX);
@@ -357,14 +357,14 @@ FD_form_doc_class * FormDocument::build_doc_class()
   fdui->group_doc_sep = fl_bgn_group();
   {
     char const * const dummy = N_("Indent|#I");
-    fdui->radio_doc_indent = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 300, 210, 110, 30, idex(_(dummy)));
+    fdui->radio_doc_indent = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 50, 260, 110, 30, idex(_(dummy)));
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
     fl_set_object_lsize(obj, FL_NORMAL_SIZE);
     fl_set_object_callback(obj, C_FormBaseDeprecatedInputCB, INPUT);
   {
     char const * const dummy = N_("Skip|#K");
-    fdui->radio_doc_skip = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 300, 240, 110, 30, idex(_(dummy)));
+    fdui->radio_doc_skip = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 50, 290, 110, 30, idex(_(dummy)));
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
     fl_set_object_lsize(obj, FL_NORMAL_SIZE);
@@ -372,9 +372,12 @@ FD_form_doc_class * FormDocument::build_doc_class()
     fl_set_button(obj, 1);
   fl_end_group();
 
-  fdui->input_doc_spacing = obj = fl_add_input(FL_NORMAL_INPUT, 220, 240, 60, 30, "");
+  fdui->input_doc_spacing = obj = fl_add_input(FL_NORMAL_INPUT, 300, 200, 115, 30, "");
     fl_set_object_lsize(obj, FL_NORMAL_SIZE);
     fl_set_object_callback(obj, C_FormBaseDeprecatedInputCB, INPUT);
+  fdui->choice_default_skip_units = obj = fl_add_choice(FL_NORMAL_CHOICE, 350, 290, 60, 30, "");
+    fl_set_object_boxtype(obj, FL_FRAME_BOX);
+    fl_set_object_callback(obj, C_FormBaseDeprecatedInputCB, 0);
   fl_end_form();
 
   fdui->form->fdui = fdui;
index 56a4cf2e8a446accabeaba803638baaf5c24d893..eb10ca877a64740a1fe7efb8dcacdf000da48d9c 100644 (file)
@@ -87,6 +87,7 @@ struct FD_form_doc_class {
        FL_OBJECT *radio_doc_indent;
        FL_OBJECT *radio_doc_skip;
        FL_OBJECT *input_doc_spacing;
+       FL_OBJECT *choice_default_skip_units;
 };
 struct FD_form_doc_language {
        ~FD_form_doc_language();
index 768ff67e1a3b02c70acb610e292bd9852247fccd..f0b688988917bc85bba6b49e5cc7d546d91d26c5 100644 (file)
@@ -707,7 +707,7 @@ argument: 0
 Name: form_doc_class
 Width: 440
 Height: 345
-Number of Objects: 25
+Number of Objects: 26
 
 --------------------
 class: FL_BOX
@@ -730,7 +730,7 @@ argument:
 --------------------
 class: FL_LABELFRAME
 type: ENGRAVED_FRAME
-box: 300 200 120 80
+box: 20 245 400 85
 boxtype: FL_NO_BOX
 colors: FL_BLACK FL_COL1
 alignment: FL_ALIGN_TOP_LEFT
@@ -748,7 +748,7 @@ argument:
 --------------------
 class: FL_LABELFRAME
 type: ENGRAVED_FRAME
-box: 300 110 120 70
+box: 300 110 115 80
 boxtype: FL_NO_BOX
 colors: FL_BLACK FL_COL1
 alignment: FL_ALIGN_TOP_LEFT
@@ -766,7 +766,7 @@ argument:
 --------------------
 class: FL_LABELFRAME
 type: ENGRAVED_FRAME
-box: 300 20 120 70
+box: 300 20 120 75
 boxtype: FL_NO_BOX
 colors: FL_BLACK FL_COL1
 alignment: FL_ALIGN_TOP_LEFT
@@ -856,7 +856,7 @@ argument: INPUT
 --------------------
 class: FL_CHOICE
 type: NORMAL_CHOICE
-box: 120 240 90 30
+box: 120 200 160 30
 boxtype: FL_FRAME_BOX
 colors: FL_COL1 FL_BLACK
 alignment: FL_ALIGN_LEFT
@@ -892,7 +892,7 @@ argument: INPUT
 --------------------
 class: FL_INPUT
 type: NORMAL_INPUT
-box: 220 200 60 30
+box: 285 290 60 30
 boxtype: FL_DOWN_BOX
 colors: FL_COL1 FL_MCOL
 alignment: FL_ALIGN_LEFT
@@ -910,7 +910,7 @@ argument: INPUT
 --------------------
 class: FL_CHOICE
 type: NORMAL_CHOICE
-box: 120 200 90 30
+box: 285 255 125 30
 boxtype: FL_FRAME_BOX
 colors: FL_COL1 FL_BLACK
 alignment: FL_ALIGN_LEFT
@@ -1090,7 +1090,7 @@ argument:
 --------------------
 class: FL_CHECKBUTTON
 type: RADIO_BUTTON
-box: 300 210 110 30
+box: 50 260 110 30
 boxtype: FL_NO_BOX
 colors: FL_COL1 FL_YELLOW
 alignment: FL_ALIGN_CENTER
@@ -1108,7 +1108,7 @@ argument: INPUT
 --------------------
 class: FL_CHECKBUTTON
 type: RADIO_BUTTON
-box: 300 240 110 30
+box: 50 290 110 30
 boxtype: FL_NO_BOX
 colors: FL_COL1 FL_YELLOW
 alignment: FL_ALIGN_CENTER
@@ -1145,7 +1145,7 @@ argument:
 --------------------
 class: FL_INPUT
 type: NORMAL_INPUT
-box: 220 240 60 30
+box: 300 200 115 30
 boxtype: FL_DOWN_BOX
 colors: FL_COL1 FL_MCOL
 alignment: FL_ALIGN_LEFT
@@ -1160,6 +1160,24 @@ name: input_doc_spacing
 callback: C_FormBaseDeprecatedInputCB
 argument: INPUT
 
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 350 290 60 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label:
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_default_skip_units
+callback: C_FormBaseDeprecatedInputCB
+argument: 0
+
 =============== FORM ===============
 Name: form_doc_language
 Width: 440