From e1edfbe8a06e20c9d6d4a6017da2c7f13758f143 Mon Sep 17 00:00:00 2001 From: Angus Leeming Date: Thu, 24 Oct 2002 11:53:46 +0000 Subject: [PATCH] (Rob Lahaye): changes to the xforms graphics dialog. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@5495 a592a061-630c-0410-9148-cb99ea01b6c8 --- development/ChangeLog | 4 + development/FORMAT | 4 + src/frontends/xforms/ChangeLog | 8 + src/frontends/xforms/FormGraphics.C | 334 +++++++++++--------- src/frontends/xforms/forms/form_graphics.fd | 72 ++--- src/insets/ChangeLog | 8 + src/insets/insetgraphics.C | 8 +- src/insets/insetgraphicsParams.C | 15 +- src/insets/insetgraphicsParams.h | 2 +- 9 files changed, 259 insertions(+), 196 deletions(-) diff --git a/development/ChangeLog b/development/ChangeLog index 66c03f0200..abfc227054 100644 --- a/development/ChangeLog +++ b/development/ChangeLog @@ -1,3 +1,7 @@ +2002-10-24 Angus Leeming + + * FORMAT: document further change to InsetGraphicsParams. + 2002-10-23 Angus Leeming * tools/mkdoclinks.sh: new file. Run in /lib/doc to diff --git a/development/FORMAT b/development/FORMAT index c4cad19b00..dd2c93ebc6 100644 --- a/development/FORMAT +++ b/development/FORMAT @@ -1,6 +1,10 @@ Changes to the LyX format since version 220 (LyX 1.2.0) was released. ===================================================================== +2002-10-24 Rob Lahaye + + * insetgraphicsParams.h (scale): is now a float, not an unsigned int. + 2002-08-22 Rob Lahaye New graphics dialog. With the removal of buttons in the dialog, also diff --git a/src/frontends/xforms/ChangeLog b/src/frontends/xforms/ChangeLog index 3ce4210202..55e4d76f55 100644 --- a/src/frontends/xforms/ChangeLog +++ b/src/frontends/xforms/ChangeLog @@ -1,3 +1,11 @@ +2002-10-24 Rob Lahaye + + * FormGraphics.C: use checkedWidgets to ensure that the lengths and + glue lengths are valid. Improve code documentation and layout. + InsetGraphicsParams::scale is now a float; modify dialog to suit. + + * forms/form_graphics.fd: remove text_warning widget. Reshape. + 2002-10-24 Rob Lahaye * FormFloat.C (input): fix the radio buttongroup behaviour. diff --git a/src/frontends/xforms/FormGraphics.C b/src/frontends/xforms/FormGraphics.C index 00cd9bcfdf..46bf211105 100644 --- a/src/frontends/xforms/FormGraphics.C +++ b/src/frontends/xforms/FormGraphics.C @@ -5,6 +5,7 @@ * * \author Baruch Even * \author Herbert Voss + * \author Rob Lahaye * * Full author contact details are available in file CREDITS */ @@ -19,22 +20,30 @@ #include "ControlGraphics.h" #include "FormGraphics.h" #include "forms/form_graphics.h" -#include "Alert.h" -#include "Tooltips.h" -#include "xforms_helpers.h" -#include "helper_funcs.h" +#include "checkedwidgets.h" #include "input_validators.h" +#include "Tooltips.h" +#include "xforms_helpers.h" + #include "debug.h" // for lyxerr +#include "lyxrc.h" // for lyxrc.display_graphics + +#include "insets/insetgraphicsParams.h" + +#include "controllers/helper_funcs.h" // for getStringFromVector + +#include "frontends/Alert.h" + #include "support/lstrings.h" // for strToDbl & tostr #include "support/filetools.h" // for MakeAbsPath etc -#include "insets/insetgraphicsParams.h" -#include "lyxrc.h" // for lyxrc.display_graphics + #include FORMS_H_LOCATION using std::endl; using std::vector; + namespace { // Bound the number of input characters @@ -43,12 +52,6 @@ int const FILENAME_MAXCHARS = 1024; string defaultUnit("cm"); -/// Given input and choice widgets, create a LyXLength -LyXLength getLyXLengthFromWidgets(FL_OBJECT * input, FL_OBJECT * choice) -{ - return LyXLength(getLengthFromWidgets(input, choice)); -} - } // namespace anon @@ -75,9 +78,6 @@ void FormGraphics::build() { dialog_.reset(build_graphics(this)); - // Allow the base class to control messages - setMessageWidget(dialog_->text_warning); - // Manage the ok, apply, restore and cancel/close buttons bc().setOK(dialog_->button_ok); bc().setApply(dialog_->button_apply); @@ -87,24 +87,37 @@ void FormGraphics::build() // the file section file_.reset(build_graphics_file(this)); - fl_set_input_return (file_->input_filename, FL_RETURN_CHANGED); - fl_set_input_return (file_->input_lyxscale, FL_RETURN_CHANGED); - fl_set_input_return (file_->input_width, FL_RETURN_CHANGED); - fl_set_input_return (file_->input_height, FL_RETURN_CHANGED); + // disable for read-only documents + bc().addReadOnly(file_->button_browse); + bc().addReadOnly(file_->check_aspectratio); + bc().addReadOnly(file_->check_draft); + bc().addReadOnly(file_->check_nounzip); + // check validity of "length + unit" input + addCheckedGlueLength(bc(), file_->input_width); + addCheckedGlueLength(bc(), file_->input_height); + + // trigger an input event for cut&paste with middle mouse button. setPrehandler(file_->input_filename); setPrehandler(file_->input_lyxscale); setPrehandler(file_->input_width); setPrehandler(file_->input_height); + // for activate ok/apply immediately upon input + fl_set_input_return(file_->input_filename, FL_RETURN_CHANGED); + fl_set_input_return(file_->input_lyxscale, FL_RETURN_CHANGED); + fl_set_input_return(file_->input_width, FL_RETURN_CHANGED); + fl_set_input_return(file_->input_height, FL_RETURN_CHANGED); + fl_set_input_maxchars(file_->input_filename, FILENAME_MAXCHARS); - fl_set_input_filter(file_->input_lyxscale, fl_unsigned_int_filter); + fl_set_input_filter(file_->input_lyxscale, fl_unsigned_float_filter); // width default is scaling, thus unsigned integer input fl_set_input_filter(file_->input_width, fl_unsigned_int_filter); fl_set_input_maxchars(file_->input_height, SIZE_MAXDIGITS); - string const display_List = _("Default|Monochrome|Grayscale|Color|Do not display"); + string const display_List = + _("Default|Monochrome|Grayscale|Color|Do not display"); fl_addto_choice(file_->choice_display, display_List.c_str()); string const width_list = _("Scale%%|") + choice_Length_All; @@ -112,98 +125,107 @@ void FormGraphics::build() fl_addto_choice(file_->choice_height, choice_Length_All.c_str()); - bc().addReadOnly(file_->button_browse); - bc().addReadOnly(file_->check_aspectratio); - bc().addReadOnly(file_->check_draft); - bc().addReadOnly(file_->check_nounzip); - // set up the tooltips for the filesection - string str = _("The file you want to insert."); + string str = _("The file you want to insert"); tooltips().init(file_->input_filename, str); - str = _("Browse the directories."); + str = _("Browse the directories"); tooltips().init(file_->button_browse, str); - str = _("Scale the image to inserted percentage value."); + str = _("Scale the image to inserted percentage value"); tooltips().init(file_->input_lyxscale, str); - str = _("Select display mode for this image."); + str = _("Select display mode for this image"); tooltips().init(file_->choice_display, str); - str = _("Set the image width to the inserted value."); + str = _("Set the image width to the inserted value"); tooltips().init(file_->input_width, str); - str = _("Select unit for width; Scale% for scaling whole image."); + str = _("Select unit for width; Scale% for scaling whole image"); tooltips().init(file_->choice_width, str); - str = _("Set the image height to the inserted value."); + str = _("Set the image height to the inserted value"); tooltips().init(file_->input_height, str); str = _("Select unit for height"); tooltips().init(file_->choice_height, str); str = _("Do not distort the image. " - "Keep image within \"width\" by \"height\" and obey aspect ratio."); + "Keep image within \"width\" by \"height\" and obey " + "aspect ratio"); tooltips().init(file_->check_aspectratio, str); str = _("Pass a filename like \"file.eps.gz\" to the LaTeX output. " "Useful when LaTeX should unzip the file. Needs an additional file " - "like \"file.eps.bb\" which holds the values for the bounding box."); + "like \"file.eps.bb\" which holds the values for the bounding box"); tooltips().init(file_->check_nounzip, str); - - str = _("Show image only as a rectangle of the original size."); + str = _("Show image only as a rectangle of the original size"); tooltips().init(file_->check_draft, str); // the bounding box selection bbox_.reset(build_graphics_bbox(this)); - fl_set_input_return (bbox_->input_bb_x0, FL_RETURN_CHANGED); - fl_set_input_return (bbox_->input_bb_y0, FL_RETURN_CHANGED); - fl_set_input_return (bbox_->input_bb_x1, FL_RETURN_CHANGED); - fl_set_input_return (bbox_->input_bb_y1, FL_RETURN_CHANGED); - fl_set_input_filter(bbox_->input_bb_x0, fl_unsigned_float_filter); - fl_set_input_filter(bbox_->input_bb_y0, fl_unsigned_float_filter); - fl_set_input_filter(bbox_->input_bb_x1, fl_unsigned_float_filter); - fl_set_input_filter(bbox_->input_bb_y1, fl_unsigned_float_filter); + // disable for read-only documents + bc().addReadOnly(bbox_->button_getBB); + bc().addReadOnly(bbox_->check_clip); + // check validity of "length + unit" input + addCheckedLyXLength(bc(), bbox_->input_bb_x1, bbox_->text_X); + + // trigger an input event for cut&paste with middle mouse button. setPrehandler(bbox_->input_bb_x0); setPrehandler(bbox_->input_bb_y0); setPrehandler(bbox_->input_bb_x1); setPrehandler(bbox_->input_bb_y1); + // for activate ok/apply immediately upon input + fl_set_input_return(bbox_->input_bb_x0, FL_RETURN_CHANGED); + fl_set_input_return(bbox_->input_bb_y0, FL_RETURN_CHANGED); + fl_set_input_return(bbox_->input_bb_x1, FL_RETURN_CHANGED); + fl_set_input_return(bbox_->input_bb_y1, FL_RETURN_CHANGED); + + fl_set_input_filter(bbox_->input_bb_x0, fl_unsigned_float_filter); + fl_set_input_filter(bbox_->input_bb_y0, fl_unsigned_float_filter); + fl_set_input_filter(bbox_->input_bb_y1, fl_unsigned_float_filter); + string const bb_units = "bp|cm|mm|in"; fl_addto_choice(bbox_->choice_bb_units, bb_units.c_str()); - bc().addReadOnly(bbox_->button_getBB); - bc().addReadOnly(bbox_->check_clip); // set up the tooltips for the bounding-box-section str = _("The lower left x-value of the bounding box"); tooltips().init(bbox_->input_bb_x0, str); str = _("The lower left y-value of the bounding box"); tooltips().init(bbox_->input_bb_y0, str); - str = _("The upper right x-value of the bounding box"); + str = _("The upper right x-value of the bounding box; " + "only this input field allows length + unit, e.g. 5cm " + "and sets the unit for the other input fields"); tooltips().init(bbox_->input_bb_x1, str); str = _("The upper right y-value of the bounding box"); tooltips().init(bbox_->input_bb_y1, str); str = _("Select unit for the bounding box values"); tooltips().init(bbox_->choice_bb_units, str); - str = _("Read the image coordinates new from file. If it's an (e)ps-file " - "then the bounding box is read otherwise the imagesize in pixels. " - "Default unit is \"bp\", the PostScript's b(ig) p(oint)."); + str = _("Read the image coordinates new from file. For (e)ps-file " + "the bounding box is read, otherwise the imagesize in pixels. " + "Default unit is \"bp\", the PostScript's b(ig) p(oint)"); tooltips().init(bbox_->button_getBB, str); - str = _("Clip image to the bounding box values."); + str = _("Clip image to the bounding box values"); tooltips().init(bbox_->check_clip, str); // the extra section extra_.reset(build_graphics_extra(this)); - fl_set_input_return (extra_->input_rotate_angle, FL_RETURN_CHANGED); - fl_set_input_return (extra_->input_subcaption, FL_RETURN_CHANGED); - fl_set_input_return (extra_->input_special, FL_RETURN_CHANGED); - - fl_set_input_filter(extra_->input_rotate_angle, fl_float_filter); + // disable for read-only documents + bc().addReadOnly(extra_->input_rotate_angle); + bc().addReadOnly(extra_->choice_origin); + bc().addReadOnly(extra_->check_subcaption); + bc().addReadOnly(extra_->input_special); + // trigger an input event for cut&paste with middle mouse button. setPrehandler(extra_->input_rotate_angle); setPrehandler(extra_->input_subcaption); setPrehandler(extra_->input_special); - bc().addReadOnly(extra_->check_subcaption); + fl_set_input_return(extra_->input_rotate_angle, FL_RETURN_CHANGED); + fl_set_input_return(extra_->input_subcaption, FL_RETURN_CHANGED); + fl_set_input_return(extra_->input_special, FL_RETURN_CHANGED); + + fl_set_input_filter(extra_->input_rotate_angle, fl_float_filter); using namespace frnt; vector origindata = getRotationOriginData(); @@ -216,16 +238,17 @@ void FormGraphics::build() // set up the tooltips for the extra section str = _("Insert the rotation angle in degrees. " - "Positive value rotates anti-clockwise, negative value clockwise."); + "Positive value rotates anti-clockwise, " + "negative value clockwise"); tooltips().init(extra_->input_rotate_angle, str); - str = _("Insert the point of origin for rotation."); + str = _("Insert the point of origin for rotation"); tooltips().init(extra_->choice_origin, str); - str = _("Enables use of subfigure with its own caption."); + str = _("Enables use of subfigure with its own caption"); tooltips().init(extra_->check_subcaption, str); - str = _("Insert the optional subfigure caption."); + str = _("Insert the optional subfigure caption"); tooltips().init(extra_->input_subcaption, str); str = _("Add any additional latex option, which is defined in the " - "graphicx-package and not mentioned in the gui's tabfolders."); + "graphicx-package and not mentioned in the gui's tabfolders"); tooltips().init(extra_->input_special, str); // add the different tabfolders @@ -264,58 +287,95 @@ void FormGraphics::apply() } switch (fl_get_choice(file_->choice_display)) { - case 5: igp.display = grfx::NoDisplay; break; - case 4: igp.display = grfx::ColorDisplay; break; - case 3: igp.display = grfx::GrayscaleDisplay; break; - case 2: igp.display = grfx::MonochromeDisplay; break; - case 1: - default: igp.display = grfx::DefaultDisplay; + case 5: + igp.display = grfx::NoDisplay; + break; + case 4: + igp.display = grfx::ColorDisplay; + break; + case 3: + igp.display = grfx::GrayscaleDisplay; + break; + case 2: + igp.display = grfx::MonochromeDisplay; + break; + case 1: + igp.display = grfx::DefaultDisplay; } // first item in choice_width means scaling if (fl_get_choice(file_->choice_width) == 1) { - igp.scale = strToInt(getString(file_->input_width)); - if (igp.scale == 0) { - igp.scale = 100; + igp.scale = strToDbl(getString(file_->input_width)); + if (igp.scale == 0.0) { + igp.scale = 100.0; } igp.width = LyXLength(); } else { - igp.scale = 0; - igp.width = getLyXLengthFromWidgets(file_->input_width, - file_->choice_width); + igp.scale = 0.0; + igp.width = LyXLength(getLengthFromWidgets(file_->input_width, + file_->choice_width)); } - igp.height = getLyXLengthFromWidgets(file_->input_height, - file_->choice_height); + igp.height = LyXLength(getLengthFromWidgets(file_->input_height, + file_->choice_height)); igp.keepAspectRatio = fl_get_button(file_->check_aspectratio); igp.draft = fl_get_button(file_->check_draft); igp.noUnzip = fl_get_button(file_->check_nounzip); // the bb section - if (!controller().bbChanged) { // different to the original one? - igp.bb = string(); // don't write anything + if (!controller().bbChanged) { + // don't write anything + igp.bb.erase(); } else { + // allow length + unit input only for x1 input field + string x1_str = "0"; + if (!getString(bbox_->input_bb_x1).empty()) { + x1_str = getLengthFromWidgets(bbox_->input_bb_x1, + bbox_->choice_bb_units); + LyXLength x1 = LyXLength(x1_str); + x1_str = x1.asString(); + + string unit; + switch (x1.unit()) { + case LyXLength::IN: + unit = "in"; + break; + case LyXLength::MM: + unit = "mm"; + break; + case LyXLength::CM: + unit = "cm"; + break; + case LyXLength::BP: + default: + unit = "bp"; + } + fl_set_choice_text(bbox_->choice_bb_units, unit.c_str()); + } + string bb; if (getString(bbox_->input_bb_x0).empty()) - bb = "0 "; + bb = "0"; else bb = getLengthFromWidgets(bbox_->input_bb_x0, - bbox_->choice_bb_units)+" "; + bbox_->choice_bb_units); + + bb += " "; + if (getString(bbox_->input_bb_y0).empty()) - bb += "0 "; + bb += "0"; else - bb += (getLengthFromWidgets(bbox_->input_bb_y0, - bbox_->choice_bb_units)+" "); - if (getString(bbox_->input_bb_x1).empty()) - bb += "0 "; - else - bb += (getLengthFromWidgets(bbox_->input_bb_x1, - bbox_->choice_bb_units)+" "); + bb += getLengthFromWidgets(bbox_->input_bb_y0, + bbox_->choice_bb_units); + + bb += " " + x1_str + " "; + if (getString(bbox_->input_bb_y1).empty()) - bb += "0 "; + bb += "0"; else - bb += (getLengthFromWidgets(bbox_->input_bb_y1, - bbox_->choice_bb_units)+" "); + bb += getLengthFromWidgets(bbox_->input_bb_y1, + bbox_->choice_bb_units); + igp.bb = bb; } igp.clip = fl_get_button(bbox_->check_clip); @@ -355,40 +415,50 @@ void FormGraphics::update() { fl_set_input(file_->input_lyxscale, tostr(igp.lyxscale).c_str()); switch (igp.display) { - case grfx::NoDisplay: fl_set_choice(file_->choice_display, 5); break; - case grfx::ColorDisplay: fl_set_choice(file_->choice_display, 4); break; - case grfx::GrayscaleDisplay: fl_set_choice(file_->choice_display, 3); break; - case grfx::MonochromeDisplay: fl_set_choice(file_->choice_display, 2); break; - case grfx::DefaultDisplay: - default: fl_set_choice(file_->choice_display, 1); + case grfx::NoDisplay: + fl_set_choice(file_->choice_display, 5); + break; + case grfx::ColorDisplay: + fl_set_choice(file_->choice_display, 4); + break; + case grfx::GrayscaleDisplay: + fl_set_choice(file_->choice_display, 3); + break; + case grfx::MonochromeDisplay: + fl_set_choice(file_->choice_display, 2); + break; + case grfx::DefaultDisplay: + fl_set_choice(file_->choice_display, 1); } - // disable height input in case of scaling - setEnabled(file_->input_height, !igp.scale); - setEnabled(file_->choice_height, !igp.scale); - // set width input fields according to scaling or width/height input if (igp.scale) { - fl_set_input_filter(file_->input_width, fl_unsigned_int_filter); + fl_set_input_filter(file_->input_width, fl_unsigned_float_filter); fl_set_input_maxchars(file_->input_width, 0); fl_set_input(file_->input_width, tostr(igp.scale).c_str()); fl_set_choice(file_->choice_width, 1); } else { fl_set_input_filter(file_->input_width, NULL); fl_set_input_maxchars(file_->input_width, SIZE_MAXDIGITS); - updateWidgetsFromLength(file_->input_width, - file_->choice_width, igp.width, defaultUnit); + updateWidgetsFromLength(file_->input_width, file_->choice_width, + igp.width, defaultUnit); } - updateWidgetsFromLength(file_->input_height, - file_->choice_height, igp.height, defaultUnit); + updateWidgetsFromLength(file_->input_height, file_->choice_height, + igp.height, defaultUnit); + + // disable height input in case of scaling + bool const disable_height = igp.scale != 0.0; + setEnabled(file_->input_height, !disable_height); + setEnabled(file_->choice_height, !disable_height); fl_set_button(file_->check_aspectratio, igp.keepAspectRatio); fl_set_button(file_->check_draft, igp.draft); fl_set_button(file_->check_nounzip, igp.noUnzip); - // disable aspectratio button in case of scaling or one of width/height is empty - bool const disable_aspectRatio = igp.scale || + // disable aspectratio button in case of scaling or one of width/height + // is empty + bool const disable_aspectRatio = disable_height || getString(file_->input_width).empty() || getString(file_->input_height).empty(); setEnabled(file_->check_aspectratio, !disable_aspectRatio); @@ -399,7 +469,6 @@ void FormGraphics::update() { updateBB(igp.filename, igp.bb); fl_set_button(bbox_->check_clip, igp.clip); - // the extra section fl_set_input(extra_->input_rotate_angle, tostr(igp.rotateAngle).c_str()); @@ -432,7 +501,8 @@ void FormGraphics::updateBB(string const & filename, string const & bb_inset) // path, because the controller knows nothing about the doc-dir controller().bbChanged = false; if (bb_inset.empty()) { - lyxerr[Debug::GRAPHICS] << "FormGraphics::updateBB() [no BoundingBox]" << endl; + lyxerr[Debug::GRAPHICS] + << "FormGraphics::updateBB() [no BoundingBox]" << endl; string const bb = controller().readBB(filename); if (!bb.empty()) { // get the values from the file @@ -458,9 +528,9 @@ void FormGraphics::updateBB(string const & filename, string const & bb_inset) } else { // get the values from the inset - lyxerr[Debug::GRAPHICS] << "FormGraphics::updateBB(): igp has BoundingBox" - << " ["<< bb_inset << "]" - << endl; + lyxerr[Debug::GRAPHICS] + << "FormGraphics::updateBB(): igp has BoundingBox" + << " ["<< bb_inset << "]" << endl; controller().bbChanged = true; LyXLength anyLength; @@ -480,18 +550,6 @@ void FormGraphics::updateBB(string const & filename, string const & bb_inset) } -namespace { - -bool isValid(FL_OBJECT * ob) -{ - string const input = getString(ob); - return input.empty() || isValidLength(input) || isStrDbl(input); -} - -} // namespace anon - - - ButtonPolicy::SMInput FormGraphics::input(FL_OBJECT * ob, long) { // the file section @@ -499,7 +557,8 @@ ButtonPolicy::SMInput FormGraphics::input(FL_OBJECT * ob, long) // Get the filename from the dialog string const in_name = getString(file_->input_filename); string const out_name = controller().Browse(in_name); - lyxerr[Debug::GRAPHICS] << "[FormGraphics]out_name: " << out_name << endl; + lyxerr[Debug::GRAPHICS] + << "[FormGraphics]out_name: " << out_name << endl; if (out_name != in_name && !out_name.empty()) { fl_set_input(file_->input_filename, out_name.c_str()); } @@ -508,7 +567,8 @@ ButtonPolicy::SMInput FormGraphics::input(FL_OBJECT * ob, long) updateBB(out_name, string()); } } else if (ob == file_->input_width || ob == file_->input_height) { - // disable aspectratio button in case of scaling or one of width/height is empty + // disable aspectratio button in case of scaling or one of + // width/height is empty bool const disable = fl_get_choice(file_->choice_width) == 1 || getString(file_->input_width).empty() || getString(file_->input_height).empty(); @@ -528,8 +588,10 @@ ButtonPolicy::SMInput FormGraphics::input(FL_OBJECT * ob, long) fl_set_input_maxchars(file_->input_width, SIZE_MAXDIGITS); } - // disable aspectratio button in case of scaling or height input is empty - bool const disable_aspectratio = scaling || getString(file_->input_height).empty(); + // disable aspectratio button in case of scaling or height + // input is empty + bool const disable_aspectratio = + scaling || getString(file_->input_height).empty(); setEnabled(file_->check_aspectratio, !disable_aspectratio); // the bb section } else if (!controller().bbChanged && @@ -563,15 +625,5 @@ ButtonPolicy::SMInput FormGraphics::input(FL_OBJECT * ob, long) } - // check if the input is valid - bool const invalid = !isValid(file_->input_width) || !isValid(file_->input_height); - - // deactivate OK / Apply buttons and spit out warnings if invalid - if (invalid) { - postWarning(_("Invalid Length in Output size!")); - return ButtonPolicy::SMI_INVALID; - } else { - clearMessage(); - return ButtonPolicy::SMI_VALID; - } + return ButtonPolicy::SMI_VALID; } diff --git a/src/frontends/xforms/forms/form_graphics.fd b/src/frontends/xforms/forms/form_graphics.fd index 399a545b03..3a7d6967ee 100644 --- a/src/frontends/xforms/forms/form_graphics.fd +++ b/src/frontends/xforms/forms/form_graphics.fd @@ -9,14 +9,14 @@ SnapGrid: 5 =============== FORM =============== Name: form_graphics -Width: 400 -Height: 325 -Number of Objects: 7 +Width: 395 +Height: 300 +Number of Objects: 6 -------------------- class: FL_BOX type: FLAT_BOX -box: 0 0 400 325 +box: 0 0 395 300 boxtype: FL_FLAT_BOX colors: FL_COL1 FL_COL1 alignment: FL_ALIGN_CENTER @@ -34,7 +34,7 @@ argument: -------------------- class: FL_TABFOLDER type: TOP_TABFOLDER -box: 0 5 400 255 +box: 0 5 395 260 boxtype: FL_FRAME_BOX colors: FL_COL1 FL_COL1 alignment: FL_ALIGN_TOP_LEFT @@ -52,7 +52,7 @@ argument: -------------------- class: FL_BUTTON type: NORMAL_BUTTON -box: 5 295 100 25 +box: 5 270 90 25 boxtype: FL_UP_BOX colors: FL_COL1 FL_COL1 alignment: FL_ALIGN_CENTER @@ -70,7 +70,7 @@ argument: 0 -------------------- class: FL_BUTTON type: RETURN_BUTTON -box: 115 295 90 25 +box: 110 270 90 25 boxtype: FL_UP_BOX colors: FL_COL1 FL_COL1 alignment: FL_ALIGN_CENTER @@ -88,7 +88,7 @@ argument: 0 -------------------- class: FL_BUTTON type: NORMAL_BUTTON -box: 305 295 90 25 +box: 300 270 90 25 boxtype: FL_UP_BOX colors: FL_COL1 FL_COL1 alignment: FL_ALIGN_CENTER @@ -106,7 +106,7 @@ argument: 0 -------------------- class: FL_BUTTON type: NORMAL_BUTTON -box: 210 295 90 25 +box: 205 270 90 25 boxtype: FL_UP_BOX colors: FL_COL1 FL_COL1 alignment: FL_ALIGN_CENTER @@ -121,34 +121,16 @@ name: button_apply callback: C_FormBaseApplyCB argument: 0 --------------------- -class: FL_TEXT -type: NORMAL_TEXT -box: 0 265 400 25 -boxtype: FL_FLAT_BOX -colors: FL_COL1 FL_MCOL -alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE -style: FL_NORMAL_STYLE -size: FL_DEFAULT_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_NONE -gravity: FL_NoGravity FL_NoGravity -name: text_warning -callback: C_FormBaseInputCB -argument: 0 - =============== FORM =============== Name: form_graphics_file -Width: 400 +Width: 395 Height: 235 Number of Objects: 15 -------------------- class: FL_BOX type: FLAT_BOX -box: 0 0 400 235 +box: 0 0 395 235 boxtype: FL_FLAT_BOX colors: FL_COL1 FL_COL1 alignment: FL_ALIGN_CENTER @@ -166,7 +148,7 @@ argument: -------------------- class: FL_LABELFRAME type: ENGRAVED_FRAME -box: 5 125 390 105 +box: 5 125 385 105 boxtype: FL_NO_BOX colors: FL_BLACK FL_COL1 alignment: FL_ALIGN_TOP_LEFT @@ -184,7 +166,7 @@ argument: -------------------- class: FL_INPUT type: NORMAL_INPUT -box: 60 10 230 25 +box: 60 10 225 25 boxtype: FL_DOWN_BOX colors: FL_COL1 FL_MCOL alignment: FL_ALIGN_LEFT @@ -202,7 +184,7 @@ argument: 0 -------------------- class: FL_BUTTON type: NORMAL_BUTTON -box: 295 10 100 25 +box: 290 10 100 25 boxtype: FL_UP_BOX colors: FL_COL1 FL_COL1 alignment: FL_ALIGN_CENTER @@ -220,7 +202,7 @@ argument: 0 -------------------- class: FL_LABELFRAME type: ENGRAVED_FRAME -box: 5 55 390 60 +box: 5 55 385 60 boxtype: FL_NO_BOX colors: FL_BLACK FL_COL1 alignment: FL_ALIGN_TOP_LEFT @@ -245,7 +227,7 @@ alignment: FL_ALIGN_CENTER style: FL_NORMAL_STYLE size: FL_NORMAL_SIZE lcol: FL_BLACK -label: Draft mode|#m +label: Draft mode|#a shortcut: resize: FL_RESIZE_NONE gravity: FL_East FL_East @@ -353,7 +335,7 @@ alignment: FL_ALIGN_CENTER style: FL_NORMAL_STYLE size: FL_NORMAL_SIZE lcol: FL_BLACK -label: Maintain aspect ratio|#a +label: Maintain aspect ratio|#M shortcut: resize: FL_RESIZE_NONE gravity: FL_West FL_West @@ -400,7 +382,7 @@ argument: -------------------- class: FL_CHOICE type: NORMAL_CHOICE -box: 270 70 115 25 +box: 265 70 115 25 boxtype: FL_FRAME_BOX colors: FL_COL1 FL_BLACK alignment: FL_ALIGN_LEFT @@ -417,14 +399,14 @@ argument: 0 =============== FORM =============== Name: form_graphics_bbox -Width: 400 +Width: 395 Height: 235 Number of Objects: 10 -------------------- class: FL_BOX type: FLAT_BOX -box: 0 0 400 235 +box: 0 0 395 235 boxtype: FL_FLAT_BOX colors: FL_COL1 FL_COL1 alignment: FL_ALIGN_CENTER @@ -525,7 +507,7 @@ label: X shortcut: resize: FL_RESIZE_NONE gravity: FL_North FL_North -name: +name: text_X callback: argument: @@ -603,14 +585,14 @@ argument: 0 =============== FORM =============== Name: form_graphics_extra -Width: 400 +Width: 395 Height: 235 Number of Objects: 8 -------------------- class: FL_BOX type: FLAT_BOX -box: 0 0 400 235 +box: 0 0 395 235 boxtype: FL_FLAT_BOX colors: FL_COL1 FL_COL1 alignment: FL_ALIGN_CENTER @@ -628,7 +610,7 @@ argument: -------------------- class: FL_LABELFRAME type: ENGRAVED_FRAME -box: 5 20 390 55 +box: 5 20 385 55 boxtype: FL_NO_BOX colors: FL_BLACK FL_COL1 alignment: FL_ALIGN_TOP_LEFT @@ -646,7 +628,7 @@ argument: -------------------- class: FL_INPUT type: NORMAL_INPUT -box: 115 165 275 25 +box: 115 165 270 25 boxtype: FL_DOWN_BOX colors: FL_COL1 FL_MCOL alignment: FL_ALIGN_LEFT @@ -682,7 +664,7 @@ argument: -------------------- class: FL_CHOICE type: NORMAL_CHOICE -box: 250 35 135 25 +box: 245 35 135 25 boxtype: FL_FRAME_BOX colors: FL_COL1 FL_BLACK alignment: FL_ALIGN_LEFT @@ -736,7 +718,7 @@ argument: 0 -------------------- class: FL_INPUT type: NORMAL_INPUT -box: 115 105 275 25 +box: 115 105 270 25 boxtype: FL_DOWN_BOX colors: FL_COL1 FL_MCOL alignment: FL_ALIGN_LEFT diff --git a/src/insets/ChangeLog b/src/insets/ChangeLog index 06713ec1eb..34aa1964f3 100644 --- a/src/insets/ChangeLog +++ b/src/insets/ChangeLog @@ -1,3 +1,11 @@ +2002-10-24 Rob Lahaye + + * insetgraphicsParams.h (scale): is now a float, not an unsigned int. + + * insetgraphicsParams.C (init, Write): associated changes + * insetgraphics.C (createLatexOptions): use lyx::float_equal with + InsetGraphicsParams::scale. + 2002-10-21 John Levon * inset.h: remove unused DISPATCH_RESULT diff --git a/src/insets/insetgraphics.C b/src/insets/insetgraphics.C index 649fc0abbf..dbaf7813e4 100644 --- a/src/insets/insetgraphics.C +++ b/src/insets/insetgraphics.C @@ -85,6 +85,7 @@ TODO #include "support/LAssert.h" #include "support/filetools.h" #include "support/lyxalgo.h" // lyx::count +#include "support/lyxlib.h" // float_equal #include "support/path.h" #include "support/systemcall.h" #include "support/os.h" @@ -469,9 +470,10 @@ string const InsetGraphics::createLatexOptions() const if (params().clip) options << " clip,\n"; - if (params().scale) { - if (params().scale != 100) - options << " scale=" << params().scale / 100.0 << ",\n"; + if (!lyx::float_equal(params().scale, 0.0, 0.05)) { + if (!lyx::float_equal(params().scale, 100.0, 0.05)) + options << " scale=" << params().scale / 100.0 + << ",\n"; } else { if (!params().width.zero()) options << " width=" << params().width.asLatexString() << ",\n"; diff --git a/src/insets/insetgraphicsParams.C b/src/insets/insetgraphicsParams.C index af52942f77..2a4c0b0040 100644 --- a/src/insets/insetgraphicsParams.C +++ b/src/insets/insetgraphicsParams.C @@ -58,7 +58,7 @@ void InsetGraphicsParams::init() filename.erase(); lyxscale = 100; // lyx scaling in percentage display = grfx::DefaultDisplay; // display mode; see preferences - scale = 100; // output scaling in percentage + scale = 100.0; // output scaling in percentage width = LyXLength(); height = LyXLength(); keepAspectRatio = false; // for LaTeX output @@ -143,7 +143,7 @@ void InsetGraphicsParams::Write(ostream & os) const if (display != grfx::DefaultDisplay) os << "\tdisplay " << grfx::displayTranslator.find(display) << '\n'; if (scale) { - if (scale != 100) + if (!lyx::float_equal(scale, 100.0, 0.05)) os << "\tscale " << scale << '\n'; } else { if (!width.zero()) @@ -191,11 +191,11 @@ bool InsetGraphicsParams::Read(LyXLex & lex, string const & token) display = grfx::displayTranslator.find(type); } else if (token == "scale") { lex.next(); - scale = lex.getInteger(); + scale = lex.getFloat(); } else if (token == "width") { lex.next(); width = LyXLength(lex.getString()); - scale = 0; + scale = 0.0; } else if (token == "height") { lex.next(); height = LyXLength(lex.getString()); @@ -228,11 +228,14 @@ bool InsetGraphicsParams::Read(LyXLex & lex, string const & token) special = lex.getString(); // catch and ignore following two old-format tokens and their arguments. - // e.g. "size_kind scale" clashes with the setting of the "scale" keyword. + // e.g. "size_kind scale" clashes with the setting of the + // "scale " keyword. } else if (token == "size_kind" || token == "lyxsize_kind") { lex.next(); lex.getString(); - } else { // If it's none of the above, it's not ours. + + } else { + // If it's none of the above, it's not ours. return false; } return true; diff --git a/src/insets/insetgraphicsParams.h b/src/insets/insetgraphicsParams.h index 11a379d02d..24b2098da8 100644 --- a/src/insets/insetgraphicsParams.h +++ b/src/insets/insetgraphicsParams.h @@ -37,7 +37,7 @@ struct InsetGraphicsParams /// How to display the image inside LyX grfx::DisplayType display; /// Scaling for output (LaTeX) - unsigned int scale; + float scale; /// sizes for output (LaTeX) LyXLength width; ///