]> git.lyx.org Git - features.git/commitdiff
Some helper functions for the augmented dialogs.
authorAngus Leeming <leeming@lyx.org>
Thu, 4 Dec 2003 18:51:55 +0000 (18:51 +0000)
committerAngus Leeming <leeming@lyx.org>
Thu, 4 Dec 2003 18:51:55 +0000 (18:51 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8195 a592a061-630c-0410-9148-cb99ea01b6c8

src/frontends/controllers/ChangeLog
src/frontends/controllers/ControlExternal.C
src/frontends/controllers/ControlExternal.h

index 497deeb54ef394820fb826752134e04fd3a5139a..cb4b82c8b85faa560171f47f8d78a7cadee023cc 100644 (file)
@@ -1,3 +1,11 @@
+2003-12-04  Angus Leeming  <leeming@lyx.org>
+
+       * ControlExternal.[Ch] (bbChanged): new accessor functions to a
+       boolean flag.
+       (readBB): attempt to read the BoundingBox from the graphics file.
+       If that fails, try the Graphics Cache.
+       (all_origins, origin_gui_str): helpers for the frontends.
+       
 2003-12-01  Jürgen Spitzmüller  <j.spitzmueller@gmx.de>
 
        * ControlVSpace.C: enable the buttons for new insets.
index adb866aa5789e24ab2ab6e5ee269354f19d9a699..69007ce0915b8b7d39dd87a0596126e5d8634193 100644 (file)
 #include <config.h>
 
 #include "ControlExternal.h"
+
 #include "funcrequest.h"
 #include "gettext.h"
 #include "helper_funcs.h"
 #include "lyxrc.h"
 
+#include "graphics/GraphicsCache.h"
+#include "graphics/GraphicsCacheItem.h"
+#include "graphics/GraphicsImage.h"
+
 #include "insets/insetexternal.h"
 #include "insets/ExternalSupport.h"
 #include "insets/ExternalTemplate.h"
 
+#include "support/filetools.h"
+#include "support/tostr.h"
 
 namespace external = lyx::external;
 
+using lyx::support::MakeAbsPath;
+using lyx::support::readBB_from_PSFile;
+
 using std::vector;
 using std::string;
 
 
 ControlExternal::ControlExternal(Dialog & parent)
-       : Dialog::Controller(parent)
+       : Dialog::Controller(parent),
+         bb_changed_(false)
 {}
 
 
@@ -52,6 +63,7 @@ void ControlExternal::dispatchParams()
 {
        string const lfun = InsetExternalMailer::params2string(params(),
                                                               kernel().buffer());
+
        kernel().dispatch(FuncRequest(LFUN_INSET_APPLY, lfun));
 }
 
@@ -136,11 +148,87 @@ string const ControlExternal::Browse(string const & input) const
        if (et_ptr)
                pattern = et_ptr->fileRegExp;
 
-       // FIXME: a temporary hack until the FileDialog interface is updated
-       pattern += '|';
-
        std::pair<string, string> dir1(N_("Documents|#o#O"),
                                  string(lyxrc.document_path));
 
        return browseRelFile(input, bufpath, title, pattern, false, dir1);
 }
+
+
+string const ControlExternal::readBB(string const & file)
+{
+       string const abs_file =
+               MakeAbsPath(file, kernel().bufferFilepath());
+
+       // try to get it from the file, if possible. Zipped files are
+       // unzipped in the readBB_from_PSFile-Function
+       string const bb = readBB_from_PSFile(abs_file);
+       if (!bb.empty())
+               return bb;
+
+       // we don't, so ask the Graphics Cache if it has loaded the file
+       int width = 0;
+       int height = 0;
+
+       lyx::graphics::Cache & gc = lyx::graphics::Cache::get();
+       if (gc.inCache(abs_file)) {
+               lyx::graphics::Image const * image = gc.item(abs_file)->image();
+
+               if (image) {
+                       width  = image->getWidth();
+                       height = image->getHeight();
+               }
+       }
+
+       return ("0 0 " + tostr(width) + ' ' + tostr(height));
+}
+
+
+namespace {
+
+external::RotationDataType origins_array[] = {
+       external::RotationData::DEFAULT,
+       external::RotationData::TOPLEFT,
+       external::RotationData::BOTTOMLEFT,
+       external::RotationData::BASELINELEFT,
+       external::RotationData::CENTER,
+       external::RotationData::TOPCENTER,
+       external::RotationData::BOTTOMCENTER,
+       external::RotationData::BASELINECENTER,
+       external::RotationData::TOPRIGHT,
+       external::RotationData::BOTTOMRIGHT,
+       external::RotationData::BASELINERIGHT
+};
+
+lyx::size_type const origins_array_size =
+sizeof(origins_array) / sizeof(origins_array[0]);
+
+vector<external::RotationDataType> const
+origins(origins_array, origins_array + origins_array_size);
+
+// These are the strings, corresponding to the above, that the GUI should
+// use. Note that they can/should be translated.
+char const * const origin_gui_strs[] = {
+       N_("Default"),
+       N_("Top left"), N_("Bottom left"), N_("Baseline left"),
+       N_("Center"), N_("Top center"), N_("Bottom center"), N_("Baseline center"),
+       N_("Top right"), N_("Bottom right"), N_("Baseline right")
+};
+
+} // namespace anon
+
+namespace lyx {
+namespace external {
+
+vector<RotationDataType> const & all_origins()
+{
+       return origins;
+}
+
+string const origin_gui_str(size_type i)
+{
+       return origin_gui_strs[i];
+}
+
+} // namespace external
+} // namespace lyx
index 48c3386b22def2c5d654f34383801d39e43f2a23..f1db7bd9588a87c8f327fa9084d6c7eb8045bf87 100644 (file)
@@ -16,6 +16,8 @@
 
 #include "Dialog.h"
 
+#include "support/types.h"
+
 #include <boost/scoped_ptr.hpp>
 
 #include <string>
@@ -28,6 +30,7 @@ namespace lyx {
 namespace external {
 
 class Template;
+class RotationDataType;
 
 } // namespace external
 } // namespace lyx
@@ -61,9 +64,26 @@ public:
        lyx::external::Template getTemplate(int) const;
        ///
        std::string const Browse(std::string const &) const;
+
+       /// Read the Bounding Box from a eps or ps-file
+       std::string const readBB(std::string const & file);
+       ///
+       void bbChanged(bool val) { bb_changed_ = val; }
+       bool bbChanged() const { return bb_changed_; }
 private:
        ///
        boost::scoped_ptr<InsetExternalParams> params_;
+       bool bb_changed_;
 };
 
+
+namespace lyx {
+namespace external {
+
+std::vector<RotationDataType> const & all_origins();
+std::string const origin_gui_str(lyx::size_type i);
+
+} // namespace external
+} // namespace lyx
+
 #endif // CONTROLEXTERNAL_H