]> git.lyx.org Git - lyx.git/blobdiff - src/insets/insetgraphics.C
reformatting and remove using delc
[lyx.git] / src / insets / insetgraphics.C
index 4f89710b3ef60583db815dec28ba08367d4f9cf7..575b5e727b7ac6fbafca94193e86ec9b4b31060e 100644 (file)
@@ -14,19 +14,14 @@ How to use it for now:
 */
 
 /*
-Immediate tasks:
-       * Make the inline viewing work, there is a preliminary work going on,
-               need to finish it up.
-       * Support automatic image format conversion, create both a PNG and EPS output.
-
-       * Polishing tasks:
-               * Add messages in the empty rectangle (in the buffer view) to say how are 
-                 we doing.
-                       - Implemented, needs testing.
-               * Clean up GraphicsCacheItem(_pimpl)
-       * Pop up a dialog if the widget version is higher than what we accept.
-               * Prepare code to read FigInset insets to upgrade upwards
-               * Provide sed/awk/C code to downgrade from InsetGraphics to FigInset.
+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.
+       * Prepare code to read FigInset insets to upgrade upwards
+       * Provide sed/awk/C code to downgrade from InsetGraphics to FigInset(?)
         
 */
 
@@ -42,11 +37,17 @@ Known BUGS:
     * Bug in FileDlg class (src/filedlg.[hC]) when selecting a file and then
         pressing ok, it counts as if no real selection done. Apparently
         when choosing a file it doesn't update the select file input line.
+               
        * If we are trying to create a file in a read-only directory and there
                are graphics that need converting, the converting will fail because
                it is done in-place, into the same directory as the original image.
                This needs to be fixed in the src/converter.C file
+               [ This is presumed to be fixed, needs testing.]
+
+       * We do not dither or resize the image in a WYSIWYM way, we load it at
+               its original size and color, resizing is done in the final output,
+               but not in the LyX window.
+               
 TODO Before initial production release:
     * Replace insetfig everywhere
         * Read it's file format
@@ -55,12 +56,6 @@ TODO Before initial production release:
             // INSET_GRAPHICS: remove this when InsetFig is thrown.
           And act upon them.
  
-    * Finish the basic To-do list.
-    * Extract the general logic of the dialog in order to allow easier porting
-        to Gnome/KDE, and put the general logic in frontends and the inherited
-        platform dependent code in the appropriate dirs.
-               (Something of this kind is getting done by the GUII guys)
-   
 TODO Extended features:
  
     * Advanced Latex tab folder.
@@ -154,8 +149,6 @@ TODO Extended features:
 extern string system_tempdir;
 
 using std::ostream;
-using std::endl;
-using std::max;
 
 // This function is a utility function
 inline
@@ -181,7 +174,7 @@ InsetGraphics::statusMessage() const
 {
        char const * msg = 0;
 
-       if (cacheHandle) {
+       if (cacheHandle.get()) {
                switch (cacheHandle->getImageStatus()) {
                case GraphicsCacheItem::UnknownError:
                        msg = _("Unknown Error");
@@ -211,7 +204,7 @@ InsetGraphics::statusMessage() const
 int InsetGraphics::ascent(BufferView *, LyXFont const &) const
 {
        LyXImage * pixmap = 0;
-       if (cacheHandle && (pixmap = cacheHandle->getImage()))
+       if (cacheHandle.get() && (pixmap = cacheHandle->getImage()))
                return pixmap->getHeight();
        else
                return 50;
@@ -229,7 +222,7 @@ int InsetGraphics::width(BufferView *, LyXFont const & font) const
 {
        LyXImage * pixmap = 0;
        
-       if (cacheHandle && (pixmap = cacheHandle->getImage()))
+       if (cacheHandle.get() && (pixmap = cacheHandle->getImage()))
                return pixmap->getWidth();
        else {
                char const * msg = statusMessage();
@@ -238,7 +231,7 @@ int InsetGraphics::width(BufferView *, LyXFont const & font) const
                if (msg)
                        font_width = lyxfont::width(msg, font);
                
-               return max(50, font_width + 15);
+               return std::max(50, font_width + 15);
        }
 }
 
@@ -266,7 +259,7 @@ void InsetGraphics::draw(BufferView * bv, LyXFont const & font,
                
                // Get the image status, default to unknown error.
                GraphicsCacheItem::ImageStatus status = GraphicsCacheItem::UnknownError;
-               if (cacheHandle)
+               if (cacheHandle.get())
                        status = cacheHandle->getImageStatus();
                
                // Check if the image is now ready.
@@ -316,7 +309,7 @@ Inset::EDITABLE InsetGraphics::Editable() const
 
 void InsetGraphics::Write(Buffer const * buf, ostream & os) const
 {
-       os << "GRAPHICS FormatVersion 1" << endl;
+       os << "GRAPHICS FormatVersion 1\n";
 
        params.Write(buf, os);
 }
@@ -330,7 +323,7 @@ void InsetGraphics::Read(Buffer const * buf, LyXLex & lex)
                lex.next();
 
                string const token = lex.GetString();
-               lyxerr.debug() << "Token: '" << token << '\'' << endl;
+               lyxerr.debug() << "Token: '" << token << '\'' << std::endl;
 
                if (token.empty()) {
                        continue;
@@ -344,19 +337,22 @@ void InsetGraphics::Read(Buffer const * buf, LyXLex & lex)
                                << "This document was created with a newer Graphics widget"
                                ", You should use a newer version of LyX to read this"
                                " file."
-                               << endl;
+                               << std::endl;
                        // TODO: Possibly open up a dialog?
                }
                else {
                        if (! params.Read(buf, lex, token))
-                               lyxerr << "Unknown token, " << token << ", skipping." << endl;
+                               lyxerr << "Unknown token, " << token << ", skipping." 
+                                       << std::endl;
                }
        }
 
        updateInset();
 }
 
-static
+
+namespace {
+
 void formatResize(ostream & os, string const & key,
                  InsetGraphicsParams::Resize resizeType, double size)
 {
@@ -383,6 +379,9 @@ void formatResize(ostream & os, string const & key,
        }
 }
 
+} // namespace anon
+
+
 string const
 InsetGraphics::createLatexOptions() const
 {
@@ -575,17 +574,18 @@ void InsetGraphics::Validate(LaTeXFeatures & features) const
 // dialog.
 void InsetGraphics::updateInset() const
 {
-       GraphicsCache * gc = GraphicsCache::getInstance();
-       GraphicsCacheItem * temp = 0;
+       GraphicsCache & gc = GraphicsCache::getInstance();
+       boost::shared_ptr<GraphicsCacheItem> temp(0);
 
+       // We do it this way so that in the face of some error, we will still
+       // be in a valid state.
        if (!params.filename.empty()) {
-               temp = gc->addFile(params.filename);
+               temp = gc.addFile(params.filename);
        }
 
        // Mark the image as unloaded so that it gets updated.
        imageLoaded = false;
 
-       delete cacheHandle;
        cacheHandle = temp;
 }
 
@@ -614,10 +614,7 @@ Inset * InsetGraphics::Clone(Buffer const &) const
 {
        InsetGraphics * newInset = new InsetGraphics;
 
-       if (cacheHandle)
-               newInset->cacheHandle = cacheHandle->Clone();
-       else
-               newInset->cacheHandle = 0;
+       newInset->cacheHandle = cacheHandle;
        newInset->imageLoaded = imageLoaded;
 
        newInset->setParams(getParams());