index 7755aae7d3275f7c1be8c30074d7bc2adfa991b3..b73955b466c0d1d4f438919ab323388fc953c4a4 100644 (file)
#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
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
* @param fileTypes one of FileDialogTypes
* @param title the title of the dialog
*/
- static FileOpenDialog *create(const char *path, FileDialogType fileTypes, const char *title);
+ static FileOpenDialog *create(Gtk::Window& parentWindow,
+ const Glib::ustring &path,
+ FileDialogType fileTypes,
+ const char *title);
/**
* 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
*/
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
* @param title the title of the dialog
* @param key a list of file types from which the user can select
*/
- static FileSaveDialog *create(const char *path, FileDialogType fileTypes, const char *title, const char * default_key);
+ static FileSaveDialog *create(Gtk::Window& parentWindow,
+ const Glib::ustring &path,
+ FileDialogType fileTypes,
+ const char *title,
+ const Glib::ustring &default_key);
/**
*/
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
+
+
+/**
+ * This class provides an implementation-independent API for
+ * file "Export" dialogs. Saving as these types will not affect
+ * the original file.
+ */
+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
+ * @param fileTypes one of FileDialogTypes
+ * @param title the title of the dialog
+ * @param key a list of file types from which the user can select
+ */
+ FileExportDialog()
+ {}
+
+ /**
+ * Factory.
+ * @param path the directory where to start searching
+ * @param fileTypes one of FileDialogTypes
+ * @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,
+ FileDialogType fileTypes,
+ const char *title,
+ const Glib::ustring &default_key);
+
+
+ /**
+ * Destructor.
+ * Perform any necessary cleanups.
+ */
+ virtual ~FileExportDialog () {};
+
+
+ /**
+ * Show an SaveAs file selector.
+ * @return the selected path if user selected one, else NULL
+ */
+ virtual bool show() =0;
+
+ /**
+ * Return the 'key' (filetype) of the selection, if any
+ * @return a pointer to a string if successful (which must
+ * be later freed with g_free(), else NULL.
+ */
+ 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;
+
+ /**
+ * 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
} //namespace UI
} //namespace Inkscape