• Skip to content
  • Skip to link menu
KDE 3.5 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

kviewshell

DjVuFile.h

Go to the documentation of this file.
00001 //C-  -*- C++ -*-
00002 //C- -------------------------------------------------------------------
00003 //C- DjVuLibre-3.5
00004 //C- Copyright (c) 2002  Leon Bottou and Yann Le Cun.
00005 //C- Copyright (c) 2001  AT&T
00006 //C-
00007 //C- This software is subject to, and may be distributed under, the
00008 //C- GNU General Public License, Version 2. The license should have
00009 //C- accompanied the software or you may obtain a copy of the license
00010 //C- from the Free Software Foundation at http://www.fsf.org .
00011 //C-
00012 //C- This program is distributed in the hope that it will be useful,
00013 //C- but WITHOUT ANY WARRANTY; without even the implied warranty of
00014 //C- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015 //C- GNU General Public License for more details.
00016 //C- 
00017 //C- DjVuLibre-3.5 is derived from the DjVu(r) Reference Library
00018 //C- distributed by Lizardtech Software.  On July 19th 2002, Lizardtech 
00019 //C- Software authorized us to replace the original DjVu(r) Reference 
00020 //C- Library notice by the following text (see doc/lizard2002.djvu):
00021 //C-
00022 //C-  ------------------------------------------------------------------
00023 //C- | DjVu (r) Reference Library (v. 3.5)
00024 //C- | Copyright (c) 1999-2001 LizardTech, Inc. All Rights Reserved.
00025 //C- | The DjVu Reference Library is protected by U.S. Pat. No.
00026 //C- | 6,058,214 and patents pending.
00027 //C- |
00028 //C- | This software is subject to, and may be distributed under, the
00029 //C- | GNU General Public License, Version 2. The license should have
00030 //C- | accompanied the software or you may obtain a copy of the license
00031 //C- | from the Free Software Foundation at http://www.fsf.org .
00032 //C- |
00033 //C- | The computer code originally released by LizardTech under this
00034 //C- | license and unmodified by other parties is deemed "the LIZARDTECH
00035 //C- | ORIGINAL CODE."  Subject to any third party intellectual property
00036 //C- | claims, LizardTech grants recipient a worldwide, royalty-free, 
00037 //C- | non-exclusive license to make, use, sell, or otherwise dispose of 
00038 //C- | the LIZARDTECH ORIGINAL CODE or of programs derived from the 
00039 //C- | LIZARDTECH ORIGINAL CODE in compliance with the terms of the GNU 
00040 //C- | General Public License.   This grant only confers the right to 
00041 //C- | infringe patent claims underlying the LIZARDTECH ORIGINAL CODE to 
00042 //C- | the extent such infringement is reasonably necessary to enable 
00043 //C- | recipient to make, have made, practice, sell, or otherwise dispose 
00044 //C- | of the LIZARDTECH ORIGINAL CODE (or portions thereof) and not to 
00045 //C- | any greater extent that may be necessary to utilize further 
00046 //C- | modifications or combinations.
00047 //C- |
00048 //C- | The LIZARDTECH ORIGINAL CODE is provided "AS IS" WITHOUT WARRANTY
00049 //C- | OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
00050 //C- | TO ANY WARRANTY OF NON-INFRINGEMENT, OR ANY IMPLIED WARRANTY OF
00051 //C- | MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
00052 //C- +------------------------------------------------------------------
00053 // 
00054 // $Id: DjVuFile.h,v 1.9 2003/11/07 22:08:20 leonb Exp $
00055 // $Name: release_3_5_15 $
00056 
00057 #ifndef _DJVUFILE_H
00058 #define _DJVUFILE_H
00059 #ifdef HAVE_CONFIG_H
00060 #include "config.h"
00061 #endif
00062 #if NEED_GNUG_PRAGMAS
00063 # pragma interface
00064 #endif
00065 
00066 
00067 #include "DjVuInfo.h"
00068 #include "DjVuPalette.h"
00069 #include "DjVuPort.h"
00070 
00071 #ifdef HAVE_NAMESPACES
00072 namespace DJVU {
00073 # ifdef NOT_DEFINED // Just to fool emacs c++ mode
00074 }
00075 #endif
00076 #endif
00077 
00078 class DjVuTXT;
00079 class ByteStream;
00080 class DataPool;
00081 class JB2Image;
00082 class JB2Dict;
00083 class IW44Image;
00084 class IFFByteStream;
00085 class GPixmap;
00086 class DjVuNavDir;
00087 
00088 
00109 
00201 class DjVuFile : public DjVuPort
00202 {
00203 public:
00204    enum { DECODING=1, DECODE_OK=2, DECODE_FAILED=4, DECODE_STOPPED=8,
00205       DATA_PRESENT=16, ALL_DATA_PRESENT=32, INCL_FILES_CREATED=64,
00206           MODIFIED=128, DONT_START_DECODE=256, STOPPED=512,
00207       BLOCKED_STOPPED=1024, CAN_COMPRESS=2048, NEEDS_COMPRESSION=4096 };
00208    enum { STARTED=1, FINISHED=2 };
00209 
00212 
00213    GP<DjVuInfo>     info;
00215    GP<IW44Image>    bg44;
00217    GP<GPixmap>      bgpm;
00219    GP<JB2Image>     fgjb;
00221    GP<JB2Dict>      fgjd;
00223    GP<GPixmap>      fgpm;
00225    GP<DjVuPalette>  fgbc;
00227    GP<ByteStream>   anno;
00229    GP<ByteStream>   text;
00231    GP<ByteStream>   meta;
00233    GP<DjVuNavDir>   dir;
00235    GUTF8String      description;
00237    GUTF8String      mimetype;
00239    int          file_size;
00241 
00242 protected:
00244    DjVuFile(void);
00245 public:
00246    virtual ~DjVuFile(void);
00247 
00261    void init(const GP<ByteStream> & str);
00262 
00264    static GP<DjVuFile> create( const GP<ByteStream> & str,
00265      const ErrorRecoveryAction recover_action=ABORT,
00266      const bool verbose_eof=true);
00267    
00297    void init(const GURL & url, GP<DjVuPort> port=0);
00298 
00300    static GP<DjVuFile> create(
00301      const GURL & url, GP<DjVuPort> port=0,
00302      const ErrorRecoveryAction recover_action=ABORT,
00303      const bool verbose_eof=true);
00304 
00308    void     disable_standard_port(void);
00309 
00319    GP<DjVuNavDir>   find_ndir(void);
00320 
00342    long     get_flags(void) const;
00344    bool     is_decoding(void) const;
00346    bool     is_decode_ok(void) const;
00348    bool     is_decode_failed(void) const;
00351    bool     is_decode_stopped(void) const;
00353    bool     is_data_present(void) const;
00356    bool     is_all_data_present(void) const;
00360    bool     are_incl_files_created(void) const;
00361    bool     is_modified(void) const;
00362    bool     needs_compression(void) const;
00363    bool     can_compress(void) const;
00364    void     set_modified(bool m);
00365    void     set_needs_compression(bool m);
00366    void     set_can_compress(bool m);
00368 
00370    GURL     get_url(void) const;
00371 
00378    void     start_decode(void);
00382    bool   resume_decode(const bool sync=false);
00387    void     stop_decode(bool sync);
00407    void     stop(bool only_blocked);
00410    void     wait_for_finish(void);
00422    GP<DjVuNavDir>   decode_ndir(void);
00424    void     reset(void);
00434    void     process_incl_chunks(void);
00436    
00437       // Function needed by the cache
00438    unsigned int get_memory_usage(void) const;
00439 
00452    GPList<DjVuFile> get_included_files(bool only_created=true);
00453 
00458    void     insert_file(const GUTF8String &id, int chunk_num=1);
00460    void     unlink_file(const GUTF8String &id);
00463    static GP<DataPool>  unlink_file(const GP<DataPool> & data, const GUTF8String &name);
00464 
00466    int      get_chunks_number(void);
00468    GUTF8String  get_chunk_name(int chunk_num);
00470    bool     contains_chunk(const GUTF8String &chunk_name);
00471 
00490    GP<ByteStream>   get_merged_anno(int * max_level_ptr=0);
00491 
00500    GP<ByteStream>   get_anno(void);
00501 
00510    GP<ByteStream>   get_text(void);
00511 
00520    GP<ByteStream>   get_meta(void);
00521 
00529    GP<ByteStream>   get_merged_anno(const GList<GURL> & ignore_list,
00530                     int * max_level_ptr);
00531 
00533    void remove_anno(void);
00534 
00536    void remove_text(void);
00537 
00539    void remove_meta(void);
00540 
00544    bool     contains_anno(void);
00545 
00549    bool     contains_text(void);
00550 
00554    bool     contains_meta(void);
00555 
00557    void change_info(GP<DjVuInfo> info, const bool do_reset=false);
00558    
00560    void change_text(GP<DjVuTXT> txt, const bool do_reset=false);
00561    
00563    void change_meta(const GUTF8String &meta, const bool do_reset=false);
00564    
00577    GP<ByteStream>   get_djvu_bytestream(const bool included_too, const bool no_ndir=true);
00578 
00581    GP<DataPool>     get_djvu_data(const bool included_too, const bool no_ndir=true );
00583 
00584       // Internal. Used by DjVuDocument
00585    GP<DataPool>     get_init_data_pool(void) const { return data_pool; };
00586 
00587       // Internal. Used by DjVuDocument. May block for data.
00588    void         move(const GURL & dir_url);
00589 
00592    void         set_name(const GUTF8String &name);
00593 
00594       // Internal. Used by DjVuDocument
00595    GSafeFlags &     get_safe_flags(void);
00596 
00597       // Internal. Used by DjVuImage
00598    void                 merge_anno(ByteStream &out);
00599 
00600       // Internal. Used by DjVuImage
00601    void                 get_text(ByteStream &out);
00602 
00603       // Internal. Used by DjVuImage
00604    void                 get_meta(ByteStream &out);
00605 
00606       // Internal. Used by DjVuDocEditor
00607    void         rebuild_data_pool(void);
00608 
00609       // Functions inherited from DjVuPort
00610    virtual bool     inherits(const GUTF8String &class_name) const;
00611    virtual void     notify_chunk_done(const DjVuPort * source, const GUTF8String &name);
00612    virtual void     notify_file_flags_changed(const DjVuFile * source,
00613                           long set_mask, long clr_mask);
00614    virtual void     set_recover_errors(const ErrorRecoveryAction=ABORT);
00615    virtual void     set_verbose_eof(const bool verbose_eof=true);
00616    virtual void     report_error(const GException &ex,const bool=true);
00617    static void set_decode_codec(GP<GPixmap> (*codec)(ByteStream &bs));
00618 
00619 protected:
00620    GURL         url;
00621    GP<DataPool>     data_pool;
00622 
00623    GPList<DjVuFile> inc_files_list;
00624    GCriticalSection inc_files_lock;
00625    GCriticalSection anno_lock;
00626    GCriticalSection text_lock;
00627    GCriticalSection meta_lock;
00628    ErrorRecoveryAction  recover_errors;
00629    bool         verbose_eof;
00630    int          chunks_number;
00631 private:
00632    bool                 initialized;
00633    GSafeFlags       flags;
00634 
00635    GThread      * decode_thread;
00636    GP<DataPool>     decode_data_pool;
00637    GP<DjVuFile>     decode_life_saver;
00638 
00639    GP<DjVuPort>     simple_port;
00640 
00641    GMonitor     chunk_mon, finish_mon;
00642 
00643       // Functions called when the decoding thread starts
00644    static void  static_decode_func(void *);
00645    void decode_func(void);
00646    void decode(const GP<ByteStream> &str);
00647    GUTF8String decode_chunk(const GUTF8String &chkid,
00648      const GP<ByteStream> &str, bool djvi, bool djvu, bool iw44);
00649    int      get_dpi(int w, int h);
00650 
00651       // Functions dealing with the shape directory (fgjd)
00652    static GP<JB2Dict> static_get_fgjd(void *);
00653    GP<JB2Dict> get_fgjd(int block=0);
00654 
00655       // Functions used to wait for smth
00656    void     wait_for_chunk(void);
00657    bool     wait_for_finish(bool self);
00658 
00659       // INCL chunk processor
00660    GP<DjVuFile> process_incl_chunk(ByteStream & str, int file_num=-1);
00661 
00662       // Trigger: called when DataPool has all data
00663    static void  static_trigger_cb(void *);
00664    void     trigger_cb(void);
00665    
00666       // Progress callback: called from time to time
00667    static void  progress_cb(int pos, void *);
00668    static void  get_merged_anno(const GP<DjVuFile> & file,
00669      const GP<ByteStream> &str_out, const GList<GURL> & ignore_list,
00670      int level, int & max_level, GMap<GURL, void *> & map);
00671    static void  get_anno(const GP<DjVuFile> & file,
00672      const GP<ByteStream> &str_out);
00673    static void  get_text(const GP<DjVuFile> & file,
00674      const GP<ByteStream> &str_out);
00675    static void  get_meta(const GP<DjVuFile> & file,
00676      const GP<ByteStream> &str_out);
00677 
00678    void          check() const;
00679    GP<DjVuNavDir>find_ndir(GMap<GURL, void *> & map);
00680    GP<DjVuNavDir>decode_ndir(GMap<GURL, void *> & map);
00681    void     add_djvu_data(IFFByteStream & str,
00682                   GMap<GURL, void *> & map,
00683                   const bool included_too, const bool no_ndir=true);
00684    void     move(GMap<GURL, void *> & map, const GURL & dir_url);
00685 private: // dummy stuff
00686    static void decode(ByteStream *);
00687    static GUTF8String decode_chunk(const GUTF8String &, ByteStream *,bool,bool,bool);
00688    static void  get_merged_anno(const GP<DjVuFile> &,ByteStream *,
00689      const GList<GURL> &, int, int &, GMap<GURL, void *> &);
00690    static void  get_text(const GP<DjVuFile> &,ByteStream *);
00691    static void  get_meta(const GP<DjVuFile> &,ByteStream *);
00692 
00693 };
00694 
00695 inline long
00696 DjVuFile::get_flags(void) const
00697 {
00698    return flags;
00699 }
00700 
00701 inline GSafeFlags &
00702 DjVuFile::get_safe_flags(void)
00703 {
00704    return flags;
00705 }
00706 
00707 inline bool
00708 DjVuFile::is_decoding(void) const
00709 {
00710    return (flags & DECODING)!=0;
00711 }
00712 
00713 inline bool
00714 DjVuFile::is_decode_ok(void) const
00715 {
00716    return (flags & DECODE_OK)!=0;
00717 }
00718 
00719 inline bool
00720 DjVuFile::is_decode_failed(void) const
00721 {
00722    return (flags & DECODE_FAILED)!=0;
00723 }
00724 
00725 inline bool
00726 DjVuFile::is_decode_stopped(void) const
00727 {
00728    return (flags & DECODE_STOPPED)!=0;
00729 }
00730 
00731 inline bool
00732 DjVuFile::is_data_present(void) const
00733 {
00734    return (flags & DATA_PRESENT)!=0;
00735 }
00736 
00737 inline bool
00738 DjVuFile::is_all_data_present(void) const
00739 {
00740    return (flags & ALL_DATA_PRESENT)!=0;
00741 }
00742 
00743 inline bool
00744 DjVuFile::are_incl_files_created(void) const
00745 {
00746    return (flags & INCL_FILES_CREATED)!=0;
00747 }
00748 
00749 inline bool
00750 DjVuFile::is_modified(void) const
00751 {
00752    return (flags & MODIFIED)!=0;
00753 }
00754 
00755 inline void
00756 DjVuFile::set_modified(bool m)
00757 {
00758   flags=m ? (flags | MODIFIED) : (flags & ~MODIFIED);
00759 }
00760 
00761 inline bool
00762 DjVuFile::needs_compression(void) const
00763 {
00764    return (flags & NEEDS_COMPRESSION)!=0;
00765 }
00766 
00767 inline void
00768 DjVuFile::set_needs_compression(bool m)
00769 {
00770    if (m) flags=flags | NEEDS_COMPRESSION;
00771    else flags=flags & ~NEEDS_COMPRESSION;
00772 }
00773 
00774 inline bool
00775 DjVuFile::can_compress(void) const
00776 {
00777    return (flags & CAN_COMPRESS)!=0;
00778 }
00779 
00780 inline void
00781 DjVuFile::set_can_compress(bool m)
00782 {
00783    if(info)
00784    {
00785      info->compressable=m;
00786    }
00787    if (m)
00788    {
00789      flags=flags | CAN_COMPRESS;
00790    } else
00791    {
00792      flags=flags & ~CAN_COMPRESS;
00793    }
00794 }
00795 
00796 inline void
00797 DjVuFile::disable_standard_port(void)
00798 {
00799    simple_port=0;
00800 }
00801 
00802 inline bool
00803 DjVuFile::inherits(const GUTF8String &class_name) const
00804 {
00805    return
00806       (GUTF8String("DjVuFile") == class_name) ||
00807       DjVuPort::inherits(class_name);
00808 //      !strcmp("DjVuFile", class_name) ||
00809 //      DjVuPort::inherits(class_name);
00810 }
00811 
00812 inline void
00813 DjVuFile::wait_for_finish(void)
00814 {
00815    while(wait_for_finish(1))
00816      EMPTY_LOOP;
00817 }
00818 
00819 inline GURL
00820 DjVuFile::get_url(void) const
00821 {
00822    return url;
00823 }
00824 
00825 inline void
00826 DjVuFile::set_verbose_eof
00827 (const bool verbose)
00828 {
00829   verbose_eof=verbose;
00830 }
00831 
00832 inline void
00833 DjVuFile::set_recover_errors
00834 (const ErrorRecoveryAction action)
00835 {
00836   recover_errors=action;
00837 }
00838 
00840 
00841 
00842 #ifdef HAVE_NAMESPACES
00843 }
00844 # ifndef NOT_USING_DJVU_NAMESPACE
00845 using namespace DJVU;
00846 # endif
00847 #endif
00848 #endif

kviewshell

Skip menu "kviewshell"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members

API Reference

Skip menu "API Reference"
  • kviewshell
Generated for API Reference by doxygen 1.5.9
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal