Code

Use radiobutton for "always snap" in the document-properties dialog
[inkscape.git] / src / ui / dialog / filedialog.h
index c84a6a79463a9ef2d64263c75b0688f01d98a369..b73955b466c0d1d4f438919ab323388fc953c4a4 100644 (file)
@@ -1,21 +1,39 @@
 #ifndef __FILE_DIALOG_H__
 #define __FILE_DIALOG_H__
+/**
+ * Defines the FileOpenDialog, FileSaveDialog, and FileExportDialog
+ * and their supporting classes.
+ *
+ * Authors:
+ *   Bob Jamison <rwjj@earthlink.net>
+ *   Joel Holdsworth
+ *   Inkscape Guys
+ *
+ * Copyright (C) 2006 Johan Engelen <johan@shouraizou.nl>
+ * Copyright (C) 2007-2008 Joel Holdsworth
+ * Copyright (C) 2004-2008, Inkscape Authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
 
-/** \file Defines classes FileOpenDialog, FileSaveDialog,
- *    and enums FileDialogType, FileDialogSelectionType. */
-
-#include <glib/gtypes.h>
-#include <glibmm/slisthandle.h>
+#include <glibmm.h>
+#include <vector>
+#include <set>
+#include <gtkmm.h>
 
 namespace Inkscape {
-
 namespace Extension {
 class Extension;
+class Output;
+}
 }
 
-namespace UI {
-namespace Dialog {
-
+namespace Inkscape
+{
+namespace UI
+{
+namespace Dialog
+{
 
 /**
  * Used for setting filters and options, and
@@ -35,12 +53,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
@@ -66,9 +89,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);
 
 
     /**
@@ -81,7 +105,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
@@ -90,10 +114,18 @@ public:
      */
     virtual Inkscape::Extension::Extension * getSelectionType() = 0;
 
-    virtual gchar * getFilename () =0;
-
-    virtual Glib::SListHandle<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
 
 
@@ -126,9 +158,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);
 
 
@@ -152,8 +185,29 @@ public:
      */
     virtual Inkscape::Extension::Extension * getSelectionType() = 0;
 
-    virtual gchar * 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
 
@@ -169,6 +223,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
@@ -186,9 +248,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);
 
 
@@ -212,10 +275,80 @@ public:
      */
     virtual Inkscape::Extension::Extension * getSelectionType() = 0;
 
-    virtual gchar * getFilename () =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;
+
+    /**
+     * Return the width of the destination document
+     */
+    virtual double getDestinationWidth() = 0;
 
+    /**
+     * Return the height of the destination document
+     */
+    virtual double getDestinationHeight() = 0;
 
-}; //FileSaveDialog
+    /**
+     * 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