Code

Use radiobutton for "always snap" in the document-properties dialog
[inkscape.git] / src / ui / dialog / filedialog.h
index daefc9387c9c9ac74dca442a5be9fb6f4c3ec410..b73955b466c0d1d4f438919ab323388fc953c4a4 100644 (file)
@@ -6,21 +6,27 @@
  *
  * Authors:
  *   Bob Jamison <rwjj@earthlink.net>
+ *   Joel Holdsworth
  *   Inkscape Guys
  *
  * Copyright (C) 2006 Johan Engelen <johan@shouraizou.nl>
- * Copyright (C) 2004-2006, Inkscape Authors
+ * Copyright (C) 2007-2008 Joel Holdsworth
+ * Copyright (C) 2004-2008, 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
 {
@@ -29,7 +35,6 @@ namespace UI
 namespace Dialog
 {
 
-
 /**
  * Used for setting filters and options, and
  * reading them back from user selections.
@@ -48,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
@@ -79,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);
 
 
     /**
@@ -94,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
@@ -103,10 +114,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
 
 
@@ -139,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);
 
 
@@ -165,13 +185,29 @@ public:
      */
     virtual Inkscape::Extension::Extension * getSelectionType() = 0;
 
-    virtual Glib::ustring getFilename () =0;
+    virtual void setSelectionType( Inkscape::Extension::Extension * key ) = 0;
 
     /**
-     * Change the window title.
+     * Get the file name chosen by the user.   Valid after an [OK]
      */
-    virtual void change_title(const Glib::ustring& title) =0;
+    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
 
@@ -212,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);