Code

Merged in Native File Dialogs for Windows Branch
[inkscape.git] / src / ui / dialog / filedialog.h
index 2f0bdfb8c8a4dae20cd142cd16112d981ad06bff..a3d5c0ea9133a59f45017878abd459373d7b3fdc 100644 (file)
@@ -8,6 +8,7 @@
  *   Bob Jamison <rwjj@earthlink.net>
  *   Inkscape Guys
  *
+ * Copyright (C) 2006 Johan Engelen <johan@shouraizou.nl>
  * Copyright (C) 2004-2006, Inkscape Authors
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
 
 #include <glibmm.h>
 #include <vector>
+#include <set>
+#include <gtkmm.h>
 
-
-
-class Inkscape::Extension::Extension;
-
+namespace Inkscape {
+namespace Extension {
+class Extension;
+class Output;
+}
+}
 
 namespace Inkscape
 {
@@ -28,7 +33,6 @@ namespace UI
 namespace Dialog
 {
 
-
 /**
  * Used for setting filters and options, and
  * reading them back from user selections.
@@ -47,12 +51,17 @@ typedef enum {
     SVG_NAMESPACE_WITH_EXTENSIONS
     } FileDialogSelectionType;
 
+
 /**
- * Architecture-specific data
+ * Return true if the string ends with the given suffix
  */
-typedef struct FileOpenNativeData_def FileOpenNativeData;
-
+bool hasSuffix(const Glib::ustring &str, const Glib::ustring &ext);
 
+/**
+ * Return true if the image is loadable by Gdk, else false
+ */
+bool isValidImageFile(const Glib::ustring &fileName);    
+    
 /**
  * This class provides an implementation-independent API for
  * file "Open" dialogs.  Using a standard interface obviates the need
@@ -78,9 +87,10 @@ public:
      * @param fileTypes one of FileDialogTypes
      * @param title the title of the dialog
      */
-    static FileOpenDialog *create(const Glib::ustring &path,
+    static FileOpenDialog *create(Gtk::Window& parentWindow, 
+                                  const Glib::ustring &path,
                                   FileDialogType fileTypes,
-                                  const Glib::ustring &title);
+                                  const char *title);
 
 
     /**
@@ -93,7 +103,7 @@ public:
      * Show an OpenFile file selector.
      * @return the selected path if user selected one, else NULL
      */
-    virtual bool show() =0;
+    virtual bool show() = 0;
 
     /**
      * Return the 'key' (filetype) of the selection, if any
@@ -102,10 +112,18 @@ public:
      */
     virtual Inkscape::Extension::Extension * getSelectionType() = 0;
 
-    virtual Glib::ustring getFilename () =0;
-
-    virtual std::vector<Glib::ustring> getFilenames () = 0;
+    Glib::ustring getFilename();
 
+    virtual std::vector<Glib::ustring> getFilenames() = 0;
+    
+    virtual Glib::ustring getCurrentDirectory() = 0;
+    
+protected:
+    /**
+     * Filename that was given
+     */
+    Glib::ustring myFilename;
+    
 }; //FileOpenDialog
 
 
@@ -138,9 +156,10 @@ public:
      * @param title the title of the dialog
      * @param key a list of file types from which the user can select
      */
-    static FileSaveDialog *create(const Glib::ustring &path,
+    static FileSaveDialog *create(Gtk::Window& parentWindow, 
+                                  const Glib::ustring &path,
                                   FileDialogType fileTypes,
-                                  const Glib::ustring &title,
+                                  const char *title,
                                   const Glib::ustring &default_key);
 
 
@@ -164,8 +183,29 @@ public:
      */
     virtual Inkscape::Extension::Extension * getSelectionType() = 0;
 
-    virtual Glib::ustring getFilename () =0;
+    virtual void setSelectionType( Inkscape::Extension::Extension * key ) = 0;
 
+    /**
+     * Get the file name chosen by the user.   Valid after an [OK]
+     */
+    Glib::ustring getFilename ();
+    
+    virtual Glib::ustring getCurrentDirectory() = 0;
+
+protected:
+
+    /**
+     * Filename that was given
+     */
+    Glib::ustring myFilename;
+    
+    /**
+     * List of known file extensions.
+     */
+    std::set<Glib::ustring> knownExtensions;
+    
+
+    void appendExtension(Glib::ustring& path, Inkscape::Extension::Output* outputExtension);
 
 }; //FileSaveDialog
 
@@ -181,6 +221,14 @@ class FileExportDialog
 {
 public:
 
+    typedef enum
+        {
+        SCOPE_DOCUMENT,
+        SCOPE_PAGE,
+        SCOPE_SELECTION,
+        SCOPE_CUSTOM
+        } ScopeType;
+
     /**
      * Constructor.  Do not call directly .   Use the factory.
      * @param path the directory where to start searching
@@ -198,9 +246,10 @@ public:
      * @param title the title of the dialog
      * @param key a list of file types from which the user can select
      */
-    static FileExportDialog *create(const Glib::ustring &path,
+    static FileExportDialog *create(Gtk::Window& parentWindow, 
+                                    const Glib::ustring &path,
                                     FileDialogType fileTypes,
-                                    const Glib::ustring &title,
+                                    const char *title,
                                     const Glib::ustring &default_key);
 
 
@@ -224,10 +273,80 @@ public:
      */
     virtual Inkscape::Extension::Extension * getSelectionType() = 0;
 
+    /**
+     * Return the selected filename, if any.  If not, return ""
+     */
     virtual Glib::ustring getFilename () =0;
+    
+    /**
+     * Return the scope of the export.  One of the enumerated types
+     * in ScopeType     
+     */
+    virtual ScopeType getScope() = 0;
+    
+    /**
+     * Return left side of the exported region
+     */
+    virtual double getSourceX() = 0;
+    
+    /**
+     * Return the top of the exported region
+     */
+    virtual double getSourceY() = 0;
+    
+    /**
+     * Return the width of the exported region
+     */
+    virtual double getSourceWidth() = 0;
+    
+    /**
+     * Return the height of the exported region
+     */
+    virtual double getSourceHeight() = 0;
 
+    /**
+     * Return the units of the coordinates of exported region
+     */
+    virtual Glib::ustring getSourceUnits() = 0;
 
-}; //FileSaveDialog
+    /**
+     * Return the width of the destination document
+     */
+    virtual double getDestinationWidth() = 0;
+
+    /**
+     * Return the height of the destination document
+     */
+    virtual double getDestinationHeight() = 0;
+
+    /**
+     * Return the height of the exported region
+     */
+    virtual Glib::ustring getDestinationUnits() = 0;
+
+    /**
+     * Return the destination DPI image resulution, if bitmap
+     */
+    virtual double getDestinationDPI() = 0;
+
+    /**
+     * Return whether we should use Cairo for rendering
+     */
+    virtual bool getUseCairo() = 0;
+
+    /**
+     * Return whether we should use antialiasing
+     */
+    virtual bool getUseAntialias() = 0;
+
+    /**
+     * Return the background color for exporting
+     */
+    virtual unsigned long getBackground() = 0;
+
+    
+
+}; //FileExportDialog
 
 
 } //namespace Dialog