]> git.lyx.org Git - features.git/commitdiff
Herbert's big graphics patch.
authorAngus Leeming <leeming@lyx.org>
Tue, 29 Jan 2002 09:26:24 +0000 (09:26 +0000)
committerAngus Leeming <leeming@lyx.org>
Tue, 29 Jan 2002 09:26:24 +0000 (09:26 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@3446 a592a061-630c-0410-9148-cb99ea01b6c8

21 files changed:
lib/ChangeLog
lib/help/Graphics.hlp [new file with mode: 0644]
src/ChangeLog
src/buffer.C
src/frontends/controllers/ChangeLog
src/frontends/controllers/ControlGraphics.C
src/frontends/controllers/ControlGraphics.h
src/frontends/xforms/ChangeLog
src/frontends/xforms/FormGraphics.C
src/frontends/xforms/FormGraphics.h
src/frontends/xforms/form_graphics.C
src/frontends/xforms/form_graphics.h
src/frontends/xforms/forms/form_graphics.fd
src/frontends/xforms/xforms_helpers.h
src/graphics/ChangeLog
src/graphics/GraphicsCacheItem.h
src/insets/ChangeLog
src/insets/insetgraphics.C
src/insets/insetgraphics.h
src/insets/insetgraphicsParams.C
src/insets/insetgraphicsParams.h

index 6af785f3b766d70801630e5b051a75e7b906d359..a5c1f65cbf6918690398927ac5a743545abeb3a6 100644 (file)
@@ -1,3 +1,7 @@
+2002-01-27  Herbert Voss  <voss@lyx.org>
+
+       * help/Graphics.hlp: added, but not finished
+
 2002-01-26  Dekel Tsur  <dekelts@tau.ac.il>
 
        * fonts-xlfd:
 2002-01-26  Dekel Tsur  <dekelts@tau.ac.il>
 
        * fonts-xlfd:
diff --git a/lib/help/Graphics.hlp b/lib/help/Graphics.hlp
new file mode 100644 (file)
index 0000000..c5c0213
--- /dev/null
@@ -0,0 +1,8 @@
+@bFilename:
+    You do not need the extension like *eps, when your
+    config file of graphicx is present and has such
+    entries.
+@bBounding Box:
+    The image size in Pixeln. Given through lower left
+    corner (x0,y0) and upper right corner (y1,y2)
+    
index 734f2525601c86357ce70ca94f361bf809a7195d..38b7be22ab47710be916981109f230672d35f481 100644 (file)
@@ -1,3 +1,7 @@
+2002-01-27  Herbert Voss  <voss@lyx.org>
+
+       * buffer.C: link old Figure to new graphic inset
+
 2002-01-26  Dekel Tsur  <dekelts@tau.ac.il>
 
        * FontLoader.C (getFontinfo): Change the latex font names in order
 2002-01-26  Dekel Tsur  <dekelts@tau.ac.il>
 
        * FontLoader.C (getFontinfo): Change the latex font names in order
index 2e09363d36f347a5be99aca7cb2045cd3aa7fbbf..3e6a4e3a2b11cf6e0d61de0627490985655117af 100644 (file)
@@ -1513,8 +1513,8 @@ void Buffer::readInset(LyXLex & lex, Paragraph *& par,
                } else if (tmptok == "Formula") {
                        inset = new InsetFormula;
                } else if (tmptok == "Figure") { // Backward compatibility
                } else if (tmptok == "Formula") {
                        inset = new InsetFormula;
                } else if (tmptok == "Figure") { // Backward compatibility
-                       inset = new InsetFig(100, 100, *this);
-                       //inset = new InsetGraphics;
+//                     inset = new InsetFig(100, 100, *this);
+                       inset = new InsetGraphics;
                } else if (tmptok == "Graphics") {
                        inset = new InsetGraphics;
                } else if (tmptok == "Info") {// backwards compatibility
                } else if (tmptok == "Graphics") {
                        inset = new InsetGraphics;
                } else if (tmptok == "Info") {// backwards compatibility
index f33918b6ec64fddb342aa88e787f7100378223f7..de95441ba3f8780bae7b08003f235d7ea94b0cf4 100644 (file)
@@ -1,3 +1,8 @@
+2002-01-27  Herbert Voss  <voss@lyx.org>
+
+       * ControlGraphic.[Ch]: added support for Bounding Box, other
+       small changes
+
 2002-01-25  Angus Leeming  <a.leeming@ic.ac.uk>
 
        * ControlAboutlyx.h:
 2002-01-25  Angus Leeming  <a.leeming@ic.ac.uk>
 
        * ControlAboutlyx.h:
index a3675b159d3ea4dcd79aa88bf0c060dac6b316d3..e7964cc3a1f7f91d045ed06fbe5ed321aad51b35 100644 (file)
@@ -9,9 +9,11 @@
  *
  * \file ControlGraphics.C
  * \author Angus Leeming <a.leeming@ic.ac.uk>
  *
  * \file ControlGraphics.C
  * \author Angus Leeming <a.leeming@ic.ac.uk>
+ * \author Herbert Voss <voss@perce.de>
  */
 
 #include <config.h> 
  */
 
 #include <config.h> 
+#include <fstream>
 
 #ifdef __GNUG__
 #pragma implementation
 
 #ifdef __GNUG__
 #pragma implementation
 
 #include "support/FileInfo.h"  // for FileInfo
 #include "helper_funcs.h"      // for browseFile
 
 #include "support/FileInfo.h"  // for FileInfo
 #include "helper_funcs.h"      // for browseFile
+#include "support/lstrings.h"
 #include "support/filetools.h" // for AddName
 #include "BufferView.h"
 
 using std::pair;
 using std::make_pair;
 
 #include "support/filetools.h" // for AddName
 #include "BufferView.h"
 
 using std::pair;
 using std::make_pair;
 
+using std::ifstream;
+
 ControlGraphics::ControlGraphics(LyXView & lv, Dialogs & d)
        : ControlInset<InsetGraphics, InsetGraphicsParams>(lv, d)
 {
 ControlGraphics::ControlGraphics(LyXView & lv, Dialogs & d)
        : ControlInset<InsetGraphics, InsetGraphicsParams>(lv, d)
 {
@@ -80,7 +85,7 @@ string const ControlGraphics::Browse(string const & in_name)
 {
        string const title = N_("Graphics");
        // FIXME: currently we need the second '|' to prevent mis-interpretation 
 {
        string const title = N_("Graphics");
        // FIXME: currently we need the second '|' to prevent mis-interpretation 
-       string const pattern = "*.(ps|eps|png|jpeg|jpg|gif)|";
+       string const pattern = "*.(ps|eps|png|jpeg|jpg|gif|gz)|";
 
        // Does user clipart directory exist?
        string clipdir = AddName (user_lyxdir, "clipart");
 
        // Does user clipart directory exist?
        string clipdir = AddName (user_lyxdir, "clipart");
@@ -93,3 +98,33 @@ string const ControlGraphics::Browse(string const & in_name)
        // Show the file browser dialog
        return browseFile(&lv_, in_name, title, pattern, dir1);
 }
        // Show the file browser dialog
        return browseFile(&lv_, in_name, title, pattern, dir1);
 }
+
+string const ControlGraphics::readBB(string const & file)
+{
+// in a file it's an entry like %%BoundingBox:23 45 321 345
+// the first number can following without a space, so we have
+// to check a bit more. 
+//     ControlGraphics::bbChanged = false;
+       std::ifstream is(file.c_str());
+       while (is) {
+               string s;
+               is >> s;
+               if (contains(s,"%%BoundingBox:")) {
+                       string a, b, c, d;
+                       is >> a >> b >> c >> d;
+                       if (is) {
+                               if (s != "%%BoundingBox:") 
+                                   return (s.substr(14)+" "+a+" "+b+" "+c+" ");
+                               else
+                                   return (a+" "+b+" "+c+" "+d+" ");
+                       }
+               }
+       }
+       return string();
+}
+
+void ControlGraphics::help() const
+{
+       lv_.getDialogs()->showFile(i18nLibFileSearch("help","Graphics.hlp"));
+}
+
index ba40f44bb1c5eba2f1a648d914a9ca2e66e60ad1..0c9dc1696f244ea7b54af5c88bd127879153d074 100644 (file)
@@ -10,7 +10,8 @@
  *
  * \file ControlGraphics.h
  * \author Angus Leeming <a.leeming@ic.ac.uk>
  *
  * \file ControlGraphics.h
  * \author Angus Leeming <a.leeming@ic.ac.uk>
- */
+ * \author Herbert Voss <voss@perce.de>
+*/
 
 #ifndef CONTROLGRAPHICS_H
 #define CONTROLGRAPHICS_H
 
 #ifndef CONTROLGRAPHICS_H
 #define CONTROLGRAPHICS_H
@@ -35,6 +36,12 @@ public:
 
        /// Browse for a file
        string const Browse(string const &);
 
        /// Browse for a file
        string const Browse(string const &);
+       /// Read the Bounding Box from a eps or ps-file
+       string const readBB(string const & file);
+       /// Control the bb
+       bool bbChanged;
+       /// Show Help file
+       void help() const;
 
 private:
        /// Dispatch the changed parameters to the kernel.
 
 private:
        /// Dispatch the changed parameters to the kernel.
@@ -48,3 +55,4 @@ private:
 };
 
 #endif // CONTROLGRAPHICS_H
 };
 
 #endif // CONTROLGRAPHICS_H
+
index af3136ed1d7cdd4c7e03336dd94aaee75ae2a2ae..590d44a465866c5faff117a9a699839e67656a31 100644 (file)
@@ -1,3 +1,13 @@
+2002-01-27  Herbert Voss  <voss@lyx.org>
+
+       * FormGraphic.[Ch]: 
+       * form_graphic.[Ch]: 
+       * forms/form_graphic.fd: rewritten to support graphicx with
+       all options and to be sure that the old figinsets are correct
+       converted.
+       * xforms-helpers.h: added two choice const for the LyXLength
+       one with all and one only with length which have a unit.
+
 2002-01-28  Angus Leeming  <a.leeming@ic.ac.uk>
 
        * FormAboutlyx.[Ch]: Removed redundant form() method and
 2002-01-28  Angus Leeming  <a.leeming@ic.ac.uk>
 
        * FormAboutlyx.[Ch]: Removed redundant form() method and
index 936c19bdcd954bc2799ddba8054ca0702fce7fa4..81a51d3eb9e0536ba62f3ef954946716027b1669 100644 (file)
@@ -26,7 +26,8 @@
 #include "input_validators.h"
 #include "debug.h" // for lyxerr
 #include "support/lstrings.h"  // for strToDbl & tostr
 #include "input_validators.h"
 #include "debug.h" // for lyxerr
 #include "support/lstrings.h"  // for strToDbl & tostr
-#include "support/FileInfo.h"  // for FileInfo
+#include "support/FileInfo.h"
+#include "support/filetools.h"  // for MakeAbsPath etc
 #include "insets/insetgraphicsParams.h"
 #include "lyxrc.h" // for lyxrc.display_graphics
 
 #include "insets/insetgraphicsParams.h"
 #include "lyxrc.h" // for lyxrc.display_graphics
 
@@ -34,22 +35,11 @@ using std::endl;
 
 namespace {
 
 
 namespace {
 
-// Zero test for double precision numbers
-double const tol = 1.0e-08;
-
-// The maximum digits for the image scale
+// Bound the number of input characters
 int const SCALE_MAXDIGITS = 3;
 int const SCALE_MAXDIGITS = 3;
-
-// The maximum digits for the image width
 int const WIDTH_MAXDIGITS = 3;
 int const WIDTH_MAXDIGITS = 3;
-
-// The maximum digits for the image height
 int const HEIGHT_MAXDIGITS = 3;
 int const HEIGHT_MAXDIGITS = 3;
-
-// The max characters in the rotation angle (minus sign and 3 digits)
 int const ROTATE_MAXCHARS = 4;
 int const ROTATE_MAXCHARS = 4;
-
-// The maximum characters in a filename.
 int const FILENAME_MAXCHARS = 1024;
  
 } // namespace anon
 int const FILENAME_MAXCHARS = 1024;
  
 } // namespace anon
@@ -62,63 +52,105 @@ FormGraphics::FormGraphics(ControlGraphics & c)
 {}
 
 
 {}
 
 
+void FormGraphics::redraw()
+{
+       if(form() && form()->visible)
+               fl_redraw_form(form());
+       else
+               return;
+
+       FL_FORM * outer_form = fl_get_active_folder(dialog_->tabFolder);
+       if (outer_form && outer_form->visible)
+               fl_redraw_form(outer_form);
+}
+
+
 void FormGraphics::build()
 {
        dialog_.reset(build_graphics());
 
 void FormGraphics::build()
 {
        dialog_.reset(build_graphics());
 
-       // This is the place to add settings of the dialog that did not go
-       // to the .fd file.
-
-       // Set the input widgets to issue a callback to input() whenever
-       // they change, so we can verify their content.
-       fl_set_input_return (dialog_->input_filename,     FL_RETURN_CHANGED);
-       fl_set_input_return (dialog_->input_scale,        FL_RETURN_CHANGED);
-       fl_set_input_return (dialog_->input_width,        FL_RETURN_CHANGED);
-       fl_set_input_return (dialog_->input_height,       FL_RETURN_CHANGED);
-       fl_set_input_return (dialog_->input_rotate_angle, FL_RETURN_CHANGED);
-       fl_set_input_return (dialog_->input_subcaption,   FL_RETURN_CHANGED);
-
-       // Set the maximum characters that can be written in the input texts.
-       fl_set_input_maxchars(dialog_->input_scale,        SCALE_MAXDIGITS);
-       fl_set_input_maxchars(dialog_->input_width,        WIDTH_MAXDIGITS);
-       fl_set_input_maxchars(dialog_->input_height,       HEIGHT_MAXDIGITS);
-       fl_set_input_maxchars(dialog_->input_filename,     FILENAME_MAXCHARS);
-       fl_set_input_maxchars(dialog_->input_rotate_angle, ROTATE_MAXCHARS);
-
-       // Set input filter on width and height to make them accept only
-       // unsigned numbers.
-       fl_set_input_filter(dialog_->input_scale,  fl_unsigned_float_filter);
-       fl_set_input_filter(dialog_->input_width,  fl_unsigned_float_filter);
-       fl_set_input_filter(dialog_->input_height, fl_unsigned_float_filter);
-
-       // Set input filter on rotate_angle to make it accept only
-       // floating point numbers.
-       fl_set_input_filter(dialog_->input_rotate_angle, fl_float_filter);
-
-       // Create the contents of the choices
-       string const width = " cm | inch | page %% | column %% ";
-       fl_addto_choice(dialog_->choice_width_units, width.c_str());
-
-       string const height = " cm | inch | page %% ";
-       fl_addto_choice(dialog_->choice_height_units, height.c_str());
-
         // Manage the ok, apply, restore and cancel/close buttons
        bc().setOK(dialog_->button_ok);
         // Manage the ok, apply, restore and cancel/close buttons
        bc().setOK(dialog_->button_ok);
-       bc().setApply(dialog_->button_apply);
+//     bc().setApply(dialog_->button_apply);
        bc().setCancel(dialog_->button_cancel);
        bc().setRestore(dialog_->button_restore);
 
        bc().setCancel(dialog_->button_cancel);
        bc().setRestore(dialog_->button_restore);
 
-       bc().addReadOnly(dialog_->input_filename);
-       bc().addReadOnly(dialog_->button_browse);
-       bc().addReadOnly(dialog_->check_display);
-       bc().addReadOnly(dialog_->input_scale);
-       bc().addReadOnly(dialog_->input_width);
-       bc().addReadOnly(dialog_->choice_width_units);
-       bc().addReadOnly(dialog_->input_height);
-       bc().addReadOnly(dialog_->choice_height_units);
-       bc().addReadOnly(dialog_->input_rotate_angle);
-       bc().addReadOnly(dialog_->input_subcaption);
-       bc().addReadOnly(dialog_->check_subcaption);
+       // the file section
+       file_.reset(build_file());
+
+       fl_set_input_return (file_->input_filename, FL_RETURN_CHANGED);
+       fl_set_input_return (file_->input_subcaption, FL_RETURN_CHANGED);
+       fl_set_input_return (file_->input_bbx0, FL_RETURN_CHANGED);
+       fl_set_input_return (file_->input_bby0, FL_RETURN_CHANGED);
+       fl_set_input_return (file_->input_bbx1, FL_RETURN_CHANGED);
+       fl_set_input_return (file_->input_bby1, FL_RETURN_CHANGED);
+       fl_set_input_maxchars(file_->input_filename,  FILENAME_MAXCHARS);
+
+       string const bb_units = "pt|cm|in";
+       fl_addto_choice(file_->choice_bb_x0, bb_units.c_str());
+       fl_addto_choice(file_->choice_bb_y0, bb_units.c_str());
+       fl_addto_choice(file_->choice_bb_x1, bb_units.c_str());
+       fl_addto_choice(file_->choice_bb_y1, bb_units.c_str());
+
+       bc().addReadOnly(file_->button_browse);
+       bc().addReadOnly(file_->check_subcaption);
+       bc().addReadOnly(file_->button_getBB);
+       bc().addReadOnly(file_->button_clip);
+       bc().addReadOnly(file_->button_draft);
+
+       // the size section
+       size_.reset(build_size());
+
+       fl_set_input_return (size_->input_scale, FL_RETURN_CHANGED);
+       fl_set_input_return (size_->input_width, FL_RETURN_CHANGED);
+       fl_set_input_return (size_->input_height, FL_RETURN_CHANGED);
+       fl_set_input_return (size_->input_lyxwidth, FL_RETURN_CHANGED);
+       fl_set_input_return (size_->input_lyxheight, FL_RETURN_CHANGED);
+
+       fl_set_input_maxchars(size_->input_scale, SCALE_MAXDIGITS);
+       fl_set_input_maxchars(size_->input_width, WIDTH_MAXDIGITS);
+       fl_set_input_maxchars(size_->input_height, HEIGHT_MAXDIGITS);
+
+       fl_set_input_filter(size_->input_scale,  fl_unsigned_float_filter);
+       fl_set_input_filter(size_->input_width,  fl_unsigned_float_filter);
+       fl_set_input_filter(size_->input_height, fl_unsigned_float_filter);
+
+       fl_addto_choice(size_->choice_width_units, choice_Length_All.c_str());
+       fl_addto_choice(size_->choice_height_units, choice_Length_All.c_str());
+       fl_addto_choice(size_->choice_width_lyxwidth, choice_Length_All.c_str());
+       fl_addto_choice(size_->choice_width_lyxheight, choice_Length_All.c_str());
+
+       bc().addReadOnly(size_->button_default);
+       bc().addReadOnly(size_->button_wh);
+       bc().addReadOnly(size_->button_scale);
+       bc().addReadOnly(size_->check_aspectratio);
+       bc().addReadOnly(size_->radio_check_display);
+       bc().addReadOnly(size_->radio_display_mono);
+       bc().addReadOnly(size_->radio_display_gray);
+       bc().addReadOnly(size_->radio_display_color);
+
+       // the rotate section
+       special_.reset(build_special());
+
+       fl_set_input_return (special_->input_rotate_angle, FL_RETURN_CHANGED);
+
+       string const choice_origin = 
+           "default|"                                  // not important
+           "leftTop|leftBottom|leftBaseline|"          // lt lb lB
+           "center|"                                   // c
+           "centerTop|centerBottom|centerBaseline|"    // ct cb cB
+           "rightTop|rightBottom|rightBaseline|"       // rt rb rB
+           "referencePoint";                           // special
+       fl_addto_choice(special_->choice_origin, choice_origin.c_str());
+
+       fl_set_input_return (special_->input_special, FL_RETURN_CHANGED);
+       fl_set_input_maxchars(special_->input_rotate_angle, ROTATE_MAXCHARS);
+       fl_set_input_filter(special_->input_rotate_angle, fl_float_filter);
+
+       // add the different tabfolders
+       fl_addto_tabfolder(dialog_->tabFolder, _("Filename"), file_->form);
+       fl_addto_tabfolder(dialog_->tabFolder, _("Image size"), size_->form);
+       fl_addto_tabfolder(dialog_->tabFolder, _("Special"), special_->form);
 }
 
 
 }
 
 
@@ -126,87 +158,57 @@ void FormGraphics::apply()
 {
        // Create the parameters structure and fill the data from the dialog.
        InsetGraphicsParams & igp = controller().params();
 {
        // Create the parameters structure and fill the data from the dialog.
        InsetGraphicsParams & igp = controller().params();
-
-       igp.filename = fl_get_input(dialog_->input_filename);
-
-       if (lyxrc.display_graphics == "no") {
+       igp.filename = getStringFromInput(file_->input_filename);
+       if (!controller().bbChanged)            // different to the original one?
+           igp.bb = string();                  // don't write anything     
+       else {
+           string bb;
+           if (getStringFromInput(file_->input_bbx0).empty())
+               bb = "0 ";
+           else
+               bb = getLengthFromWidgets(file_->input_bbx0,file_->choice_bb_x0)+" ";
+           if (getStringFromInput(file_->input_bby0).empty())
+               bb += "0 ";
+           else
+               bb += (getLengthFromWidgets(file_->input_bby0,file_->choice_bb_y0)+" ");
+           if (getStringFromInput(file_->input_bbx1).empty())
+               bb += "0 ";
+           else
+               bb += (getLengthFromWidgets(file_->input_bbx1,file_->choice_bb_x1)+" ");
+           if (getStringFromInput(file_->input_bby1).empty())
+               bb += "0 ";
+           else
+               bb += (getLengthFromWidgets(file_->input_bby1,file_->choice_bb_y1)+" ");
+           igp.bb = bb;
+       }
+       igp.draft = fl_get_button(file_->button_draft);
+       igp.clip = fl_get_button(file_->button_clip);
+       igp.subcaption = fl_get_button(file_->check_subcaption);
+       igp.subcaptionText = getStringFromInput(file_->input_subcaption);
+       if (fl_get_button(size_->radio_check_display)) {
                igp.display = InsetGraphicsParams::NONE;
                igp.display = InsetGraphicsParams::NONE;
-
-       } else {
-               if (fl_get_button(dialog_->check_display)) {
-                       if (lyxrc.display_graphics == "mono") {
-                               igp.display = InsetGraphicsParams::MONOCHROME;
-                       } else if (lyxrc.display_graphics == "gray") {
-                               igp.display = InsetGraphicsParams::GRAYSCALE;
-                       } else if (lyxrc.display_graphics == "color") {
-                               igp.display = InsetGraphicsParams::COLOR;
-                       }
-                       
-               } else {
-                       igp.display = InsetGraphicsParams::NONE;
-               }
+       } else if (fl_get_button(size_->radio_display_mono)) {
+               igp.display = InsetGraphicsParams::MONOCHROME;
+       } else if (fl_get_button(size_->radio_display_gray)) {
+               igp.display = InsetGraphicsParams::GRAYSCALE;
+       } else if (fl_get_button(size_->radio_display_color)) {
+               igp.display = InsetGraphicsParams::COLOR;
        }
        }
+       if (fl_get_button(size_->button_default))
+           igp.size_type = InsetGraphicsParams::DEFAULT_SIZE;
+       else if (fl_get_button(size_->button_wh))
+           igp.size_type = InsetGraphicsParams::WH;
+       else
+           igp.size_type = InsetGraphicsParams::SCALE;
+       igp.width = LyXLength(getLengthFromWidgets(size_->input_width,size_->choice_width_units));
+       igp.height = LyXLength(getLengthFromWidgets(size_->input_height,size_->choice_height_units));
+       igp.scale = strToInt(getStringFromInput(size_->input_scale));
+       igp.keepAspectRatio = fl_get_button(size_->check_aspectratio);
+       igp.lyxwidth = LyXLength(getLengthFromWidgets(size_->input_lyxwidth,size_->choice_width_lyxwidth));
+       igp.lyxheight = LyXLength(getLengthFromWidgets(size_->input_lyxheight,size_->choice_width_lyxheight));
 
 
-       double const scale =
-               strToDbl(strip(fl_get_input(dialog_->input_scale)));
-       if (scale < tol) {
-               double const width =
-                       strToDbl(strip(fl_get_input(dialog_->input_width)));
-
-               if (width < tol) {
-                       igp.widthResize = InsetGraphicsParams::DEFAULT_SIZE;
-                       igp.widthSize   = 0.0;
-               } else {
-                       switch (fl_get_choice(dialog_->choice_width_units)) {
-                       case 2:
-                               igp.widthResize = InsetGraphicsParams::INCH;
-                               break;
-                       case 3:
-                               igp.widthResize =
-                                       InsetGraphicsParams::PERCENT_PAGE;
-                               break;
-                       case 4:
-                               igp.widthResize =
-                                       InsetGraphicsParams::PERCENT_COLUMN;
-                               break;
-                       default:
-                               igp.widthResize = InsetGraphicsParams::CM;
-                               break;
-                       }
-                       igp.widthSize = width;
-               }
-               
-               double const height =
-                       strToDbl(strip(fl_get_input(dialog_->input_height)));
-               
-               if (height < tol) {
-                       igp.heightResize = InsetGraphicsParams::DEFAULT_SIZE;
-                       igp.heightSize   = 0.0;
-               } else {
-                       switch (fl_get_choice(dialog_->choice_height_units)) {
-                       case 2:
-                               igp.heightResize = InsetGraphicsParams::INCH;
-                               break;
-                       case 3:
-                               igp.heightResize =
-                                       InsetGraphicsParams::PERCENT_PAGE;
-                               break;
-                       default:
-                               igp.heightResize = InsetGraphicsParams::CM;
-                               break;
-                       }
-                       igp.heightSize = height;
-               }
-               
-       } else {
-               igp.widthResize  = InsetGraphicsParams::DEFAULT_SIZE;
-               igp.widthSize    = 0.0;
-               igp.heightResize = InsetGraphicsParams::SCALE;
-               igp.heightSize   = scale;
-       }
-       
        igp.rotateAngle =
        igp.rotateAngle =
-               strToDbl(strip(fl_get_input(dialog_->input_rotate_angle)));
+               strToDbl(getStringFromInput(special_->input_rotate_angle));
        while (igp.rotateAngle < 0.0 || igp.rotateAngle > 360.0) {
                if (igp.rotateAngle < 0.0) {
                        igp.rotateAngle += 360.0;
        while (igp.rotateAngle < 0.0 || igp.rotateAngle > 360.0) {
                if (igp.rotateAngle < 0.0) {
                        igp.rotateAngle += 360.0;
@@ -214,155 +216,177 @@ void FormGraphics::apply()
                        igp.rotateAngle -= 360.0;
                }
        }
                        igp.rotateAngle -= 360.0;
                }
        }
-
-       igp.subcaption = fl_get_button(dialog_->check_subcaption);
-       igp.subcaptionText = fl_get_input(dialog_->input_subcaption);
-
+       if (fl_get_choice(special_->choice_origin) > 0)
+           igp.rotateOrigin = fl_get_choice_text(special_->choice_origin);
+       else
+           igp.rotateOrigin = string();
+       igp.special = getStringFromInput(special_->input_special);
        igp.testInvariant();
 }
 
 
 void FormGraphics::update()
        igp.testInvariant();
 }
 
 
 void FormGraphics::update()
-{
+{      string unit = "cm";
+       if (lyxrc.default_papersize < 3)
+           unit = "in";
+       string const defaultUnit = string(unit); 
        // Update dialog with details from inset
        InsetGraphicsParams & igp = controller().params();
        // Update dialog with details from inset
        InsetGraphicsParams & igp = controller().params();
-
-       // Update the filename input field
-       fl_set_input(dialog_->input_filename,
-                    igp.filename.c_str());
-
-       // To display or not to display
-       if (lyxrc.display_graphics == "no") {
-               fl_set_button(dialog_->check_display, 0);
-       } else {
-               if (igp.display == InsetGraphicsParams::NONE) {
-                       fl_set_button(dialog_->check_display, 0);
-               } else {
-                       fl_set_button(dialog_->check_display, 1);
-               }
+       fl_set_input(file_->input_filename, igp.filename.c_str());
+       // set the bounding box values, if exists. First we need the whole
+       // path, because the controller knows nothing about the doc-dir
+       lyxerr << "GraphicsUpdate::BoundingBox = " << igp.bb << "\n";
+       controller().bbChanged = false;
+       if (igp.bb.empty()) {
+           string const fileWithAbsPath = MakeAbsPath(igp.filename, OnlyPath(igp.filename));   
+           string bb = controller().readBB(fileWithAbsPath);
+           lyxerr << "file::BoundingBox = " << bb << "\n";
+           if (!bb.empty()) {          
+               // get the values from the file
+               // in this case we always have the point-unit
+               fl_set_input(file_->input_bbx0, token(bb,' ',0).c_str());
+               fl_set_input(file_->input_bby0, token(bb,' ',1).c_str());
+               fl_set_input(file_->input_bbx1, token(bb,' ',2).c_str());
+               fl_set_input(file_->input_bby1, token(bb,' ',3).c_str());
+           }
+       } else {                                // get the values from the inset
+           controller().bbChanged = true;
+           LyXLength anyLength;
+           anyLength = LyXLength(token(igp.bb,' ',0));
+           updateWidgetsFromLength(file_->input_bbx0,file_->choice_bb_x0,anyLength,"pt");
+           anyLength = LyXLength(token(igp.bb,' ',1));
+           updateWidgetsFromLength(file_->input_bby0,file_->choice_bb_y0,anyLength,"pt");
+           anyLength = LyXLength(token(igp.bb,' ',2));
+           updateWidgetsFromLength(file_->input_bbx1,file_->choice_bb_x1,anyLength,"pt");
+           anyLength = LyXLength(token(igp.bb,' ',3));
+           updateWidgetsFromLength(file_->input_bby1,file_->choice_bb_y1,anyLength,"pt");
        }
        }
-
-       setEnabled(dialog_->check_display, (lyxrc.display_graphics != "no"));
-
-       if (igp.heightResize == InsetGraphicsParams::SCALE) {
-               string number = tostr(igp.heightSize);
-               fl_set_input(dialog_->input_scale, number.c_str());
-               fl_set_input(dialog_->input_width, "");
-               fl_set_choice(dialog_->choice_width_units, 1);
-               fl_set_input(dialog_->input_height, "");
-               fl_set_choice(dialog_->choice_height_units, 1);
-
-       } else {
-               fl_set_input(dialog_->input_scale, "");
-
-               string number;
-               if (igp.widthResize != InsetGraphicsParams::DEFAULT_SIZE) {
-                       number = tostr(igp.widthSize);
-               }
-               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;
-
-               case InsetGraphicsParams::PERCENT_PAGE:
-                       pos = 3; break;
-
-               case InsetGraphicsParams::PERCENT_COLUMN:
-                       pos = 4; break;
-
-               default:
-                       break;
-               }
-               fl_set_choice(dialog_->choice_width_units, pos);
-
-               number.erase();
-               if (igp.heightResize != InsetGraphicsParams::DEFAULT_SIZE) {
-                       number = tostr(igp.heightSize);
-               }
-               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;
-
-               case InsetGraphicsParams::PERCENT_PAGE:
-                       pos = 3; break;
-
-               default:
-                       break;
-               }
-               fl_set_choice(dialog_->choice_height_units, pos);
+       // Update the draft and clip mode
+       fl_set_button(file_->button_draft, igp.draft);
+       fl_set_button(file_->button_clip, igp.clip);
+       // Update the subcaption check button and input field
+       fl_set_button(file_->check_subcaption, igp.subcaption);
+       fl_set_input(file_->input_subcaption, igp.subcaptionText.c_str());
+       setEnabled(file_->input_subcaption,
+                  fl_get_button(file_->check_subcaption));
+       switch (igp.display) {
+           case InsetGraphicsParams::NONE: {   // dont't display
+               fl_set_button(size_->radio_check_display, 1);
+               break;
+           }
+           case InsetGraphicsParams::MONOCHROME: {
+               fl_set_button(size_->radio_display_mono, 1);
+               break;
+           }
+           case InsetGraphicsParams::GRAYSCALE: {
+               fl_set_button(size_->radio_display_gray, 1);
+               break;
+           }
+           case InsetGraphicsParams::COLOR: {
+               fl_set_button(size_->radio_display_color, 1);
+               break;
+           }
        }
        }
-               
-       // Update the rotate angle
-       fl_set_input(dialog_->input_rotate_angle,
+       updateWidgetsFromLength(size_->input_width,size_->choice_width_units,igp.width,defaultUnit);
+       updateWidgetsFromLength(size_->input_height,size_->choice_height_units,igp.height,defaultUnit);
+       fl_set_input(size_->input_scale, tostr(igp.scale).c_str());
+       switch (igp.size_type) {
+           case InsetGraphicsParams::DEFAULT_SIZE: {
+               fl_set_button(size_->button_default,1);
+               setEnabled(size_->input_width, 0);
+               setEnabled(size_->choice_width_units, 0);
+               setEnabled(size_->input_height, 0);
+               setEnabled(size_->choice_height_units, 0);
+               setEnabled(size_->input_scale, 0);
+               break;
+           }
+           case InsetGraphicsParams::WH: {
+               fl_set_button(size_->button_wh, 1);
+               setEnabled(size_->input_width, 1);
+               setEnabled(size_->choice_width_units, 1);
+               setEnabled(size_->input_height, 1);
+               setEnabled(size_->choice_height_units, 1);
+               setEnabled(size_->input_scale, 0);
+               break;
+           }
+           case InsetGraphicsParams::SCALE: {
+               fl_set_button(size_->button_scale, 1);
+               setEnabled(size_->input_width, 0);
+               setEnabled(size_->choice_width_units, 0);
+               setEnabled(size_->input_height, 0);
+               setEnabled(size_->choice_height_units, 0);
+               setEnabled(size_->input_scale, 1);
+               break;
+           }
+       }
+       fl_set_button(size_->check_aspectratio,igp.keepAspectRatio);
+       // now the lyx-internally viewsize
+       updateWidgetsFromLength(size_->input_lyxwidth,size_->choice_width_lyxwidth,igp.lyxwidth,defaultUnit);
+       updateWidgetsFromLength(size_->input_lyxheight,size_->choice_width_lyxheight,igp.lyxheight,defaultUnit);
+       // Update the rotate angle and special commands
+       fl_set_input(special_->input_rotate_angle,
                     tostr(igp.rotateAngle).c_str());
                     tostr(igp.rotateAngle).c_str());
-
-       // Update the subcaption check button and input field
-       fl_set_button(dialog_->check_subcaption,
-                     igp.subcaption);
-       fl_set_input(dialog_->input_subcaption,
-                    igp.subcaptionText.c_str());
-
-       setEnabled(dialog_->input_subcaption,
-                  fl_get_button(dialog_->check_subcaption));
+       if (igp.rotateOrigin.empty())
+           fl_set_choice(special_->choice_origin,0);
+       else
+           fl_set_choice_text(special_->choice_origin,igp.rotateOrigin.c_str());
+       fl_set_input(special_->input_special, igp.special.c_str());
 }
 
 
 ButtonPolicy::SMInput FormGraphics::input(FL_OBJECT * ob, long)
 {
 }
 
 
 ButtonPolicy::SMInput FormGraphics::input(FL_OBJECT * ob, long)
 {
-       if (ob == dialog_->button_browse) {
+       if (ob == file_->button_browse) {
                // Get the filename from the dialog
                // Get the filename from the dialog
-               string const in_name = fl_get_input(dialog_->input_filename);
+               string const in_name = getStringFromInput(file_->input_filename);
                string const out_name = controller().Browse(in_name);
                string const out_name = controller().Browse(in_name);
-
                if (out_name != in_name && !out_name.empty()) {
                if (out_name != in_name && !out_name.empty()) {
-                       fl_set_input(dialog_->input_filename, out_name.c_str());
+                       fl_set_input(file_->input_filename, out_name.c_str());
                }
                }
-       }
-
-       if (ob == dialog_->input_scale) {
-               double const scale =
-                       strToDbl(strip(fl_get_input(dialog_->input_scale)));
-               if (scale > tol) {
-                       fl_set_input(dialog_->input_width, "");
-                       fl_set_choice(dialog_->choice_width_units, 1);
-                       fl_set_input(dialog_->input_height, "");
-                       fl_set_choice(dialog_->choice_height_units, 1);
-               }
-       }
-
-       if (ob == dialog_->input_width || ob == dialog_->input_height) {
-               double const width =
-                       strToDbl(strip(fl_get_input(dialog_->input_width)));
-               double const height =
-                       strToDbl(strip(fl_get_input(dialog_->input_height)));
-
-               if (width > tol || height > tol) {
-                       fl_set_input(dialog_->input_scale, "");
+       } else if (!controller().bbChanged && 
+                   ((ob == file_->input_bbx0) || (ob == file_->input_bby0) || 
+                   (ob == file_->input_bbx1) || (ob == file_->input_bby1) || 
+                   (ob == file_->choice_bb_x0) || (ob == file_->choice_bb_y0) || 
+                   (ob == file_->choice_bb_x1) || (ob == file_->choice_bb_y1))) {
+           controller().bbChanged = true; 
+       } else if (ob == size_->button_default) {
+               setEnabled(size_->input_width, 0);
+               setEnabled(size_->choice_width_units, 0);
+               setEnabled(size_->input_height, 0);
+               setEnabled(size_->choice_height_units, 0);
+               setEnabled(size_->input_scale, 0);
+       } else if (ob == size_->button_wh) {
+               setEnabled(size_->input_width, 1);
+               setEnabled(size_->choice_width_units, 1);
+               setEnabled(size_->input_height, 1);
+               setEnabled(size_->choice_height_units, 1);
+               setEnabled(size_->input_scale, 0);
+       } else if (ob == size_->button_scale) {
+               setEnabled(size_->input_width, 0);
+               setEnabled(size_->choice_width_units, 0);
+               setEnabled(size_->input_height, 0);
+               setEnabled(size_->choice_height_units, 0);
+               setEnabled(size_->input_scale, 1);
+       } else if (ob == file_->check_subcaption) {
+               setEnabled(file_->input_subcaption,
+                          fl_get_button(file_->check_subcaption));
+       } else if (ob == file_->button_getBB) {
+           string const filename = getStringFromInput(file_->input_filename);
+           if (!filename.empty()) {
+               string const fileWithAbsPath = MakeAbsPath(filename, OnlyPath(filename));       
+               string bb = controller().readBB(fileWithAbsPath);
+               lyxerr << "getBB::BoundingBox = " << bb << "\n";
+               if (!bb.empty()) {              
+                   fl_set_input(file_->input_bbx0, token(bb,' ',0).c_str());
+                   fl_set_input(file_->input_bby0, token(bb,' ',1).c_str());
+                   fl_set_input(file_->input_bbx1, token(bb,' ',2).c_str());
+                   fl_set_input(file_->input_bby1, token(bb,' ',3).c_str());
                }
                }
+               controller().bbChanged = false;
+           }
+       } else if (ob == dialog_->button_help) {
+           controller().help();
        }
        }
-
-       if (ob == dialog_->check_subcaption) {
-               setEnabled(dialog_->input_subcaption,
-                          fl_get_button(dialog_->check_subcaption));
-       }
-
        return checkInput();
 }
 
        return checkInput();
 }
 
@@ -372,20 +396,16 @@ ButtonPolicy::SMInput FormGraphics::checkInput()
        // Put verifications that the dialog shows some sane values,
        // if not disallow clicking on ok/apply.
        // Possibly use a label in the bottom of the dialog to give the reason.
        // Put verifications that the dialog shows some sane values,
        // if not disallow clicking on ok/apply.
        // Possibly use a label in the bottom of the dialog to give the reason.
-
        ButtonPolicy::SMInput activate = ButtonPolicy::SMI_VALID;
        ButtonPolicy::SMInput activate = ButtonPolicy::SMI_VALID;
-
        // We verify now that there is a filename, it exists, it's a file
        // and it's readable.
        // We verify now that there is a filename, it exists, it's a file
        // and it's readable.
-       string filename = fl_get_input(dialog_->input_filename);
+       string filename = getStringFromInput(file_->input_filename);
        FileInfo file(filename);
        FileInfo file(filename);
-       if (filename.empty()
-               || !file.isOK()
-               || !file.exist()
-               || !file.isRegular()
-               || !file.readable()
+       if (filename.empty() || !file.isOK() || !file.exist()
+                           || !file.isRegular() || !file.readable()
           )
                activate = ButtonPolicy::SMI_INVALID;
 
        return activate;
 }
           )
                activate = ButtonPolicy::SMI_INVALID;
 
        return activate;
 }
+
index 0faa35eebefb5eeb877c5edefe7b00ecda84149d..211665bcce959ae6953fe2eaf324c308d8c78c51 100644 (file)
  *
  * \file FormGraphics.h
  * \author Baruch Even, baruch.even@writeme.com
  *
  * \file FormGraphics.h
  * \author Baruch Even, baruch.even@writeme.com
+ * \author Herbert Voss, voss@lyx.org
  */
 
 #ifndef FORMGRAPHICS_H
 #define FORMGRAPHICS_H
 
  */
 
 #ifndef FORMGRAPHICS_H
 #define FORMGRAPHICS_H
 
+#include <boost/smart_ptr.hpp>
+
 #ifdef __GNUG__
 #pragma interface
 #endif 
 #ifdef __GNUG__
 #pragma interface
 #endif 
@@ -24,6 +27,9 @@
 
 class ControlGraphics;
 struct FD_form_graphics;
 
 class ControlGraphics;
 struct FD_form_graphics;
+struct FD_form_file;
+struct FD_form_size;
+struct FD_form_special;
 
 /** This class provides an XForms implementation of the Graphics Dialog.
  */
 
 /** This class provides an XForms implementation of the Graphics Dialog.
  */
@@ -33,6 +39,10 @@ public:
        FormGraphics(ControlGraphics &);
 
 private:
        FormGraphics(ControlGraphics &);
 
 private:
+
+       /** Redraw the form (on receipt of a Signal indicating, for example,
+           that the xforms colours have been re-mapped). */
+       virtual void redraw();
        /// Set the Params variable for the Controller.
        virtual void apply();
        /// Build the dialog.
        /// Set the Params variable for the Controller.
        virtual void apply();
        /// Build the dialog.
@@ -41,13 +51,27 @@ private:
        virtual void update();
        /// Filter the inputs on callback from xforms
        virtual ButtonPolicy::SMInput input(FL_OBJECT *, long);
        virtual void update();
        /// Filter the inputs on callback from xforms
        virtual ButtonPolicy::SMInput input(FL_OBJECT *, long);
+       /// 
+       void help();
 
        /// Verify that the input is correct. If not disable ok/apply buttons.
        ButtonPolicy::SMInput checkInput();
 
        /// Fdesign generated method
        FD_form_graphics * build_graphics();
 
        /// Verify that the input is correct. If not disable ok/apply buttons.
        ButtonPolicy::SMInput checkInput();
 
        /// Fdesign generated method
        FD_form_graphics * build_graphics();
-};
+       ///
+       FD_form_file * build_file();
+       ///
+       FD_form_size * build_size();
+       ///
+       FD_form_special * build_special();
 
 
+       /// Real GUI implementation.
+       boost::scoped_ptr<FD_form_file> file_;
+       ///
+       boost::scoped_ptr<FD_form_size> size_;
+       ///
+       boost::scoped_ptr<FD_form_special> special_;
+};
 
 #endif  // FORMGRAPHICS_H
 
 #endif  // FORMGRAPHICS_H
index 17c0778b3c7bd90a724d96b5bcfb48e87809a11d..0f2bb4ddd84d3413c10db8193f3cf58c9bfd1429 100644 (file)
@@ -22,106 +22,339 @@ FD_form_graphics * FormGraphics::build_graphics()
   FL_OBJECT *obj;
   FD_form_graphics *fdui = new FD_form_graphics;
 
   FL_OBJECT *obj;
   FD_form_graphics *fdui = new FD_form_graphics;
 
-  fdui->form = fl_bgn_form(FL_NO_BOX, 490, 390);
+  fdui->form = fl_bgn_form(FL_NO_BOX, 510, 320);
   fdui->form->u_vdata = this;
   fdui->form->u_vdata = this;
-  obj = fl_add_box(FL_UP_BOX, 0, 0, 490, 390, "");
+  obj = fl_add_box(FL_FLAT_BOX, 0, 0, 510, 320, "");
+  fdui->tabFolder = obj = fl_add_tabfolder(FL_TOP_TABFOLDER, 10, 5, 490, 270, _("Tabbed folder"));
+    fl_set_object_resize(obj, FL_RESIZE_ALL);
+  {
+    char const * const dummy = N_("Help|#H");
+    fdui->button_help = obj = fl_add_button(FL_NORMAL_BUTTON, 440, 280, 60, 30, idex(_(dummy)));
+    fl_set_button_shortcut(obj, scex(_(dummy)), 1);
+  }
     fl_set_object_lsize(obj, FL_NORMAL_SIZE);
     fl_set_object_lsize(obj, FL_NORMAL_SIZE);
-    fl_set_object_gravity(obj, FL_NorthWest, FL_SouthEast);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  {
+    char const * const dummy = N_("Restore|#R");
+    fdui->button_restore = obj = fl_add_button(FL_NORMAL_BUTTON, 135, 280, 75, 30, idex(_(dummy)));
+    fl_set_button_shortcut(obj, scex(_(dummy)), 1);
+  }
+    fl_set_object_gravity(obj, FL_SouthWest, FL_SouthWest);
+    fl_set_object_callback(obj, C_FormBaseRestoreCB, 0);
+  fdui->button_ok = obj = fl_add_button(FL_RETURN_BUTTON, 10, 280, 75, 30, _("Ok"));
+    fl_set_object_callback(obj, C_FormBaseOKCB, 0);
+  {
+    char const * const dummy = N_("Cancel|^[");
+    fdui->button_cancel = obj = fl_add_button(FL_NORMAL_BUTTON, 260, 280, 75, 30, idex(_(dummy)));
+    fl_set_button_shortcut(obj, scex(_(dummy)), 1);
+  }
+    fl_set_object_callback(obj, C_FormBaseCancelCB, 0);
+  fl_end_form();
+
+  fdui->form->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_form_file::~FD_form_file()
+{
+  if ( form->visible ) fl_hide_form( form );
+  fl_free_form( form );
+}
+
+
+FD_form_file * FormGraphics::build_file()
+{
+  FL_OBJECT *obj;
+  FD_form_file *fdui = new FD_form_file;
+
+  fdui->form = fl_bgn_form(FL_NO_BOX, 505, 235);
+  fdui->form->u_vdata = this;
+  obj = fl_add_box(FL_FLAT_BOX, 0, 0, 505, 235, "");
   {
     char const * const dummy = N_("File|#F");
   {
     char const * const dummy = N_("File|#F");
-    fdui->input_filename = obj = fl_add_input(FL_NORMAL_INPUT, 90, 20, 270, 30, idex(_(dummy)));
+    fdui->input_filename = obj = fl_add_input(FL_NORMAL_INPUT, 85, 10, 270, 30, idex(_(dummy)));
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
+    fl_set_object_lstyle(obj, FL_BOLD_STYLE);
     fl_set_object_callback(obj, C_FormBaseInputCB, 0);
   {
     char const * const dummy = N_("Browse...|#B");
     fl_set_object_callback(obj, C_FormBaseInputCB, 0);
   {
     char const * const dummy = N_("Browse...|#B");
-    fdui->button_browse = obj = fl_add_button(FL_NORMAL_BUTTON, 370, 20, 100, 30, idex(_(dummy)));
+    fdui->button_browse = obj = fl_add_button(FL_NORMAL_BUTTON, 365, 10, 100, 30, idex(_(dummy)));
+    fl_set_button_shortcut(obj, scex(_(dummy)), 1);
+  }
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  obj = fl_add_labelframe(FL_ENGRAVED_FRAME, 15, 50, 260, 115, _("Bounding Box"));
+    fl_set_object_lstyle(obj, FL_BOLD_STYLE);
+  {
+    char const * const dummy = N_("xLeftBottom|#x");
+    fdui->input_bbx0 = obj = fl_add_input(FL_NORMAL_INPUT, 25, 75, 50, 30, idex(_(dummy)));
+    fl_set_button_shortcut(obj, scex(_(dummy)), 1);
+  }
+    fl_set_object_lalign(obj, FL_ALIGN_TOP_LEFT);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  {
+    char const * const dummy = N_("yLeftBottom|#y");
+    fdui->input_bby0 = obj = fl_add_input(FL_NORMAL_INPUT, 160, 75, 50, 30, idex(_(dummy)));
+    fl_set_button_shortcut(obj, scex(_(dummy)), 1);
+  }
+    fl_set_object_lalign(obj, FL_ALIGN_TOP_LEFT);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  {
+    char const * const dummy = N_("xRightTop|#R");
+    fdui->input_bbx1 = obj = fl_add_input(FL_NORMAL_INPUT, 25, 125, 50, 30, idex(_(dummy)));
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
+    fl_set_object_lalign(obj, FL_ALIGN_TOP);
     fl_set_object_callback(obj, C_FormBaseInputCB, 0);
     fl_set_object_callback(obj, C_FormBaseInputCB, 0);
-  obj = fl_add_labelframe(FL_ENGRAVED_FRAME, 20, 70, 240, 140, _("Size"));
+  {
+    char const * const dummy = N_("yRightTop|#T");
+    fdui->input_bby1 = obj = fl_add_input(FL_NORMAL_INPUT, 160, 125, 50, 30, idex(_(dummy)));
+    fl_set_button_shortcut(obj, scex(_(dummy)), 1);
+  }
+    fl_set_object_lalign(obj, FL_ALIGN_TOP_LEFT);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  {
+    char const * const dummy = N_("clip to bounding box|#c");
+    fdui->button_clip = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 290, 100, 30, 30, idex(_(dummy)));
+    fl_set_button_shortcut(obj, scex(_(dummy)), 1);
+  }
+    fl_set_object_lalign(obj, FL_ALIGN_RIGHT);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  obj = fl_add_labelframe(FL_ENGRAVED_FRAME, 15, 165, 465, 60, _("Subfigure"));
+    fl_set_object_lstyle(obj, FL_BOLD_STYLE);
+  {
+    char const * const dummy = N_("On/Off|#O");
+    fdui->check_subcaption = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 15, 180, 30, 30, idex(_(dummy)));
+    fl_set_button_shortcut(obj, scex(_(dummy)), 1);
+  }
+    fl_set_object_lalign(obj, FL_ALIGN_RIGHT);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  {
+    char const * const dummy = N_("Title|#T");
+    fdui->input_subcaption = obj = fl_add_input(FL_NORMAL_INPUT, 110, 185, 330, 30, idex(_(dummy)));
+    fl_set_button_shortcut(obj, scex(_(dummy)), 1);
+  }
+    fl_set_object_lalign(obj, FL_ALIGN_TOP);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  obj = fl_add_labelframe(FL_ENGRAVED_FRAME, 285, 50, 195, 115, _("Options"));
+  {
+    char const * const dummy = N_("draft mode|#D");
+    fdui->button_draft = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 290, 125, 30, 30, idex(_(dummy)));
+    fl_set_button_shortcut(obj, scex(_(dummy)), 1);
+  }
+    fl_set_object_lalign(obj, FL_ALIGN_RIGHT);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  fdui->choice_bb_x0 = obj = fl_add_choice(FL_NORMAL_CHOICE, 80, 75, 50, 30, "");
+    fl_set_object_boxtype(obj, FL_FRAME_BOX);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  fdui->choice_bb_y0 = obj = fl_add_choice(FL_NORMAL_CHOICE, 220, 75, 45, 30, "");
+    fl_set_object_boxtype(obj, FL_FRAME_BOX);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  fdui->choice_bb_x1 = obj = fl_add_choice(FL_NORMAL_CHOICE, 80, 125, 50, 30, "");
+    fl_set_object_boxtype(obj, FL_FRAME_BOX);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  fdui->choice_bb_y1 = obj = fl_add_choice(FL_NORMAL_CHOICE, 220, 125, 45, 30, "");
+    fl_set_object_boxtype(obj, FL_FRAME_BOX);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  {
+    char const * const dummy = N_("Get BB from file|#G");
+    fdui->button_getBB = obj = fl_add_button(FL_NORMAL_BUTTON, 295, 65, 170, 25, idex(_(dummy)));
+    fl_set_button_shortcut(obj, scex(_(dummy)), 1);
+  }
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  fl_end_form();
+
+  fdui->form->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_form_size::~FD_form_size()
+{
+  if ( form->visible ) fl_hide_form( form );
+  fl_free_form( form );
+}
+
+
+FD_form_size * FormGraphics::build_size()
+{
+  FL_OBJECT *obj;
+  FD_form_size *fdui = new FD_form_size;
+
+  fdui->form = fl_bgn_form(FL_NO_BOX, 505, 235);
+  fdui->form->u_vdata = this;
+  obj = fl_add_box(FL_FLAT_BOX, 0, 0, 505, 235, "");
+  obj = fl_add_labelframe(FL_ENGRAVED_FRAME, 15, 10, 225, 30, _("LaTeX"));
+    fl_set_object_lstyle(obj, FL_BOLD_STYLE);
   {
     char const * const dummy = N_("Width|#W");
   {
     char const * const dummy = N_("Width|#W");
-    fdui->input_width = obj = fl_add_input(FL_NORMAL_INPUT, 90, 80, 85, 30, idex(_(dummy)));
+    fdui->input_width = obj = fl_add_input(FL_NORMAL_INPUT, 80, 80, 85, 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_FormBaseInputCB, 0);
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
     fl_set_object_lsize(obj, FL_NORMAL_SIZE);
     fl_set_object_callback(obj, C_FormBaseInputCB, 0);
-  fdui->choice_width_units = obj = fl_add_choice(FL_NORMAL_CHOICE, 180, 80, 65, 30, "");
+  fdui->choice_width_units = obj = fl_add_choice(FL_NORMAL_CHOICE, 170, 80, 60, 30, "");
     fl_set_object_boxtype(obj, FL_FRAME_BOX);
     fl_set_object_callback(obj, C_FormBaseInputCB, 0);
   {
     char const * const dummy = N_("Height|#H");
     fl_set_object_boxtype(obj, FL_FRAME_BOX);
     fl_set_object_callback(obj, C_FormBaseInputCB, 0);
   {
     char const * const dummy = N_("Height|#H");
-    fdui->input_height = obj = fl_add_input(FL_NORMAL_INPUT, 90, 120, 85, 30, idex(_(dummy)));
+    fdui->input_height = obj = fl_add_input(FL_NORMAL_INPUT, 80, 120, 85, 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_FormBaseInputCB, 0);
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
     fl_set_object_lsize(obj, FL_NORMAL_SIZE);
     fl_set_object_callback(obj, C_FormBaseInputCB, 0);
-  fdui->choice_height_units = obj = fl_add_choice(FL_NORMAL_CHOICE, 180, 120, 65, 30, "");
+  fdui->choice_height_units = obj = fl_add_choice(FL_NORMAL_CHOICE, 170, 120, 60, 30, "");
     fl_set_object_boxtype(obj, FL_FRAME_BOX);
     fl_set_object_callback(obj, C_FormBaseInputCB, 0);
   {
     char const * const dummy = N_("Scale|#S");
     fl_set_object_boxtype(obj, FL_FRAME_BOX);
     fl_set_object_callback(obj, C_FormBaseInputCB, 0);
   {
     char const * const dummy = N_("Scale|#S");
-    fdui->input_scale = obj = fl_add_input(FL_NORMAL_INPUT, 90, 170, 85, 30, idex(_(dummy)));
+    fdui->input_scale = obj = fl_add_input(FL_NORMAL_INPUT, 80, 185, 85, 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_FormBaseInputCB, 0);
   // xgettext:no-c-format
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
     fl_set_object_lsize(obj, FL_NORMAL_SIZE);
     fl_set_object_callback(obj, C_FormBaseInputCB, 0);
   // xgettext:no-c-format
-  obj = fl_add_text(FL_NORMAL_TEXT, 180, 170, 60, 30, _("%"));
+  obj = fl_add_text(FL_NORMAL_TEXT, 170, 185, 25, 30, _("%"));
     fl_set_object_lalign(obj, FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
     fl_set_object_lalign(obj, FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
-  obj = fl_add_labelframe(FL_ENGRAVED_FRAME, 270, 70, 200, 70, _("Rotation"));
+  obj = fl_add_labelframe(FL_ENGRAVED_FRAME, 255, 10, 230, 215, _("LyX Screen"));
+    fl_set_object_lstyle(obj, FL_BOLD_STYLE);
   {
   {
-    char const * const dummy = N_("Angle|#n");
-    fdui->input_rotate_angle = obj = fl_add_input(FL_INT_INPUT, 340, 90, 70, 30, idex(_(dummy)));
+    char const * const dummy = N_("Width|#w");
+    fdui->input_lyxwidth = obj = fl_add_input(FL_NORMAL_INPUT, 315, 145, 85, 30, idex(_(dummy)));
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
+    fl_set_object_lsize(obj, FL_NORMAL_SIZE);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  fdui->choice_width_lyxwidth = obj = fl_add_choice(FL_NORMAL_CHOICE, 405, 145, 60, 30, "");
+    fl_set_object_boxtype(obj, FL_FRAME_BOX);
     fl_set_object_callback(obj, C_FormBaseInputCB, 0);
     fl_set_object_callback(obj, C_FormBaseInputCB, 0);
-  obj = fl_add_text(FL_NORMAL_TEXT, 410, 90, 50, 30, _("degs"));
-    fl_set_object_lalign(obj, FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
-  obj = fl_add_labelframe(FL_ENGRAVED_FRAME, 270, 160, 200, 50, _("Display Options"));
   {
   {
-    char const * const dummy = N_("Display in LyX|#D");
-    fdui->check_display = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 400, 170, 30, 30, idex(_(dummy)));
+    char const * const dummy = N_("Height|#h");
+    fdui->input_lyxheight = obj = fl_add_input(FL_NORMAL_INPUT, 315, 185, 85, 30, idex(_(dummy)));
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
-    fl_set_object_lalign(obj, FL_ALIGN_LEFT);
+    fl_set_object_lsize(obj, FL_NORMAL_SIZE);
     fl_set_object_callback(obj, C_FormBaseInputCB, 0);
     fl_set_object_callback(obj, C_FormBaseInputCB, 0);
-  obj = fl_add_labelframe(FL_ENGRAVED_FRAME, 20, 230, 450, 90, _("Subcaption"));
+  fdui->choice_width_lyxheight = obj = fl_add_choice(FL_NORMAL_CHOICE, 405, 185, 60, 30, "");
+    fl_set_object_boxtype(obj, FL_FRAME_BOX);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME, 15, 40, 225, 120, "");
+  obj = fl_add_frame(FL_ENGRAVED_FRAME, 15, 160, 225, 65, "");
+
+  fdui->radio_display = fl_bgn_group();
   {
   {
-    char const * const dummy = N_("Subcaption|#u");
-    fdui->check_subcaption = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 110, 240, 30, 30, idex(_(dummy)));
+    char const * const dummy = N_("Don't display|#D");
+    fdui->radio_check_display = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 260, 20, 30, 30, idex(_(dummy)));
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
-    fl_set_object_lalign(obj, FL_ALIGN_LEFT);
     fl_set_object_callback(obj, C_FormBaseInputCB, 0);
     fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+    fl_set_button(obj, 1);
   {
   {
-    char const * const dummy = N_("Title|#T");
-    fdui->input_subcaption = obj = fl_add_input(FL_NORMAL_INPUT, 110, 280, 350, 30, idex(_(dummy)));
+    char const * const dummy = N_("in Grayscale|#G");
+    fdui->radio_display_gray = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 260, 75, 30, 30, idex(_(dummy)));
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
     fl_set_object_callback(obj, C_FormBaseInputCB, 0);
   {
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
     fl_set_object_callback(obj, C_FormBaseInputCB, 0);
   {
-    char const * const dummy = N_("Restore|#R");
-    fdui->button_restore = obj = fl_add_button(FL_NORMAL_BUTTON, 20, 350, 100, 30, idex(_(dummy)));
+    char const * const dummy = N_("in Color|#C");
+    fdui->radio_display_color = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 260, 105, 30, 30, idex(_(dummy)));
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
-    fl_set_object_gravity(obj, FL_SouthWest, FL_SouthWest);
-    fl_set_object_callback(obj, C_FormBaseRestoreCB, 0);
-  fdui->button_ok = obj = fl_add_button(FL_RETURN_BUTTON, 180, 350, 90, 30, _("Ok"));
-    fl_set_object_callback(obj, C_FormBaseOKCB, 0);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  {
+    char const * const dummy = N_("in Monochrome|#M");
+    fdui->radio_display_mono = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 260, 45, 30, 30, idex(_(dummy)));
+    fl_set_button_shortcut(obj, scex(_(dummy)), 1);
+  }
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  fl_end_group();
+
+
+  fdui->radio_size = fl_bgn_group();
   {
   {
-    char const * const dummy = N_("Apply|#A");
-    fdui->button_apply = obj = fl_add_button(FL_NORMAL_BUTTON, 280, 350, 90, 30, idex(_(dummy)));
+    char const * const dummy = N_("Default|#D");
+    fdui->button_default = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 15, 10, 30, 30, idex(_(dummy)));
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
-    fl_set_object_callback(obj, C_FormBaseApplyCB, 0);
+    fl_set_object_lalign(obj, FL_ALIGN_RIGHT);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
   {
   {
-    char const * const dummy = N_("Cancel|^[");
-    fdui->button_cancel = obj = fl_add_button(FL_NORMAL_BUTTON, 380, 350, 90, 30, idex(_(dummy)));
+    char const * const dummy = N_("On/Off|#O");
+    fdui->button_wh = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 15, 40, 30, 30, idex(_(dummy)));
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
     fl_set_button_shortcut(obj, scex(_(dummy)), 1);
   }
-    fl_set_object_callback(obj, C_FormBaseCancelCB, 0);
+    fl_set_object_lalign(obj, FL_ALIGN_RIGHT);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  {
+    char const * const dummy = N_("On/Off|#n");
+    fdui->button_scale = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 15, 155, 30, 30, idex(_(dummy)));
+    fl_set_button_shortcut(obj, scex(_(dummy)), 1);
+  }
+    fl_set_object_lalign(obj, FL_ALIGN_RIGHT);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  fl_end_group();
+
+  {
+    char const * const dummy = N_("keep aspectratio|#k");
+    fdui->check_aspectratio = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 100, 40, 30, 30, idex(_(dummy)));
+    fl_set_button_shortcut(obj, scex(_(dummy)), 1);
+  }
+    fl_set_object_lalign(obj, FL_ALIGN_RIGHT);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  fl_end_form();
+
+  fdui->form->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_form_special::~FD_form_special()
+{
+  if ( form->visible ) fl_hide_form( form );
+  fl_free_form( form );
+}
+
+
+FD_form_special * FormGraphics::build_special()
+{
+  FL_OBJECT *obj;
+  FD_form_special *fdui = new FD_form_special;
+
+  fdui->form = fl_bgn_form(FL_NO_BOX, 505, 235);
+  fdui->form->u_vdata = this;
+  obj = fl_add_box(FL_FLAT_BOX, 0, 0, 505, 235, "");
+  obj = fl_add_labelframe(FL_ENGRAVED_FRAME, 15, 15, 255, 65, _("Rotation"));
+    fl_set_object_lstyle(obj, FL_BOLD_STYLE);
+  {
+    char const * const dummy = N_("Angle|#n");
+    fdui->input_rotate_angle = obj = fl_add_input(FL_INT_INPUT, 25, 40, 70, 30, idex(_(dummy)));
+    fl_set_button_shortcut(obj, scex(_(dummy)), 1);
+  }
+    fl_set_object_lalign(obj, FL_ALIGN_TOP_LEFT);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  obj = fl_add_text(FL_NORMAL_TEXT, 100, 45, 45, 25, _("degrees"));
+    fl_set_object_lalign(obj, FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+  obj = fl_add_labelframe(FL_ENGRAVED_FRAME, 275, 15, 205, 65, _("Special Options"));
+    fl_set_object_lstyle(obj, FL_BOLD_STYLE);
+  {
+    char const * const dummy = N_("Userdefined LaTeX-Options|#U");
+    fdui->input_special = obj = fl_add_input(FL_NORMAL_INPUT, 285, 42, 180, 27, idex(_(dummy)));
+    fl_set_button_shortcut(obj, scex(_(dummy)), 1);
+  }
+    fl_set_object_lalign(obj, FL_ALIGN_TOP_LEFT);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
+  {
+    char const * const dummy = N_("Origin|#O");
+    fdui->choice_origin = obj = fl_add_choice(FL_NORMAL_CHOICE2, 150, 40, 115, 30, idex(_(dummy)));
+    fl_set_button_shortcut(obj, scex(_(dummy)), 1);
+  }
+    fl_set_object_boxtype(obj, FL_FRAME_BOX);
+    fl_set_object_lalign(obj, FL_ALIGN_TOP_LEFT);
+    fl_set_object_callback(obj, C_FormBaseInputCB, 0);
   fl_end_form();
 
   fdui->form->fdui = fdui;
   fl_end_form();
 
   fdui->form->fdui = fdui;
index a4c9c55318e83d3581f4454d39ce418e1ccd6a20..c6a42a1aec62569ba75563d50a3ac6563587f8e0 100644 (file)
@@ -8,30 +8,77 @@
 extern  "C" void C_FormBaseInputCB(FL_OBJECT *, long);
 extern  "C" void C_FormBaseRestoreCB(FL_OBJECT *, long);
 extern  "C" void C_FormBaseOKCB(FL_OBJECT *, long);
 extern  "C" void C_FormBaseInputCB(FL_OBJECT *, long);
 extern  "C" void C_FormBaseRestoreCB(FL_OBJECT *, long);
 extern  "C" void C_FormBaseOKCB(FL_OBJECT *, long);
-extern  "C" void C_FormBaseApplyCB(FL_OBJECT *, long);
 extern  "C" void C_FormBaseCancelCB(FL_OBJECT *, long);
 
 extern  "C" void C_FormBaseCancelCB(FL_OBJECT *, long);
 
+extern  "C" void C_FormBaseInputCB(FL_OBJECT *, long);
+
+extern  "C" void C_FormBaseInputCB(FL_OBJECT *, long);
+
+extern  "C" void C_FormBaseInputCB(FL_OBJECT *, long);
+
 
 /**** Forms and Objects ****/
 struct FD_form_graphics {
        ~FD_form_graphics();
 
 
 /**** Forms and Objects ****/
 struct FD_form_graphics {
        ~FD_form_graphics();
 
+       FL_FORM *form;
+       FL_OBJECT *tabFolder;
+       FL_OBJECT *button_help;
+       FL_OBJECT *button_restore;
+       FL_OBJECT *button_ok;
+       FL_OBJECT *button_cancel;
+};
+struct FD_form_file {
+       ~FD_form_file();
+
        FL_FORM *form;
        FL_OBJECT *input_filename;
        FL_OBJECT *button_browse;
        FL_FORM *form;
        FL_OBJECT *input_filename;
        FL_OBJECT *button_browse;
+       FL_OBJECT *input_bbx0;
+       FL_OBJECT *input_bby0;
+       FL_OBJECT *input_bbx1;
+       FL_OBJECT *input_bby1;
+       FL_OBJECT *button_clip;
+       FL_OBJECT *check_subcaption;
+       FL_OBJECT *input_subcaption;
+       FL_OBJECT *button_draft;
+       FL_OBJECT *choice_bb_x0;
+       FL_OBJECT *choice_bb_y0;
+       FL_OBJECT *choice_bb_x1;
+       FL_OBJECT *choice_bb_y1;
+       FL_OBJECT *button_getBB;
+};
+struct FD_form_size {
+       ~FD_form_size();
+
+       FL_FORM *form;
        FL_OBJECT *input_width;
        FL_OBJECT *choice_width_units;
        FL_OBJECT *input_height;
        FL_OBJECT *choice_height_units;
        FL_OBJECT *input_scale;
        FL_OBJECT *input_width;
        FL_OBJECT *choice_width_units;
        FL_OBJECT *input_height;
        FL_OBJECT *choice_height_units;
        FL_OBJECT *input_scale;
+       FL_OBJECT *input_lyxwidth;
+       FL_OBJECT *choice_width_lyxwidth;
+       FL_OBJECT *input_lyxheight;
+       FL_OBJECT *choice_width_lyxheight;
+       FL_OBJECT *radio_display;
+       FL_OBJECT *radio_check_display;
+       FL_OBJECT *radio_display_gray;
+       FL_OBJECT *radio_display_color;
+       FL_OBJECT *radio_display_mono;
+       FL_OBJECT *radio_size;
+       FL_OBJECT *button_default;
+       FL_OBJECT *button_wh;
+       FL_OBJECT *button_scale;
+       FL_OBJECT *check_aspectratio;
+};
+struct FD_form_special {
+       ~FD_form_special();
+
+       FL_FORM *form;
        FL_OBJECT *input_rotate_angle;
        FL_OBJECT *input_rotate_angle;
-       FL_OBJECT *check_display;
-       FL_OBJECT *check_subcaption;
-       FL_OBJECT *input_subcaption;
-       FL_OBJECT *button_restore;
-       FL_OBJECT *button_ok;
-       FL_OBJECT *button_apply;
-       FL_OBJECT *button_cancel;
+       FL_OBJECT *input_special;
+       FL_OBJECT *choice_origin;
 };
 
 #endif /* FD_form_graphics_h_ */
 };
 
 #endif /* FD_form_graphics_h_ */
index 897c10ae022a44eb59c4c52ba2edb7bb042538d6..e966747cb3ad249b61ca2d5b7deed6d5d2da172f 100644 (file)
@@ -3,29 +3,144 @@ Magic: 13000
 Internal Form Definition File
     (do not change)
 
 Internal Form Definition File
     (do not change)
 
-Number of forms: 1
+Number of forms: 4
 Unit of measure: FL_COORD_PIXEL
 Unit of measure: FL_COORD_PIXEL
+SnapGrid: 5
 
 =============== FORM ===============
 Name: form_graphics
 
 =============== FORM ===============
 Name: form_graphics
-Width: 490
-Height: 390
-Number of Objects: 22
+Width: 510
+Height: 320
+Number of Objects: 6
 
 --------------------
 class: FL_BOX
 
 --------------------
 class: FL_BOX
-type: UP_BOX
-box: 0 0 490 390
+type: FLAT_BOX
+box: 0 0 510 320
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TABFOLDER
+type: TOP_TABFOLDER
+box: 10 5 490 270
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Tabbed folder
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: tabFolder
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 440 280 60 30
 boxtype: FL_UP_BOX
 colors: FL_COL1 FL_COL1
 alignment: FL_ALIGN_CENTER
 style: FL_NORMAL_STYLE
 size: FL_NORMAL_SIZE
 lcol: FL_BLACK
 boxtype: FL_UP_BOX
 colors: FL_COL1 FL_COL1
 alignment: FL_ALIGN_CENTER
 style: FL_NORMAL_STYLE
 size: FL_NORMAL_SIZE
 lcol: FL_BLACK
+label: Help|#H
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_help
+callback: C_FormBaseInputCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 135 280 75 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Restore|#R
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthWest FL_SouthWest
+name: button_restore
+callback: C_FormBaseRestoreCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 10 280 75 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Ok
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_ok
+callback: C_FormBaseOKCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 260 280 75 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_cancel
+callback: C_FormBaseCancelCB
+argument: 0
+
+=============== FORM ===============
+Name: form_file
+Width: 505
+Height: 235
+Number of Objects: 19
+
+--------------------
+class: FL_BOX
+type: FLAT_BOX
+box: 0 0 505 235
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
 label: 
 shortcut: 
 resize: FL_RESIZE_ALL
 label: 
 shortcut: 
 resize: FL_RESIZE_ALL
-gravity: FL_NorthWest FL_SouthEast
+gravity: FL_NoGravity FL_NoGravity
 name: 
 callback: 
 argument: 
 name: 
 callback: 
 argument: 
@@ -33,11 +148,11 @@ argument:
 --------------------
 class: FL_INPUT
 type: NORMAL_INPUT
 --------------------
 class: FL_INPUT
 type: NORMAL_INPUT
-box: 90 20 270 30
+box: 85 10 270 30
 boxtype: FL_DOWN_BOX
 colors: FL_COL1 FL_MCOL
 alignment: FL_ALIGN_LEFT
 boxtype: FL_DOWN_BOX
 colors: FL_COL1 FL_MCOL
 alignment: FL_ALIGN_LEFT
-style: FL_NORMAL_STYLE
+style: FL_BOLD_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
 label: File|#F
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
 label: File|#F
@@ -51,7 +166,7 @@ argument: 0
 --------------------
 class: FL_BUTTON
 type: NORMAL_BUTTON
 --------------------
 class: FL_BUTTON
 type: NORMAL_BUTTON
-box: 370 20 100 30
+box: 365 10 100 30
 boxtype: FL_UP_BOX
 colors: FL_COL1 FL_COL1
 alignment: FL_ALIGN_CENTER
 boxtype: FL_UP_BOX
 colors: FL_COL1 FL_COL1
 alignment: FL_ALIGN_CENTER
@@ -69,140 +184,122 @@ argument: 0
 --------------------
 class: FL_LABELFRAME
 type: ENGRAVED_FRAME
 --------------------
 class: FL_LABELFRAME
 type: ENGRAVED_FRAME
-box: 20 70 240 140
+box: 15 50 260 115
 boxtype: FL_NO_BOX
 colors: FL_BLACK FL_COL1
 alignment: FL_ALIGN_TOP_LEFT
 boxtype: FL_NO_BOX
 colors: FL_BLACK FL_COL1
 alignment: FL_ALIGN_TOP_LEFT
-style: FL_NORMAL_STYLE
+style: FL_BOLD_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
-label: Size
+label: Bounding Box
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
 name: 
 callback: 
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
 name: 
 callback: 
-argument: 
+argument: 0
 
 --------------------
 class: FL_INPUT
 type: NORMAL_INPUT
 
 --------------------
 class: FL_INPUT
 type: NORMAL_INPUT
-box: 90 80 85 30
+box: 25 75 50 30
 boxtype: FL_DOWN_BOX
 colors: FL_COL1 FL_MCOL
 boxtype: FL_DOWN_BOX
 colors: FL_COL1 FL_MCOL
-alignment: FL_ALIGN_LEFT
-style: FL_NORMAL_STYLE
-size: FL_NORMAL_SIZE
-lcol: FL_BLACK
-label: Width|#W
-shortcut: 
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: input_width
-callback: C_FormBaseInputCB
-argument: 0
-
---------------------
-class: FL_CHOICE
-type: NORMAL_CHOICE
-box: 180 80 65 30
-boxtype: FL_FRAME_BOX
-colors: FL_COL1 FL_BLACK
-alignment: FL_ALIGN_LEFT
+alignment: FL_ALIGN_TOP_LEFT
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
-label: 
+label: xLeftBottom|#x
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
-name: choice_width_units
+name: input_bbx0
 callback: C_FormBaseInputCB
 argument: 0
 
 --------------------
 class: FL_INPUT
 type: NORMAL_INPUT
 callback: C_FormBaseInputCB
 argument: 0
 
 --------------------
 class: FL_INPUT
 type: NORMAL_INPUT
-box: 90 120 85 30
+box: 160 75 50 30
 boxtype: FL_DOWN_BOX
 colors: FL_COL1 FL_MCOL
 boxtype: FL_DOWN_BOX
 colors: FL_COL1 FL_MCOL
-alignment: FL_ALIGN_LEFT
+alignment: FL_ALIGN_TOP_LEFT
 style: FL_NORMAL_STYLE
 style: FL_NORMAL_STYLE
-size: FL_NORMAL_SIZE
+size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
 lcol: FL_BLACK
-label: Height|#H
+label: yLeftBottom|#y
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
-name: input_height
+name: input_bby0
 callback: C_FormBaseInputCB
 argument: 0
 
 --------------------
 callback: C_FormBaseInputCB
 argument: 0
 
 --------------------
-class: FL_CHOICE
-type: NORMAL_CHOICE
-box: 180 120 65 30
-boxtype: FL_FRAME_BOX
-colors: FL_COL1 FL_BLACK
-alignment: FL_ALIGN_LEFT
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 25 125 50 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_TOP
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
-label: 
+label: xRightTop|#R
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
-name: choice_height_units
+name: input_bbx1
 callback: C_FormBaseInputCB
 argument: 0
 
 --------------------
 class: FL_INPUT
 type: NORMAL_INPUT
 callback: C_FormBaseInputCB
 argument: 0
 
 --------------------
 class: FL_INPUT
 type: NORMAL_INPUT
-box: 90 170 85 30
+box: 160 125 50 30
 boxtype: FL_DOWN_BOX
 colors: FL_COL1 FL_MCOL
 boxtype: FL_DOWN_BOX
 colors: FL_COL1 FL_MCOL
-alignment: FL_ALIGN_LEFT
+alignment: FL_ALIGN_TOP_LEFT
 style: FL_NORMAL_STYLE
 style: FL_NORMAL_STYLE
-size: FL_NORMAL_SIZE
+size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
 lcol: FL_BLACK
-label: Scale|#S
+label: yRightTop|#T
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
-name: input_scale
+name: input_bby1
 callback: C_FormBaseInputCB
 argument: 0
 
 --------------------
 callback: C_FormBaseInputCB
 argument: 0
 
 --------------------
-class: FL_TEXT
-type: NORMAL_TEXT
-box: 180 170 60 30
-boxtype: FL_FLAT_BOX
-colors: FL_COL1 FL_MCOL
-alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 290 100 30 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_RIGHT
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
-label: %
+label: clip to bounding box|#c
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
-name: 
-callback: 
-argument: 
+name: button_clip
+callback: C_FormBaseInputCB
+argument: 0
 
 --------------------
 class: FL_LABELFRAME
 type: ENGRAVED_FRAME
 
 --------------------
 class: FL_LABELFRAME
 type: ENGRAVED_FRAME
-box: 270 70 200 70
+box: 15 165 465 60
 boxtype: FL_NO_BOX
 colors: FL_BLACK FL_COL1
 alignment: FL_ALIGN_TOP_LEFT
 boxtype: FL_NO_BOX
 colors: FL_BLACK FL_COL1
 alignment: FL_ALIGN_TOP_LEFT
-style: FL_NORMAL_STYLE
+style: FL_BOLD_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
-label: Rotation
+label: Subfigure
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
@@ -211,202 +308,791 @@ callback:
 argument: 
 
 --------------------
 argument: 
 
 --------------------
-class: FL_INPUT
-type: INT_INPUT
-box: 340 90 70 30
-boxtype: FL_DOWN_BOX
-colors: FL_COL1 FL_MCOL
-alignment: FL_ALIGN_LEFT
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 15 180 30 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_RIGHT
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
-label: Angle|#n
+label: On/Off|#O
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
-name: input_rotate_angle
+name: check_subcaption
 callback: C_FormBaseInputCB
 argument: 0
 
 --------------------
 callback: C_FormBaseInputCB
 argument: 0
 
 --------------------
-class: FL_TEXT
-type: NORMAL_TEXT
-box: 410 90 50 30
-boxtype: FL_FLAT_BOX
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 110 185 330 30
+boxtype: FL_DOWN_BOX
 colors: FL_COL1 FL_MCOL
 colors: FL_COL1 FL_MCOL
-alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+alignment: FL_ALIGN_TOP
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
-label: degs
+label: Title|#T
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
-name: 
-callback: 
-argument: 
+name: input_subcaption
+callback: C_FormBaseInputCB
+argument: 0
 
 --------------------
 class: FL_LABELFRAME
 type: ENGRAVED_FRAME
 
 --------------------
 class: FL_LABELFRAME
 type: ENGRAVED_FRAME
-box: 270 160 200 50
+box: 285 50 195 115
 boxtype: FL_NO_BOX
 colors: FL_BLACK FL_COL1
 alignment: FL_ALIGN_TOP_LEFT
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
 boxtype: FL_NO_BOX
 colors: FL_BLACK FL_COL1
 alignment: FL_ALIGN_TOP_LEFT
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
-label: Display Options
+label: Options
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
 name: 
 callback: 
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
 name: 
 callback: 
-argument: 
+argument: 0
 
 --------------------
 class: FL_CHECKBUTTON
 type: PUSH_BUTTON
 
 --------------------
 class: FL_CHECKBUTTON
 type: PUSH_BUTTON
-box: 400 170 30 30
+box: 290 125 30 30
 boxtype: FL_NO_BOX
 colors: FL_COL1 FL_YELLOW
 boxtype: FL_NO_BOX
 colors: FL_COL1 FL_YELLOW
-alignment: FL_ALIGN_LEFT
+alignment: FL_ALIGN_RIGHT
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
-label: Display in LyX|#D
+label: draft mode|#D
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
-name: check_display
+name: button_draft
 callback: C_FormBaseInputCB
 argument: 0
 
 --------------------
 callback: C_FormBaseInputCB
 argument: 0
 
 --------------------
-class: FL_LABELFRAME
-type: ENGRAVED_FRAME
-box: 20 230 450 90
-boxtype: FL_NO_BOX
-colors: FL_BLACK FL_COL1
-alignment: FL_ALIGN_TOP_LEFT
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 80 75 50 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
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
-label: Subcaption
+label: 
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
-name: 
-callback: 
-argument: 
+name: choice_bb_x0
+callback: C_FormBaseInputCB
+argument: 0
 
 --------------------
 
 --------------------
-class: FL_CHECKBUTTON
-type: PUSH_BUTTON
-box: 110 240 30 30
-boxtype: FL_NO_BOX
-colors: FL_COL1 FL_YELLOW
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 220 75 45 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
 alignment: FL_ALIGN_LEFT
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
-label: Subcaption|#u
+label: 
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
-name: check_subcaption
+name: choice_bb_y0
 callback: C_FormBaseInputCB
 argument: 0
 
 --------------------
 callback: C_FormBaseInputCB
 argument: 0
 
 --------------------
-class: FL_INPUT
-type: NORMAL_INPUT
-box: 110 280 350 30
-boxtype: FL_DOWN_BOX
-colors: FL_COL1 FL_MCOL
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 80 125 50 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
 alignment: FL_ALIGN_LEFT
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
-label: Title|#T
+label: 
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
-name: input_subcaption
+name: choice_bb_x1
 callback: C_FormBaseInputCB
 argument: 0
 
 --------------------
 callback: C_FormBaseInputCB
 argument: 0
 
 --------------------
-class: FL_BUTTON
-type: NORMAL_BUTTON
-box: 20 350 100 30
-boxtype: FL_UP_BOX
-colors: FL_COL1 FL_COL1
-alignment: FL_ALIGN_CENTER
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 220 125 45 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
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
-label: Restore|#R
+label: 
 shortcut: 
 shortcut: 
-resize: FL_RESIZE_NONE
-gravity: FL_SouthWest FL_SouthWest
-name: button_restore
-callback: C_FormBaseRestoreCB
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_bb_y1
+callback: C_FormBaseInputCB
 argument: 0
 
 --------------------
 class: FL_BUTTON
 argument: 0
 
 --------------------
 class: FL_BUTTON
-type: RETURN_BUTTON
-box: 180 350 90 30
+type: NORMAL_BUTTON
+box: 295 65 170 25
 boxtype: FL_UP_BOX
 colors: FL_COL1 FL_COL1
 alignment: FL_ALIGN_CENTER
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
 boxtype: FL_UP_BOX
 colors: FL_COL1 FL_COL1
 alignment: FL_ALIGN_CENTER
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
-label: Ok
-shortcut: ^M
+label: Get BB from file|#G
+shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
-name: button_ok
-callback: C_FormBaseOKCB
+name: button_getBB
+callback: C_FormBaseInputCB
 argument: 0
 
 argument: 0
 
+=============== FORM ===============
+Name: form_size
+Width: 505
+Height: 235
+Number of Objects: 27
+
 --------------------
 --------------------
-class: FL_BUTTON
-type: NORMAL_BUTTON
-box: 280 350 90 30
-boxtype: FL_UP_BOX
+class: FL_BOX
+type: FLAT_BOX
+box: 0 0 505 235
+boxtype: FL_FLAT_BOX
 colors: FL_COL1 FL_COL1
 alignment: FL_ALIGN_CENTER
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
 colors: FL_COL1 FL_COL1
 alignment: FL_ALIGN_CENTER
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
-label: Apply|#A
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_LABELFRAME
+type: ENGRAVED_FRAME
+box: 15 10 225 30
+boxtype: FL_NO_BOX
+colors: FL_BLACK FL_COL1
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_BOLD_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: LaTeX
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 80 80 85 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Width|#W
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_width
+callback: C_FormBaseInputCB
+argument: 0
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 170 80 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
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
-name: button_apply
-callback: C_FormBaseApplyCB
+name: choice_width_units
+callback: C_FormBaseInputCB
 argument: 0
 
 --------------------
 argument: 0
 
 --------------------
-class: FL_BUTTON
-type: NORMAL_BUTTON
-box: 380 350 90 30
-boxtype: FL_UP_BOX
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 80 120 85 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Height|#H
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_height
+callback: C_FormBaseInputCB
+argument: 0
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 170 120 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_height_units
+callback: C_FormBaseInputCB
+argument: 0
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 80 185 85 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Scale|#S
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_scale
+callback: C_FormBaseInputCB
+argument: 0
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 170 185 25 30
+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_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_LABELFRAME
+type: ENGRAVED_FRAME
+box: 255 10 230 215
+boxtype: FL_NO_BOX
+colors: FL_BLACK FL_COL1
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_BOLD_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: LyX Screen
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 315 145 85 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Width|#w
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_lyxwidth
+callback: C_FormBaseInputCB
+argument: 0
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 405 145 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_width_lyxwidth
+callback: C_FormBaseInputCB
+argument: 0
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 315 185 85 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Height|#h
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_lyxheight
+callback: C_FormBaseInputCB
+argument: 0
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 405 185 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_width_lyxheight
+callback: C_FormBaseInputCB
+argument: 0
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 15 40 225 120
+boxtype: FL_NO_BOX
+colors: FL_BLACK FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 15 160 225 65
+boxtype: FL_NO_BOX
+colors: FL_BLACK FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 10 10 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_display
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 260 20 30 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Don't display|#D
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_check_display
+callback: C_FormBaseInputCB
+argument: 0
+       value: 1
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 260 75 30 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: in Grayscale|#G
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_display_gray
+callback: C_FormBaseInputCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 260 105 30 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: in Color|#C
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_display_color
+callback: C_FormBaseInputCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 260 45 30 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: in Monochrome|#M
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_display_mono
+callback: C_FormBaseInputCB
+argument: 0
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 10 10 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_size
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 15 10 30 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_RIGHT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Default|#D
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_default
+callback: C_FormBaseInputCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 15 40 30 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_RIGHT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: On/Off|#O
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_wh
+callback: C_FormBaseInputCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 15 155 30 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_RIGHT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: On/Off|#n
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_scale
+callback: C_FormBaseInputCB
+argument: 0
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 100 40 30 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_RIGHT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: keep aspectratio|#k
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: check_aspectratio
+callback: C_FormBaseInputCB
+argument: 0
+
+=============== FORM ===============
+Name: form_special
+Width: 505
+Height: 235
+Number of Objects: 7
+
+--------------------
+class: FL_BOX
+type: FLAT_BOX
+box: 0 0 505 235
+boxtype: FL_FLAT_BOX
 colors: FL_COL1 FL_COL1
 alignment: FL_ALIGN_CENTER
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
 colors: FL_COL1 FL_COL1
 alignment: FL_ALIGN_CENTER
 style: FL_NORMAL_STYLE
 size: FL_DEFAULT_SIZE
 lcol: FL_BLACK
-label: Cancel|^[
+label: 
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
 shortcut: 
 resize: FL_RESIZE_ALL
 gravity: FL_NoGravity FL_NoGravity
-name: button_cancel
-callback: C_FormBaseCancelCB
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_LABELFRAME
+type: ENGRAVED_FRAME
+box: 15 15 255 65
+boxtype: FL_NO_BOX
+colors: FL_BLACK FL_COL1
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_BOLD_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Rotation
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: INT_INPUT
+box: 25 40 70 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Angle|#n
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_rotate_angle
+callback: C_FormBaseInputCB
+argument: 0
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 100 45 45 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: degrees
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_LABELFRAME
+type: ENGRAVED_FRAME
+box: 275 15 205 65
+boxtype: FL_NO_BOX
+colors: FL_BLACK FL_COL1
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_BOLD_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Special Options
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 285 42 180 27
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Userdefined LaTeX-Options|#U
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_special
+callback: C_FormBaseInputCB
+argument: 0
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE2
+box: 150 40 115 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Origin|#O
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_origin
+callback: C_FormBaseInputCB
 argument: 0
 
 ==============================
 argument: 0
 
 ==============================
-create_the_forms
+--------------------
index 490ab6e767eb3759e73bc0fa9a84fdc9412578c7..c4325d88012c236db156e51d5d180609d1f1a749 100644 (file)
 
 class LyXLength;
 
 
 class LyXLength;
 
+// what we always need for lengths
+string const choice_Length_All =
+    "cm|mm|in|%%|c%%|p%%|l%%|ex|em|pt|sp|bp|dd|pc|cc|mu";
+string const choice_Length_WithUnit =
+    "cm|mm|in|ex|em|pt|sp|bp|dd|pc|cc|mu";     // all with a Unit
+
 /// Extract shortcut from <ident>|<shortcut> string
 char const * flyx_shortcut_extract(char const * sc);
 /// Shortcut for flyx_shortcut_extract
 /// Extract shortcut from <ident>|<shortcut> string
 char const * flyx_shortcut_extract(char const * sc);
 /// Shortcut for flyx_shortcut_extract
index ad2b443b2dfe2eba4e4763986defd7c31b1427a4..781881e39cf89d2f4b2c3b6d7c3a6b0b3f1c30f0 100644 (file)
@@ -1,3 +1,7 @@
+2002-01-27  Herbert Voss  <voss@lyx.org>
+
+       * GraphicsCacheItem.h: added Converting to the ImageStatus enum.
+
 2002-01-17  John Levon  <moz@compsoc.man.ac.uk>
 
        * ImageLoaderXPM.C: don't set XpmColorKey flag if we don't use it
 2002-01-17  John Levon  <moz@compsoc.man.ac.uk>
 
        * ImageLoaderXPM.C: don't set XpmColorKey flag if we don't use it
index 3895f3dafd535d8d9adab1b250cf63e471de9e03..6264f3b784792fe303e6e0f0ed5696df3602e192 100644 (file)
@@ -41,6 +41,8 @@ public:
                ///
                Loading = 1,
                ///
                ///
                Loading = 1,
                ///
+               Converting,
+               ///
                ErrorConverting,
                ///
                ErrorReading,
                ErrorConverting,
                ///
                ErrorReading,
index 09174dab97fa6f2ac64a38aed74ab41753fcca6f..385dc37819dba6a08cb34a18212872804b0504d3 100644 (file)
@@ -1,3 +1,13 @@
+2002-01-27  Herbert Voss  <voss@lyx.org>
+
+       * insetgraphic.[Ch]: mostly newritten to support graphicx with
+       all options and to be sure that the old figinsets are correct
+       converted.
+       * insetgraphicParams.[Ch]: a lot of chamges to have a clean data-
+       structure and to support all lengths as LyXLength. The Parameter
+       structure changed again, but reading of "old" 1.2 graphic insets
+       is no problem.
+
 2002-01-20  Dekel Tsur  <dekelts@tau.ac.il>
 
        * insetert.h (forceDefaultParagraphs): Added
 2002-01-20  Dekel Tsur  <dekelts@tau.ac.il>
 
        * insetert.h (forceDefaultParagraphs): Added
index 4e19504f5a784b12cc5f25913778a07d02813024..5c2a21d56198b2f525b1af0e1e3aab9ce51366f1 100644 (file)
@@ -3,22 +3,12 @@
  * 
  *           LyX, The Document Processor
  *      
  * 
  *           LyX, The Document Processor
  *      
- *           Copyright 1995-2001 the LyX Team.
+ *           Copyright 1995-2002 the LyX Team.
  *           
  *           
- *           This file Copyright 2000 Baruch Even.
+ * \author Baruch Even
+ * \author Herbert Voss <voss@lyx.org>
  * ====================================================== */
 
  * ====================================================== */
 
-/*
-Major tasks:
-       * Switch to convert the images in the background, this requires work on
-               the converter, the systemcontroller and the graphics cache.
-
-Minor tasks:
-    * Pop up a dialog if the widget version is higher than what we accept.
-       * Provide sed/awk/C code to downgrade from InsetGraphics to FigInset(?)
-        
-*/
-
 /*
 Known BUGS:
     
 /*
 Known BUGS:
     
@@ -47,10 +37,6 @@ Known BUGS:
                its original size and color, resizing is done in the final output,
                but not in the LyX window.
 
                its original size and color, resizing is done in the final output,
                but not in the LyX window.
 
-       * The scale option is only handled for the horizontal part, the vertical
-               part will not work. For now it is also shown only for horizontal
-               resizing on the form.
-
        * EPS figures are not fully detected, they may have a lot of possible
                suffixes so we need to read the file and detect if it's EPS or not.
                [Implemented, need testing]
        * EPS figures are not fully detected, they may have a lot of possible
                suffixes so we need to read the file and detect if it's EPS or not.
                [Implemented, need testing]
@@ -62,13 +48,6 @@ TODO Before initial production release:
           And act upon them. Make sure not to remove InsetFig code for the 
                  1.2.0 release, only afterwards, after deployment shows InsetGraphics
                  to be ok.
           And act upon them. Make sure not to remove InsetFig code for the 
                  1.2.0 release, only afterwards, after deployment shows InsetGraphics
                  to be ok.
-TODO Extended features:
-    * Advanced Latex tab folder.
-    * Add support for more features so that it will be better than insetfig.
-        * Keep aspect ratio radio button
-        * Support for complete control over the latex parameters for TeXperts
         * What advanced features the users want to do?
             Implement them in a non latex dependent way, but a logical way.
             LyX should translate it to latex or any other fitting format.
         * What advanced features the users want to do?
             Implement them in a non latex dependent way, but a logical way.
             LyX should translate it to latex or any other fitting format.
@@ -83,43 +62,16 @@ TODO Extended features:
        * Add support for the 'picinpar' package.
        * Improve support for 'subfigure' - Allow to set the various options
                that are possible.
        * Add support for the 'picinpar' package.
        * Improve support for 'subfigure' - Allow to set the various options
                that are possible.
-       * Add resizing by percentage of image size (50%, 150%) -
-         usefull for two images of different size to be resized where
-         they both should have the same scale compared to each other.
  */
 
 /* NOTES:
  */
 
 /* NOTES:
- *
- * Intentions:
- *  This is currently a moving target, I'm trying stuff and learning what
- *  is needed and how to accomplish it, since there is no predefined goal or
- *  way to go I invent it as I go.
- *
- *  My current intention is for seperation from LaTeX, the basic needs are 
- *  resizing and rotating, displaying on screen in various depths and printing
- *  conversion of depths (independent of the display depth). For this I'll 
- *  provide a simple interface.
- *
- *  The medium level includes clipping of the image, but in a limited way.
- *
- *  For the LaTeX gurus I'll provide a complete control over the output, but
- *  this is latex dependent and guru dependent so I'd rather avoid doing this
- *  for the normal user. This stuff includes clipping, special image size
- *  specifications (\textwidth\minus 2in) which I see no way to generalize
- *  to non-latex specific way.
- *
- * Used packages:
- *  'graphicx' for the graphics inclusion.
- *  'subfigure' for the subfigures.
- *
  * Fileformat:
  * Fileformat:
- *
  * Current version is 1 (inset file format version), when changing it
  * it should be changed in the Write() function when writing in one place
  * and when reading one should change the version check and the error message.
  * Current version is 1 (inset file format version), when changing it
  * it should be changed in the Write() function when writing in one place
  * and when reading one should change the version check and the error message.
- *
  * The filename is kept in  the lyx file in a relative way, so as to allow
  * moving the document file and its images with no problem.
  * The filename is kept in  the lyx file in a relative way, so as to allow
  * moving the document file and its images with no problem.
+ * 
  *
  * Conversions:
  *   Postscript output means EPS figures.
  *
  * Conversions:
  *   Postscript output means EPS figures.
@@ -155,6 +107,7 @@ TODO Extended features:
 #include "lyx_gui_misc.h"
 #include "support/FileInfo.h"
 #include "support/filetools.h"
 #include "lyx_gui_misc.h"
 #include "support/FileInfo.h"
 #include "support/filetools.h"
+#include "frontends/controllers/helper_funcs.h"
 #include "support/lyxlib.h"
 #include "lyxtext.h"
 #include "lyxrc.h"
 #include "support/lyxlib.h"
 #include "lyxtext.h"
 #include "lyxrc.h"
@@ -171,6 +124,9 @@ using std::ifstream;
 using std::ostream;
 using std::endl;
 
 using std::ostream;
 using std::endl;
 
+///////////////////////////////////////////////////////////////////////////
+int VersionNumber = 1;
+///////////////////////////////////////////////////////////////////////////
 
 // This function is a utility function
 // ... that should be with ChangeExtension ...
 
 // This function is a utility function
 // ... that should be with ChangeExtension ...
@@ -209,31 +165,28 @@ string const
 InsetGraphics::statusMessage() const
 {
        string msg;
 InsetGraphics::statusMessage() const
 {
        string msg;
-
        if (cacheHandle.get()) {
                switch (cacheHandle->getImageStatus()) {
                case GraphicsCacheItem::UnknownError:
                        msg = _("Unknown Error");
                        break;
        if (cacheHandle.get()) {
                switch (cacheHandle->getImageStatus()) {
                case GraphicsCacheItem::UnknownError:
                        msg = _("Unknown Error");
                        break;
-
                case GraphicsCacheItem::Loading:
                        msg = _("Loading...");
                        break;
                case GraphicsCacheItem::Loading:
                        msg = _("Loading...");
                        break;
-
                case GraphicsCacheItem::ErrorReading:
                        msg = _("Error reading");
                        break;
                case GraphicsCacheItem::ErrorReading:
                        msg = _("Error reading");
                        break;
-
+               case GraphicsCacheItem::Converting:
+                       msg = _("Converting Image");
+                       break;
                case GraphicsCacheItem::ErrorConverting:
                        msg = _("Error converting");
                        break;
                case GraphicsCacheItem::ErrorConverting:
                        msg = _("Error converting");
                        break;
-
                case GraphicsCacheItem::Loaded:
                        // No message to write.
                        break;
                }
        }
                case GraphicsCacheItem::Loaded:
                        // No message to write.
                        break;
                }
        }
-
        return msg;
 }
 
        return msg;
 }
 
@@ -369,8 +322,7 @@ Inset::EDITABLE InsetGraphics::editable() const
 
 void InsetGraphics::write(Buffer const * buf, ostream & os) const
 {
 
 void InsetGraphics::write(Buffer const * buf, ostream & os) const
 {
-       os << "Graphics FormatVersion 1\n";
-
+       os << "Graphics FormatVersion " << VersionNumber << '\n';
        params.Write(buf, os);
 }
 
        params.Write(buf, os);
 }
 
@@ -407,7 +359,7 @@ void InsetGraphics::readInsetGraphics(Buffer const * buf, LyXLex & lex)
                } else if (token == "FormatVersion") {
                        lex.next();
                        int version = lex.getInteger();
                } else if (token == "FormatVersion") {
                        lex.next();
                        int version = lex.getInteger();
-                       if (version > 1)
+                       if (version > VersionNumber)
                                lyxerr
                                << "This document was created with a newer Graphics widget"
                                ", You should use a newer version of LyX to read this"
                                lyxerr
                                << "This document was created with a newer Graphics widget"
                                ", You should use a newer version of LyX to read this"
@@ -426,6 +378,8 @@ void InsetGraphics::readInsetGraphics(Buffer const * buf, LyXLex & lex)
 
 void InsetGraphics::readFigInset(Buffer const * buf, LyXLex & lex)
 {
 
 void InsetGraphics::readFigInset(Buffer const * buf, LyXLex & lex)
 {
+       std::vector<string> const oldUnits =
+               getVectorFromString("pt,cm,in,p%,c%");
        bool finished = false;
        
        while (lex.isOK() && !finished) {
        bool finished = false;
        
        while (lex.isOK() && !finished) {
@@ -450,6 +404,7 @@ void InsetGraphics::readFigInset(Buffer const * buf, LyXLex & lex)
                } else if (token == "subcaption") {
                        if (lex.eatLine())
                                params.subcaptionText = lex.getString();
                } else if (token == "subcaption") {
                        if (lex.eatLine())
                                params.subcaptionText = lex.getString();
+                       params.subcaption = true;
                } else if (token == "label") {
                        if (lex.next());
                        // kept for backwards compability. Delete in 0.13.x
                } else if (token == "label") {
                        if (lex.next());
                        // kept for backwards compability. Delete in 0.13.x
@@ -457,14 +412,10 @@ void InsetGraphics::readFigInset(Buffer const * buf, LyXLex & lex)
                        if (lex.next())
                                params.rotateAngle = lex.getFloat();
                } else if (token == "size") {
                        if (lex.next())
                                params.rotateAngle = lex.getFloat();
                } else if (token == "size") {
-                       // Size of image on screen is ignored in InsetGraphics, just eat
-                       // the input.
-                       if (lex.next()) {
-                               lex.getInteger();
-                       }
-                       if (lex.next()) {
-                               lex.getInteger();
-                       }
+                       if (lex.next())
+                               params.lyxwidth = LyXLength(lex.getString()+"pt");
+                       if (lex.next())
+                               params.lyxheight = LyXLength(lex.getString()+"pt");
                } else if (token == "flags") {
                        InsetGraphicsParams::DisplayType tmp = InsetGraphicsParams::COLOR;
                        if (lex.next())
                } else if (token == "flags") {
                        InsetGraphicsParams::DisplayType tmp = InsetGraphicsParams::COLOR;
                        if (lex.next())
@@ -476,78 +427,73 @@ void InsetGraphics::readFigInset(Buffer const * buf, LyXLex & lex)
                } else if (token == "subfigure") {
                        params.subcaption = true;
                } else if (token == "width") {
                } else if (token == "subfigure") {
                        params.subcaption = true;
                } else if (token == "width") {
+                   if (lex.next()) {
+                       int i = lex.getInteger();
                        if (lex.next()) {
                        if (lex.next()) {
-                               params.widthResize = static_cast<InsetGraphicsParams::Resize>(lex.getInteger());
-                       }
-                       if (lex.next()) {
-                               params.widthSize = lex.getFloat();
+                           if (i == 5) {
+                               params.scale = lex.getInteger();
+                               params.size_type = InsetGraphicsParams::SCALE;
+                           } else {
+                               params.width = LyXLength(lex.getString()+oldUnits[i]);
+                               params.size_type = InsetGraphicsParams::WH;
+                           }
                        }
                        }
+                   }
                } else if (token == "height") {
                } else if (token == "height") {
+                   if (lex.next()) {
+                       int i = lex.getInteger();
                        if (lex.next()) {
                        if (lex.next()) {
-                               params.heightResize = static_cast<InsetGraphicsParams::Resize>(lex.getInteger());
-                       }
-                       if (lex.next()) {
-                               params.heightSize = lex.getFloat();
+                           params.height = LyXLength(lex.getString()+oldUnits[i]);
+                           params.size_type = InsetGraphicsParams::WH;
                        }
                        }
+                   }
                }
        }
 }
 
                }
        }
 }
 
-
-namespace {
-
-void formatResize(ostream & os, string const & key,
-                 InsetGraphicsParams::Resize resizeType, double size)
-{
-       switch (resizeType) {
-       case InsetGraphicsParams::DEFAULT_SIZE:
-               break;
-
-       case InsetGraphicsParams::CM:
-               os << key << '=' << size << "cm,";
-               break;
-
-       case InsetGraphicsParams::INCH:
-               os << key << '=' << size << "in,";
-               break;
-
-       case InsetGraphicsParams::PERCENT_PAGE:
-               os << key << '=' << size / 100 << "\\text" << key << ',';
-               break;
-
-       case InsetGraphicsParams::PERCENT_COLUMN:
-               os << key << '=' << size / 100 << "\\column" << key << ',';
-               break;
-
-       case InsetGraphicsParams::SCALE:
-               os << "scale" << '=' << size/100 << ',';
-       }
-}
-
-} // namespace anon
-
-
-string const
-InsetGraphics::createLatexOptions() const
+string const InsetGraphics::createLatexOptions() const
 {
        // Calculate the options part of the command, we must do it to a string
        // stream since we might have a trailing comma that we would like to remove
        // before writing it to the output stream.
        ostringstream options;
 {
        // Calculate the options part of the command, we must do it to a string
        // stream since we might have a trailing comma that we would like to remove
        // before writing it to the output stream.
        ostringstream options;
-
-       formatResize(options, "width", params.widthResize, params.widthSize);
-       formatResize(options, "height", params.heightResize, params.heightSize);
-
+       if (!params.bb.empty())
+           options << "bb=" << strip(params.bb) << ',';
+       if (params.draft)
+           options << "%\n  draft,";
+       if (params.clip)
+           options << "%\n  clip,";
+       if (params.size_type == InsetGraphicsParams::WH) {
+           if (!params.width.zero())
+               options << "%\n  width=" << params.width.asLatexString() << ',';
+           if (!params.height.zero())
+               options << "%\n  height=" << params.height.asLatexString() << ',';
+       } else if (params.size_type == InsetGraphicsParams::SCALE) {
+           if (params.scale > 0)
+               options << "%\n  scale=" << double(params.scale)/100.0 << ',';
+       }
+       if (params.keepAspectRatio)
+           options << "%\n  keepaspectratio,";
        // Make sure it's not very close to zero, a float can be effectively
        // zero but not exactly zero.
        if (!lyx::float_equal(params.rotateAngle, 0, 0.001)) {
        // Make sure it's not very close to zero, a float can be effectively
        // zero but not exactly zero.
        if (!lyx::float_equal(params.rotateAngle, 0, 0.001)) {
-               options << "angle="
-                       << params.rotateAngle << ',';
+           options << "%\n  angle=" << params.rotateAngle << ',';
+           if (!params.rotateOrigin.empty()) {
+               options << "%\n  origin=";
+               options << params.rotateOrigin[0];
+               if (contains(params.rotateOrigin,"Top"))
+                   options << 't';
+               else if (contains(params.rotateOrigin,"Bottom"))
+                   options << 'b';
+               else if (contains(params.rotateOrigin,"Baseline"))
+                   options << 'B';
+               options << ',';
+           }
        }
        }
-
+       if (!params.special.empty())
+           options << params.special << ',';
        string opts = options.str().c_str();
        opts = strip(opts, ',');
        string opts = options.str().c_str();
        opts = strip(opts, ',');
-
        return opts;
 }
 
        return opts;
 }
 
@@ -612,8 +558,7 @@ string decideOutputImageFormat(string const & suffix, enum FileType type)
 {
        // lyxrc.pdf_mode means:
        // Are we creating a PDF or a PS file?
 {
        // lyxrc.pdf_mode means:
        // Are we creating a PDF or a PS file?
-       // (Should actually mean, are we using latex or pdflatex).
-       
+       // (Should actually mean, are we using latex or pdflatex).      
        if (lyxrc.pdf_mode) {
                if (type == EPS || type == EPS || type == PDF)
                        return "pdf";
        if (lyxrc.pdf_mode) {
                if (type == EPS || type == EPS || type == PDF)
                        return "pdf";
@@ -635,15 +580,12 @@ string decideOutputImageFormat(string const & suffix, enum FileType type)
 
 } // Anon. namespace
 
 
 } // Anon. namespace
 
-string const 
-InsetGraphics::prepareFile(Buffer const *buf) const
+string const InsetGraphics::prepareFile(Buffer const *buf) const
 {
 {
-
        // do_convert = Do we need to convert the file?
        // nice = Do we create a nice version?
        //        This is used when exporting the latex file only.
        // 
        // do_convert = Do we need to convert the file?
        // nice = Do we create a nice version?
        //        This is used when exporting the latex file only.
        // 
-       // 
        // if (!do_convert)
        //   return original filename
        // 
        // if (!do_convert)
        //   return original filename
        // 
@@ -680,9 +622,7 @@ InsetGraphics::prepareFile(Buffer const *buf) const
                string const relname = MakeRelPath(params.filename, path);
                outfile = RemoveExtension(relname);
        }
                string const relname = MakeRelPath(params.filename, path);
                outfile = RemoveExtension(relname);
        }
-
        converters.convert(buf, params.filename, outfile, extension, image_target);
        converters.convert(buf, params.filename, outfile, extension, image_target);
-       
        return outfile;
 }
 
        return outfile;
 }
 
@@ -690,58 +630,36 @@ InsetGraphics::prepareFile(Buffer const *buf) const
 int InsetGraphics::latex(Buffer const *buf, ostream & os,
                         bool /*fragile*/, bool/*fs*/) const
 {
 int InsetGraphics::latex(Buffer const *buf, ostream & os,
                         bool /*fragile*/, bool/*fs*/) const
 {
-       // MISSING: We have to decide how to do the order of the options
-       // that is dependent of order, like width, height, angle. Should
-       // we rotate before scale? Should we let the user decide?
-       // bool rot_before_scale; ?
-
-       // (BE) As a first step we should do a scale before rotate since this is
-       // more like the natural thought of how to do it.
-       // (BE) I believe that a priority list presented to the user with
-       // a default order would be the best, though it would be better to
-       // hide such a thing in an "Advanced options" dialog.
-       // (BE) This should go an advanced LaTeX options dialog.
-
        // If there is no file specified, just output a message about it in
        // the latex output.
        if (params.filename.empty()) {
                os  << "\\fbox{\\rule[-0.5in]{0pt}{1in}"
        // If there is no file specified, just output a message about it in
        // the latex output.
        if (params.filename.empty()) {
                os  << "\\fbox{\\rule[-0.5in]{0pt}{1in}"
-                       << _("empty figure path")
-                       << "}\n";
-
+                       << _("empty figure path") << "}\n";
                return 1; // One end of line marker added to the stream.
        }
                return 1; // One end of line marker added to the stream.
        }
-
        // Keep count of newlines that we issued.
        int newlines = 0;
        // Keep count of newlines that we issued.
        int newlines = 0;
-
        // This variables collect all the latex code that should be before and
        // after the actual includegraphics command.
        string before;
        string after;
        // This variables collect all the latex code that should be before and
        // after the actual includegraphics command.
        string before;
        string after;
-
        // Do we want subcaptions?
        if (params.subcaption) {
                before += "\\subfigure[" + params.subcaptionText + "]{";
                after = '}' + after;
        }
        // Do we want subcaptions?
        if (params.subcaption) {
                before += "\\subfigure[" + params.subcaptionText + "]{";
                after = '}' + after;
        }
-
        // We never use the starred form, we use the "clip" option instead.
        os << before << "\\includegraphics";
        // We never use the starred form, we use the "clip" option instead.
        os << before << "\\includegraphics";
-
        // Write the options if there are any.
        string const opts = createLatexOptions();
        if (!opts.empty()) {
        // Write the options if there are any.
        string const opts = createLatexOptions();
        if (!opts.empty()) {
-               os << '[' << opts << ']';
+               os << "[%\n  " << opts << ']';
        }
        }
-
        // Make the filename relative to the lyx file
        // and remove the extension so the LaTeX will use whatever is
        // appropriate (when there are several versions in different formats)
        string const filename = prepareFile(buf);
        // Make the filename relative to the lyx file
        // and remove the extension so the LaTeX will use whatever is
        // appropriate (when there are several versions in different formats)
        string const filename = prepareFile(buf);
-       
        os << '{' << filename << '}' << after;
        os << '{' << filename << '}' << after;
-
        // Return how many newlines we issued.
        return newlines;
 }
        // Return how many newlines we issued.
        return newlines;
 }
@@ -849,3 +767,4 @@ Inset * InsetGraphics::clone(Buffer const &, bool same_id) const
 {
        return new InsetGraphics(*this, same_id);
 }
 {
        return new InsetGraphics(*this, same_id);
 }
+
index 6145bfe41ceda9de36f8b7dc02dc586a5389a31d..6e00518c45f82e3b2a2d8f72f91cfdbdd2141f3a 100644 (file)
@@ -7,6 +7,8 @@
  *           Copyright 1995 Matthias Ettrich
  *           Copyright 1995-2001 the LyX Team.
  *
  *           Copyright 1995 Matthias Ettrich
  *           Copyright 1995-2001 the LyX Team.
  *
+ * \author Baruch Even
+ * \author Herbert Voss <voss@lyx.org>
  * ====================================================== */
 
 #ifndef INSET_GRAPHICS_H
  * ====================================================== */
 
 #ifndef INSET_GRAPHICS_H
index b99b52e0701ff783e51aaa2994ac6b8f878d2b6b..5008d2ace3c55b268bece1b6ee2ec39ec5e394b3 100644 (file)
@@ -5,7 +5,9 @@
  *          Copyright 1995 Matthias Ettrich.
  *          Copyright 1995-2001 The LyX Team.
  *
  *          Copyright 1995 Matthias Ettrich.
  *          Copyright 1995-2001 The LyX Team.
  *
- *          This file Copyright 2000 Baruch Even
+ * \author Baruch Even
+ * \author Herbert Voss <voss@lyx.org>
+ *
  * ================================================= */
 
 #include <config.h> 
  * ================================================= */
 
 #include <config.h> 
@@ -29,63 +31,46 @@ namespace {
 /// translations.
 bool translatorsSet = false;
 
 /// translations.
 bool translatorsSet = false;
 
-/// This is the translator between the Resize enum and corresponding lyx
-/// file strings.
-Translator< InsetGraphicsParams::Resize, string >
-resizeTranslator(InsetGraphicsParams::DEFAULT_SIZE, "default");
-
-/// This is the translator between the Origin enum and corresponding lyx
-/// file strings.
-Translator< InsetGraphicsParams::Origin, string >
-originTranslator(InsetGraphicsParams::DEFAULT, "default");
-
 /// This is the translator between the Display enum and corresponding lyx
 /// file strings.
 Translator< InsetGraphicsParams::DisplayType, string >
 displayTranslator(InsetGraphicsParams::MONOCHROME, "monochrome");
 
 /// This is the translator between the Display enum and corresponding lyx
 /// file strings.
 Translator< InsetGraphicsParams::DisplayType, string >
 displayTranslator(InsetGraphicsParams::MONOCHROME, "monochrome");
 
+// this is only compatibility stuff for the first 1.2 version
+// it is obselete until 1.3
+LyXLength convertResizeValue(string const token, LyXLex & lex) {
+    lex.next();
+    string value = lex.getString();    // "width" or "height"  
+    lex.next();                                // anyway not interesting
+    value = lex.getString();
+    if (token == "default")
+       return (LyXLength(value+"pt"));
+    else if (token == "cm")
+       return (LyXLength(value+"cm"));
+    else if (token == "inch")
+       return (LyXLength(value+"in"));
+    else if (token == "percentOfColumn")
+       return (LyXLength(value+"c%"));
+    else if (token == "percentOfPage")
+       return (LyXLength(value+"p%"));
+    else return LyXLength("0pt");      // nothing with figinset
+}
+
 } // namespace anon
 
 
 InsetGraphicsParams::InsetGraphicsParams()
 {
        init();
 } // namespace anon
 
 
 InsetGraphicsParams::InsetGraphicsParams()
 {
        init();
-
        // Set translators
        if (! translatorsSet) {
                translatorsSet = true;
        // Set translators
        if (! translatorsSet) {
                translatorsSet = true;
-
-               // Fill the resize translator
-               resizeTranslator.addPair(DEFAULT_SIZE, "default");
-               resizeTranslator.addPair(CM, "cm");
-               resizeTranslator.addPair(INCH, "inch");
-               resizeTranslator.addPair(PERCENT_PAGE, "percentOfPage");
-               resizeTranslator.addPair(PERCENT_COLUMN, "percentOfColumn");
-               resizeTranslator.addPair(SCALE, "scale");
-
-               // Fill the origin translator
-               originTranslator.addPair(DEFAULT, "default");
-               originTranslator.addPair(LEFTTOP, "leftTop");
-               originTranslator.addPair(LEFTCENTER, "leftCenter");
-               originTranslator.addPair(LEFTBASELINE, "leftBaseLine");
-               originTranslator.addPair(LEFTBOTTOM, "leftBottom");
-               originTranslator.addPair(CENTERTOP, "centerTop");
-               originTranslator.addPair(CENTER, "center");
-               originTranslator.addPair(CENTERBASELINE, "centerBaseLine");
-               originTranslator.addPair(CENTERBOTTOM, "centerBottom");
-               originTranslator.addPair(RIGHTTOP, "rightTop");
-               originTranslator.addPair(RIGHTCENTER, "rightCenter");
-               originTranslator.addPair(RIGHTBASELINE, "rightBaseLine");
-               originTranslator.addPair(RIGHTBOTTOM, "rightBottom");
-               originTranslator.addPair(REFERENCE_POINT, "referencePoint");
-
                // Fill the display translator
                displayTranslator.addPair(MONOCHROME, "monochrome");
                displayTranslator.addPair(GRAYSCALE, "grayscale");
                displayTranslator.addPair(COLOR, "color");
                displayTranslator.addPair(NONE, "none");
        }
                // Fill the display translator
                displayTranslator.addPair(MONOCHROME, "monochrome");
                displayTranslator.addPair(GRAYSCALE, "grayscale");
                displayTranslator.addPair(COLOR, "color");
                displayTranslator.addPair(NONE, "none");
        }
-
 }
 
 
 }
 
 
@@ -103,7 +88,6 @@ InsetGraphicsParams::operator=(InsetGraphicsParams const & params)
        // Are we assigning the object into itself?
        if (this == &params)
                return * this;
        // Are we assigning the object into itself?
        if (this == &params)
                return * this;
-
        copy(params);
        return *this;
 }
        copy(params);
        return *this;
 }
@@ -111,15 +95,21 @@ InsetGraphicsParams::operator=(InsetGraphicsParams const & params)
 void InsetGraphicsParams::init()
 {
        subcaptionText = filename = string();
 void InsetGraphicsParams::init()
 {
        subcaptionText = filename = string();
-       display = MONOCHROME;
-       subcaption = false;
-       keepAspectRatio = true;
-       widthResize = DEFAULT_SIZE;
-       widthSize = 0.0;
-       heightResize = DEFAULT_SIZE;
-       heightSize = 0.0;
-       rotateOrigin = DEFAULT;
-       rotateAngle = 0.0;
+       bb = string();                  // bounding box
+       draft = false;                  // draft mode
+       clip = false;                   // clip image
+       display = MONOCHROME;           // LyX-View
+       subcaption = false;             // subfigure
+       width = LyXLength();            // set to 0pt
+       height = LyXLength();
+       lyxwidth = LyXLength();         // for the view in lyx
+       lyxheight = LyXLength();
+       scale = 0;
+       size_type = DEFAULT_SIZE;
+       keepAspectRatio = false;
+       rotateOrigin = string();        // 
+       rotateAngle = 0.0;              // in degrees
+       special = string();             // userdefined stuff
 
        testInvariant();
 }
 
        testInvariant();
 }
@@ -127,16 +117,22 @@ void InsetGraphicsParams::init()
 void InsetGraphicsParams::copy(InsetGraphicsParams const & igp)
 {
        filename = igp.filename;
 void InsetGraphicsParams::copy(InsetGraphicsParams const & igp)
 {
        filename = igp.filename;
+       bb = igp.bb;
+       draft = igp.draft;
+       clip = igp.clip;
        display = igp.display;
        subcaption = igp.subcaption;
        subcaptionText = igp.subcaptionText;
        keepAspectRatio = igp.keepAspectRatio;
        display = igp.display;
        subcaption = igp.subcaption;
        subcaptionText = igp.subcaptionText;
        keepAspectRatio = igp.keepAspectRatio;
-       widthResize = igp.widthResize;
-       widthSize = igp.widthSize;
-       heightResize = igp.heightResize;
-       heightSize = igp.heightSize;
+       width = igp.width;
+       height = igp.height;
+       scale = igp.scale;
+       size_type = igp.size_type;
+       lyxwidth = igp.lyxwidth;
+       lyxheight = igp.lyxheight;
        rotateOrigin = igp.rotateOrigin;
        rotateAngle = igp.rotateAngle;
        rotateOrigin = igp.rotateOrigin;
        rotateAngle = igp.rotateAngle;
+       special = igp.special;
 
        testInvariant();
 }
 
        testInvariant();
 }
@@ -145,32 +141,11 @@ void InsetGraphicsParams::testInvariant() const
 {
        // Filename might be empty (when the dialog is first created).
        // Assert(!filename.empty());
 {
        // Filename might be empty (when the dialog is first created).
        // Assert(!filename.empty());
-
        lyx::Assert(display == COLOR ||
               display == MONOCHROME ||
               display == GRAYSCALE ||
               display == NONE
              );
        lyx::Assert(display == COLOR ||
               display == MONOCHROME ||
               display == GRAYSCALE ||
               display == NONE
              );
-
-       lyx::Assert(widthResize == DEFAULT_SIZE ||
-              widthResize == CM ||
-              widthResize == INCH ||
-              widthResize == PERCENT_PAGE ||
-              widthResize == PERCENT_COLUMN ||
-                  widthResize == SCALE
-             );
-
-       lyx::Assert(heightResize == DEFAULT_SIZE ||
-              heightResize == CM ||
-              heightResize == INCH ||
-              heightResize == PERCENT_PAGE ||
-                  heightResize == SCALE
-             );
-
-       // For SCALE these can be negative.
-       //lyx::Assert(widthSize >= 0.0);
-       //lyx::Assert(heightSize >= 0.0);
-
        // Angle is in degrees and ranges -360 < angle < 360
        // The reason for this is that in latex there is a meaning for the
        // different angles and they are not necessarliy interchangeable,
        // Angle is in degrees and ranges -360 < angle < 360
        // The reason for this is that in latex there is a meaning for the
        // different angles and they are not necessarliy interchangeable,
@@ -184,16 +159,22 @@ bool operator==(InsetGraphicsParams const & left,
                 InsetGraphicsParams const & right)
 {
        if (left.filename == right.filename &&
                 InsetGraphicsParams const & right)
 {
        if (left.filename == right.filename &&
+               left.bb == right.bb &&
+               left.draft == right.draft &&
+               left.clip == right.clip &&
                left.display == right.display &&
                left.subcaption == right.subcaption &&
                left.subcaptionText == right.subcaptionText &&
                left.keepAspectRatio == right.keepAspectRatio &&
                left.display == right.display &&
                left.subcaption == right.subcaption &&
                left.subcaptionText == right.subcaptionText &&
                left.keepAspectRatio == right.keepAspectRatio &&
-               left.widthResize == right.widthResize &&
-               left.widthSize == right.widthSize &&
-               left.heightResize == right.heightResize &&
-               left.heightSize == right.heightSize &&
+               left.width == right.width &&
+               left.height == right.height &&
+               left.scale == right.scale &&
+               left.size_type == right.size_type &&
+               left.lyxwidth == right.lyxwidth &&
+               left.lyxheight == right.lyxheight &&
                left.rotateOrigin == right.rotateOrigin &&
                left.rotateOrigin == right.rotateOrigin &&
-               lyx::float_equal(left.rotateAngle, right.rotateAngle, 0.001)
+               lyx::float_equal(left.rotateAngle, right.rotateAngle, 0.001 &&
+               left.special == right.special) 
           )
                return true;
 
           )
                return true;
 
@@ -207,96 +188,75 @@ bool operator!=(InsetGraphicsParams const & left,
 }
 
 
 }
 
 
-namespace {
-
-void writeResize(ostream & os, string const & key,
-                        InsetGraphicsParams::Resize resize, double size)
-{
-       os << ' ' << key << "Resize ";
-
-       os << resizeTranslator.find(resize);
-       os << ' ' << key << ' ' << size << '\n';
-}
-
-void writeOrigin(ostream & os,
-                        InsetGraphicsParams::Origin origin)
-{
-       os << " rotateOrigin " << originTranslator.find(origin);
-       os << '\n';
-}
-
-} // namespace anon
-
-
 void InsetGraphicsParams::Write(Buffer const * buf, ostream & os) const
 {
        // If there is no filename, write nothing for it.
        if (! filename.empty()) {
 void InsetGraphicsParams::Write(Buffer const * buf, ostream & os) const
 {
        // If there is no filename, write nothing for it.
        if (! filename.empty()) {
-               os << "filename "
+               os << "\tfilename "
                << MakeRelPath(filename, buf->filePath())
                << '\n';
        }
                << MakeRelPath(filename, buf->filePath())
                << '\n';
        }
-
+       if (!bb.empty())                // bounding box
+               os << "\tBoundingBox " << bb << '\n';
+       if (clip)                       // clip image
+               os << "\tclip\n";
+       if (draft)                      // draft mode
+               os << "\tdraft\n";
        // Save the display type
        // Save the display type
-       os << " display " << displayTranslator.find(display) << '\n';
-
+       os << "\tdisplay " << displayTranslator.find(display) << '\n';
        // Save the subcaption status
        if (subcaption)
        // Save the subcaption status
        if (subcaption)
-               os << " subcaption";
-
-       if (! subcaptionText.empty())
-               os << " subcaptionText \"" << subcaptionText << '\"' << '\n';
-
-       writeResize(os, "width", widthResize, widthSize);
-       writeResize(os, "height", heightResize, heightSize);
-
-       writeOrigin(os, rotateOrigin);
-       if (!lyx::float_equal(rotateAngle, 0.0, 0.001)) {
-               os << " rotateAngle " << rotateAngle << '\n';
-       }
+           os << "\tsubcaption\n";
+       if (!subcaptionText.empty())
+           os << "\tsubcaptionText \"" << subcaptionText << '\"' << '\n';
+    // we always need the size type
+    // 0: no special
+    // 1: width/height combination
+    // 2: scale
+       os << "\tsize_type " <<  size_type << '\n';
+       if (!width.zero())
+           os << "\twidth " << width.asString() << '\n';
+       if (!height.zero())
+           os << "\theight " << height.asString() << '\n';
+       if (scale != 0)
+           os << "\tscale " << scale << '\n';
+       if (keepAspectRatio)
+               os << "\tkeepAspectRatio\n";
+       if (!lyx::float_equal(rotateAngle, 0.0, 0.001))
+               os << "\trotateAngle " << rotateAngle << '\n';
+       if (!rotateOrigin.empty())
+               os << "\trotateOrigin " << rotateOrigin << '\n';
+       if (!special.empty())
+               os << "\tspecial " << special << '\n';
+       if (!lyxwidth.zero())           // the lyx-viewsize
+           os << "\tlyxwidth " << lyxwidth.asString() << '\n';
+       if (!lyxheight.zero())
+           os << "\tlyxheight " << lyxheight.asString();
 }
 
 
 }
 
 
-namespace {
-
-void readResize(InsetGraphicsParams * igp, bool height,
-                       string const & token)
-{
-       InsetGraphicsParams::Resize resize = InsetGraphicsParams::DEFAULT_SIZE;
-
-       resize = resizeTranslator.find(token);
-
-       if (height)
-               igp->heightResize = resize;
-       else
-               igp->widthResize = resize;
-}
-
-
-void readOrigin(InsetGraphicsParams * igp, string const & token)
-{
-       // TODO: complete this function.
-       igp->rotateOrigin = originTranslator.find(token);
-}
-
-} // namespace anon
-
-
 bool InsetGraphicsParams::Read(Buffer const * buf, LyXLex & lex,
                                string const& token)
 {
        if (token == "filename") {
                lex.next();
                filename = lex.getString();
 bool InsetGraphicsParams::Read(Buffer const * buf, LyXLex & lex,
                                string const& token)
 {
        if (token == "filename") {
                lex.next();
                filename = lex.getString();
-
                if (!filename.empty()) {
                        // Make the filename with absolute directory.
                        filename = MakeAbsPath(filename, buf->filePath());
                }
                if (!filename.empty()) {
                        // Make the filename with absolute directory.
                        filename = MakeAbsPath(filename, buf->filePath());
                }
+       } else if (token == "BoundingBox") {
+               for (int i=0; i<4 ;i++) {
+                   lex.next();
+                   bb += (lex.getString()+" ");
+               }
+       } else if (token == "clip") {
+               clip = true;
+       } else if (token == "draft") {
+               draft = true;
        } else if (token == "display") {
                lex.next();
                string const type = lex.getString();
        } else if (token == "display") {
                lex.next();
                string const type = lex.getString();
-
                display = displayTranslator.find(type);
        } else if (token == "subcaption") {
                subcaption = true;
                display = displayTranslator.find(type);
        } else if (token == "subcaption") {
                subcaption = true;
@@ -304,33 +264,55 @@ bool InsetGraphicsParams::Read(Buffer const * buf, LyXLex & lex,
                lex.next();
                subcaptionText = lex.getString();
        } else if (token == "widthResize") {
                lex.next();
                subcaptionText = lex.getString();
        } else if (token == "widthResize") {
+               if (lex.next()) {
+                   string const token = lex.getString();
+                   if (token == "scale") {
+                       lex.next();
+                       scale = lex.getInteger();
+                       size_type = SCALE;
+                   }
+                   else {
+                       width = convertResizeValue(token, lex);
+                       size_type = WH;
+                   }
+               }
+       } else if (token == "size_type") {
                lex.next();
                lex.next();
-               string const token = lex.getString();
-
-               readResize(this, false, token);
+               switch (lex.getInteger()) {
+                   case 0 : size_type = DEFAULT_SIZE;
+                       break;
+                   case 1 : size_type = WH;
+                       break;
+                   case 2 : size_type = SCALE;
+               }
        } else if (token == "width") {
                lex.next();
        } else if (token == "width") {
                lex.next();
-               widthSize = lex.getFloat();
+               width = LyXLength(lex.getString());
+               size_type = WH;
        } else if (token == "heightResize") {
        } else if (token == "heightResize") {
-               lex.next();
-               string const token = lex.getString();
-
-               readResize(this, true, token);
+               if (lex.next())
+                       height = convertResizeValue(lex.getString(), lex);
        } else if (token == "height") {
                lex.next();
        } else if (token == "height") {
                lex.next();
-               heightSize = lex.getFloat();
-       } else if (token == "rotateOrigin") {
-               lex.next();
-               string const token = lex.getString();
-
-               readOrigin(this, token);
+               height = LyXLength(lex.getString());
+               size_type = WH;
+       } else if (token == "keepAspectRatio") {
+               keepAspectRatio = true;
        } else if (token == "rotateAngle") {
                lex.next();
                rotateAngle = lex.getFloat();
        } else if (token == "rotateAngle") {
                lex.next();
                rotateAngle = lex.getFloat();
+       } else if (token == "rotateOrigin") {
+               lex.next();
+               rotateOrigin=lex.getString();
+       } else if (token == "lyxwidth") {
+               lex.next();
+               lyxwidth = LyXLength(lex.getString());
+       } else if (token == "lyxheight") {
+               lex.next();
+               lyxheight = LyXLength(lex.getString());
        } else {
                // If it's none of the above, its not ours.
                return false;
        }
        } else {
                // If it's none of the above, its not ours.
                return false;
        }
-
        return true;
 }
        return true;
 }
index 601df89b0a740839133208d0701a4e5ace6725d0..719aa22019c0dc9e90637959bc189672de5fc870 100644 (file)
@@ -4,9 +4,10 @@
  * 
  *          LyX, The Document Processor
  *          Copyright 1995 Matthias Ettrich.
  * 
  *          LyX, The Document Processor
  *          Copyright 1995 Matthias Ettrich.
- *          Copyright 1995-2001 The LyX Team.
+ *          Copyright 1995-2002 The LyX Team.
  *
  *
- *          This file Copyright 2000 Baruch Even
+ * \author Baruch Even
+ * \author Herbert Voss <voss@lyx.org>
  * ================================================= */
 
 #ifndef INSETGRAPHICSPARAMS_H
  * ================================================= */
 
 #ifndef INSETGRAPHICSPARAMS_H
@@ -26,74 +27,50 @@ using std::ostream;
 /// This struct holds all the parameters needed by insetGraphics.
 struct InsetGraphicsParams
 {
 /// This struct holds all the parameters needed by insetGraphics.
 struct InsetGraphicsParams
 {
-       /// Image filename.
-       string filename;
-
        /// How do we display the image?
        enum DisplayType {
        /// How do we display the image?
        enum DisplayType {
-           /// In full color range (if it's not in color we show it as it is)
-           COLOR,
-           /// In Grayscale (256 shades of gray).
-           GRAYSCALE,
-           /// In black and white.
-           MONOCHROME,
-           /// Don't display it on screen, only keep a frame in place.
-           NONE
+           COLOR,              // full color range
+           GRAYSCALE,          // 256 shades of gray
+           MONOCHROME,         // In black and white.
+           NONE                // only keep a frame in place.
        };
        };
-
-       /// How to display the image
-       DisplayType display;
-
+       enum sizeType {
+           DEFAULT_SIZE,       // like none
+           WH,                 // width/height values
+           SCALE               // percentage value
+       };
+       /// Image filename.
+       string filename;
        /// Do we have a subcaption?
        bool subcaption;
        /// Do we have a subcaption?
        bool subcaption;
-
        /// The text of the subcaption.
        string subcaptionText;
        /// The text of the subcaption.
        string subcaptionText;
-
-       /// This is the different origins that the graphicx package support.
-       enum Origin {
-           DEFAULT,
-           LEFTTOP,
-           LEFTCENTER,
-           LEFTBASELINE,
-           LEFTBOTTOM,
-           CENTERTOP,
-           CENTER,
-           CENTERBASELINE,
-           CENTERBOTTOM,
-           RIGHTTOP,
-           RIGHTCENTER,
-           RIGHTBASELINE,
-           RIGHTBOTTOM,
-           REFERENCE_POINT = LEFTBASELINE
-       };
-
-       /** The resize of the image, is it the default size, in cm, inch or
-           percentage of the page/column width/height */
-       enum Resize {
-           DEFAULT_SIZE,
-           CM,
-           INCH,
-           PERCENT_PAGE,
-           PERCENT_COLUMN,
-               SCALE
-       };
-
-
+       /// The bounding box with "xLB yLB yRT yRT ", divided by a space!
+       string bb;
+       /// clip image 
+       bool clip;
+       /// draft mode
+       bool draft;
+       /// How to display the image
+       DisplayType display;
+       /// any userdefined special command
+       string special;
+       /// three possible values for rescaling
+       LyXLength width;
+       ///
+       LyXLength height;
+       ///
+       int scale;
+       /// Type of rescaling
+       sizeType size_type;
        /// Keep the ratio between height and width when resizing.
        bool keepAspectRatio;
        /// Keep the ratio between height and width when resizing.
        bool keepAspectRatio;
-
-       /// What width resize to do?
-       Resize widthResize;
-       /// Value of width resize
-       float widthSize;
-       /// What height resize to do?
-       Resize heightResize;
-       /// Value of height resize
-       float heightSize;
-
+       /// the size for the view inside lyx
+       LyXLength lyxwidth;
+       ///
+       LyXLength lyxheight;
        /// Origin point of rotation
        /// Origin point of rotation
-       Origin rotateOrigin;
+       string rotateOrigin;
        /// Rotation angle.
        float rotateAngle;
        ///
        /// Rotation angle.
        float rotateAngle;
        ///
@@ -102,20 +79,16 @@ struct InsetGraphicsParams
        InsetGraphicsParams(InsetGraphicsParams const &);
        ///
        InsetGraphicsParams & operator=(InsetGraphicsParams const &);
        InsetGraphicsParams(InsetGraphicsParams const &);
        ///
        InsetGraphicsParams & operator=(InsetGraphicsParams const &);
-
        /// Save the parameters in the LyX format stream.
        void Write(Buffer const * buf, ostream & os) const;
        /// Save the parameters in the LyX format stream.
        void Write(Buffer const * buf, ostream & os) const;
-
        /// If the token belongs to our parameters, read it.
        bool Read(Buffer const * buf, LyXLex & lex, string const & token);
        /// If the token belongs to our parameters, read it.
        bool Read(Buffer const * buf, LyXLex & lex, string const & token);
-
        /// Test the struct to make sure that all the options have legal values.
        void testInvariant() const;
 
 private:
        /// Initialize the object to a default status.
        void init();
        /// Test the struct to make sure that all the options have legal values.
        void testInvariant() const;
 
 private:
        /// Initialize the object to a default status.
        void init();
-
        /// Copy the other objects content to us, used in copy c-tor and assignment
        void copy(InsetGraphicsParams const & params);
 };
        /// Copy the other objects content to us, used in copy c-tor and assignment
        void copy(InsetGraphicsParams const & params);
 };