- Main Page
- Namespaces
- Classes
- Files

# Document.h

Go to the documentation of this file.

    00001 /*
    00002  * Copyright 2000 Murray Cumming
    00003  *
    00004  * This library is free software; you can redistribute it and/or
    00005  * modify it under the terms of the GNU Library General Public
    00006  * License as published by the Free Software Foundation; either
    00007  * version 2 of the License, or (at your option) any later version.
    00008  *
    00009  * This library is distributed in the hope that it will be useful,
    00010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    00011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    00012  * Library General Public License for more details.
    00013  *
    00014  * You should have received a copy of the GNU Library General Public
    00015  * License along with this library; if not, write to the Free
    00016  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    00017  */
    00018
    00019 #ifndef BAKERY_DOCUMENT_H
    00020 #define BAKERY_DOCUMENT_H
    00021
    00022 #include "bakery/View/View.h"
    00023 #include <glibmm.h>
    00024
    00025 #include <iostream>
    00026
    00027 namespace Bakery
    00028 {
    00029
    00034 class Document
    00035 {
    00036 public:
    00037   Document();
    00038   virtual ~Document();
    00039
    00040   /* Saves the data to disk.
    00041    * Asks the View to update this document before saving to disk,
    00042    * but you should probably ensure that the document is updated more regularly than this,
    00043    * so that different parts of the GUI are synchronized.
    00044    * Only saves if the document has been modified.
    00045    * bool indicates success.
    00046    */
    00047   bool save();
    00048
    00049   /* Loads data from disk, using the URI (set with set_file_uri()) then asks the View to update itself.
    00050    * bool indicates success.
    00051    */
    00052   bool load();
    00053
    00054   //This can't be virtual because that would break ABI.
    00055   //Hopefully it doesn't need to be.
    00056   /* Loads data from disk, using the URI (set with set_file_uri()) then asks the View to update itself.
    00057    * bool indicates success.
    00058    */
    00059   bool load_from_data(const guchar* data, std::size_t length);
    00060
    00061
    00062   virtual bool get_modified() const;
    00063   virtual void set_modified(bool bVal = true);
    00064
    00066   virtual bool get_is_new() const;
    00068   void set_is_new(bool bVal);
    00069
    00070   virtual Glib::ustring get_contents() const;
    00071   virtual void set_contents(const Glib::ustring& strVal);
    00072
    00073   virtual Glib::ustring get_file_uri_with_extension(const Glib::ustring& uri);
    00074
    00075   virtual Glib::ustring get_file_uri() const;
    00076   virtual void set_file_uri(const Glib::ustring& file_uri, bool bEnforceFileExtension = false);
    00077
    00079   virtual Glib::ustring get_name() const;
    00080   static Glib::ustring util_file_uri_get_name(const Glib::ustring& file_uri, const Glib::ustring& file_extension);
    00081
    00082   virtual bool get_read_only() const;
    00083   virtual void set_read_only(bool bVal);
    00084
    00086   virtual void set_view(ViewBase* pView);
    00087   virtual ViewBase* get_view();
    00088
    00089   virtual void set_file_extension(const Glib::ustring& strVal);
    00090   virtual Glib::ustring get_file_extension() const;
    00091
    00092   //Signals
    00095   typedef sigc::signal<void, bool> type_signal_modified;
    00096
    00100   type_signal_modified& signal_modified();
    00101
    00102   typedef sigc::signal<void> type_signal_forget;
    00103
    00107   type_signal_forget& signal_forget();
    00108
    00110
    00111 protected:
    00115   virtual bool load_after();
    00116
    00120   virtual bool save_before();
    00121
    00122   virtual bool read_from_disk();
    00123   virtual bool write_to_disk();
    00124
    00125   Glib::ustring m_strContents;
    00126   Glib::ustring m_file_uri;
    00127   Glib::ustring m_file_extension;
    00128
    00129   ViewBase* m_pView;
    00130
    00131   type_signal_modified signal_modified_;
    00132   type_signal_forget signal_forget_;
    00133
    00134   bool m_bModified;
    00135   bool m_bIsNew; //see get_is_new().
    00136   bool m_bReadOnly;
    00137 };
    00138
    00139 } //namespace
    00140
    00141 #endif //GNOME_APPWITHDOCS_DOCUMENT_H