Code

convert almost all libnrtype to Geom::
[inkscape.git] / src / ui / dialog / filedialog.h
index 75c6f008073c4517a4dd1c17fd88c6c6f4eb129c..eda8c4eb48c06295078a79c02bb869a82948fd4d 100644 (file)
@@ -6,27 +6,28 @@
  *
  * 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>
 
 namespace Inkscape {
 namespace Extension {
 class Extension;
+class Output;
 }
 }
 
-
-
-
 namespace Inkscape
 {
 namespace UI
@@ -34,8 +35,6 @@ namespace UI
 namespace Dialog
 {
 
-
-
 /**
  * Used for setting filters and options, and
  * reading them back from user selections.
@@ -54,10 +53,16 @@ typedef enum {
     SVG_NAMESPACE_WITH_EXTENSIONS
     } FileDialogSelectionType;
 
+
+/**
+ * Return true if the string ends with the given suffix
+ */
+bool hasSuffix(const Glib::ustring &str, const Glib::ustring &ext);
+
 /**
- * Architecture-specific data
+ * Return true if the image is loadable by Gdk, else false
  */
-typedef struct FileOpenNativeData_def FileOpenNativeData;
+bool isValidImageFile(const Glib::ustring &fileName);
 
 /**
  * This class provides an implementation-independent API for
@@ -84,10 +89,10 @@ public:
      * @param fileTypes one of FileDialogTypes
      * @param title the title of the dialog
      */
-    static FileOpenDialog *create(Gtk::Window& parentWindow, 
+    static FileOpenDialog *create(Gtk::Window& parentWindow,
                                   const Glib::ustring &path,
                                   FileDialogType fileTypes,
-                                  const Glib::ustring &title);
+                                  const char *title);
 
 
     /**
@@ -100,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
@@ -109,9 +114,17 @@ public:
      */
     virtual Inkscape::Extension::Extension * getSelectionType() = 0;
 
-    virtual Glib::ustring getFilename () =0;
+    Glib::ustring getFilename();
+
+    virtual std::vector<Glib::ustring> getFilenames() = 0;
 
-    virtual std::vector<Glib::ustring> getFilenames () = 0;
+    virtual Glib::ustring getCurrentDirectory() = 0;
+
+protected:
+    /**
+     * Filename that was given
+     */
+    Glib::ustring myFilename;
 
 }; //FileOpenDialog
 
@@ -145,11 +158,12 @@ public:
      * @param title the title of the dialog
      * @param key a list of file types from which the user can select
      */
-    static FileSaveDialog *create(Gtk::Window& parentWindow, 
-                                                         const Glib::ustring &path,
+    static FileSaveDialog *create(Gtk::Window& parentWindow,
+                                  const Glib::ustring &path,
                                   FileDialogType fileTypes,
-                                  const Glib::ustring &title,
-                                  const Glib::ustring &default_key);
+                                  const char *title,
+                                  const Glib::ustring &default_key,
+                                  const gchar *docTitle);
 
 
     /**
@@ -174,17 +188,37 @@ public:
 
     virtual void setSelectionType( Inkscape::Extension::Extension * key ) = 0;
 
-    virtual Glib::ustring getFilename () =0;
+    /**
+     * Get the file name chosen by the user.   Valid after an [OK]
+     */
+    Glib::ustring getFilename ();
+
+    /**
+     * Get the document title chosen by the user.   Valid after an [OK]
+     */
+    Glib::ustring getDocTitle ();
+
+    virtual Glib::ustring getCurrentDirectory() = 0;
+
+protected:
+
+    /**
+     * Filename that was given
+     */
+    Glib::ustring myFilename;
 
     /**
-     * Change the window title.
+     * Doc Title that was given
      */
-    virtual void change_title(const Glib::ustring& title) =0;
+    Glib::ustring myDocTitle;
 
     /**
-     * Change the default save path location.
+     * List of known file extensions.
      */
-    virtual void change_path(const Glib::ustring& path) =0;
+    std::set<Glib::ustring> knownExtensions;
+
+
+    void appendExtension(Glib::ustring& path, Inkscape::Extension::Output* outputExtension);
 
 }; //FileSaveDialog
 
@@ -225,10 +259,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(Gtk::Window& parentWindow, 
-                                       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);
 
 
@@ -256,28 +290,28 @@ public:
      * 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     
+     * 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
      */
@@ -323,7 +357,7 @@ public:
      */
     virtual unsigned long getBackground() = 0;
 
-    
+
 
 }; //FileExportDialog