home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / programming / dreamscape / source / Dreamscape / Headers / utils / h / document < prev    next >
Encoding:
Text File  |  1996-09-20  |  3.7 KB  |  145 lines

  1.  
  2. // utils.h.document
  3.  
  4. // Dreamscape - C++ class library for RISC OS
  5. // Copyright (c) 1996 Mark Seaborn <mseaborn@argonet.co.uk>
  6. //
  7. // This library is free software; you can redistribute it and/or
  8. // modify it under the terms of the GNU Library General Public
  9. // License as published by the Free Software Foundation; either
  10. // version 2 of the License, or (at your option) any later version.
  11. // See the Dreamscape documentation for more information.
  12.  
  13. #ifndef dreamscape_document_H
  14. #define dreamscape_document_H
  15.  
  16. #include "window.h"
  17. #include "quality.h"
  18.  
  19. class DocumentCoordSystem;
  20. typedef float DocUnit;
  21. typedef Coords<DocUnit, DocumentCoordSystem> DocCoords;
  22. typedef BBox<DocUnit, DocumentCoordSystem> DocBBox;
  23. typedef TransformMatrix<DocUnit, float, DocumentCoordSystem> DocTransform;
  24.  
  25. class DocumentRedrawable {
  26. public:
  27.   class RedrawInfo {
  28.   public:
  29.     RedrawInfo(): scale(1) {}
  30.  
  31.     DocBBox clip;
  32.     ScrCoords origin;
  33.     float scale;
  34.     Quality quality;
  35.   };
  36.   virtual void redraw(const RedrawInfo &info) const = 0;
  37. };
  38.  
  39. class DocumentInfo {
  40. public:
  41.   DocumentInfo(): modified_changed(0), no_views_changed(0),
  42.     filename_changed(0), extent_changed(0), modified(0),
  43.     number_of_views(0) {}
  44.  
  45.   unsigned modified_changed: 1;
  46.   unsigned no_views_changed: 1;
  47.   unsigned filename_changed: 1;
  48.   unsigned extent_changed: 1;
  49.  
  50.   unsigned modified: 1;
  51.   int number_of_views;
  52.   String filename;
  53.   DocBBox extent;
  54. };
  55.  
  56. class Document {
  57.   friend View;
  58.   List<View *> views;
  59.   List<const DocumentRedrawable *> redrawers;
  60.   unsigned modified: 1;
  61.   String filename;
  62.   DocBBox extent;
  63.  
  64.   void update_info(const DocumentInfo &info) const;
  65.  
  66. public:
  67.   Document();
  68.   virtual ~Document();
  69.  
  70.   void add_redrawer(const DocumentRedrawable *redrawer);
  71.   void remove_redrawer(const DocumentRedrawable *redrawer);
  72.   void update_area(const DocBBox &area);
  73.   void update_area(const DocBBox &area, const DocumentRedrawable *redrawer);
  74.   void move_area(const DocBBox &area, const DocCoords &bottomleft);
  75.  
  76.   DocumentInfo get_info() const;
  77.  
  78.   int get_number_of_views() const { return views.size(); }
  79.  
  80.   void set_modified(bool modified);
  81.   bool get_modified() const { return modified; }
  82.  
  83.   void set_filename(const char *filename);
  84.   String get_filename() const { return filename; }
  85.  
  86.   void set_extent(const DocBBox &extent);
  87.   void get_extent(DocBBox &extentn) const { extentn = extent; }
  88.   DocBBox get_extent() const { return extent; }
  89. };
  90.  
  91. class ViewInfo {
  92. public:
  93.   ViewInfo(): scale_changed(0), quality_changed(0), scale(1) {}
  94.  
  95.   unsigned scale_changed: 1;
  96.   unsigned quality_changed: 1;
  97.  
  98.   float scale;
  99.   Quality quality;
  100. };
  101.  
  102. class View: public WindowRedrawable {
  103.   friend Document;
  104.   Document *_document;
  105.   Window *_window;
  106.   float _scale;
  107.   Quality _quality;
  108.  
  109.   class QuickRedrawer: public WindowRedrawable {
  110.     const DocumentRedrawable *redrawer;
  111.     const View *view;
  112.   public:
  113.     QuickRedrawer(const DocumentRedrawable *r): redrawer(r) {}
  114.     void redraw(const RedrawInfo &info) const;
  115.     friend Document;
  116.   };
  117.   friend QuickRedrawer;
  118.  
  119. public:
  120.   View(Document *document, BaseWindow *window);
  121.   virtual ~View();
  122.  
  123.   void redraw(const RedrawInfo &info) const;
  124.  
  125.   Document *document() const { return _document; }
  126.   BaseWindow *window() const { return _window; }
  127.   virtual void document_info_changed(const DocumentInfo &info);
  128.   virtual void view_info_changed(const ViewInfo &info);
  129.  
  130.   ViewInfo get_info() const;
  131.  
  132.   virtual void set_scale(float scale);
  133.   float get_scale() const { return _scale; }
  134.  
  135.   virtual void set_quality(Quality quality);
  136.   Quality get_quality() const { return _quality; }
  137.  
  138.   DocCoords win_to_doc(const WinCoords &pos) const;
  139.   WinCoords doc_to_win(const DocCoords &pos) const;
  140.   DocBBox win_to_doc(const WinBBox &bbox) const;
  141.   WinBBox doc_to_win(const DocBBox &bbox) const;
  142. };
  143.  
  144. #endif
  145.