include/commandeditor/commandeditor.h

Go to the documentation of this file.
00001 
00002 // Name:        commandeditor.h
00003 // Purpose:     Command editor classes
00004 // Author:      Julian Smart
00005 // Modified by:
00006 // Created:     2008-11-18
00007 // RCS-ID:      $Id$
00008 // Copyright:   (c) Julian Smart
00009 // Licence:     New BSD License
00011 
00012 #ifndef __COMMANDEDITOR_H__
00013 #define __COMMANDEDITOR_H__
00014 
00015 #include "wx/dynarray.h"
00016 
00017 class wxEditorCommandInfo;
00018 class wxOutputStream;
00019 class wxDataOutputStream;
00020 class wxInputStream;
00021 class wxDataInputStream;
00022 
00023 enum wxEditorCommandType
00024 {
00025     wxEditorCommandDefault,  // system default editor or viewer
00026     wxEditorCommandInternal, // internal editor or viewer
00027     wxEditorCommandExternal  // custom external editor or viewer
00028 };
00029 
00030 enum wxEditorMediaType
00031 {
00032     wxEditorCommandMediaTypeUnknown,
00033     wxEditorCommandMediaTypeEbook,
00034     wxEditorCommandMediaTypeAudio,
00035     wxEditorCommandMediaTypeVideo,
00036     wxEditorCommandMediaTypeImage,
00037     wxEditorCommandMediaTypeDocument
00038 };
00039 
00044 #define wxEDITOR_COMMAND_DEFAULT_NAME   wxTRANSLATE("Default")
00045 #define wxEDITOR_COMMAND_INTERNAL_NAME  wxTRANSLATE("Internal")
00046 
00047 class wxEditorCommand: public wxObject
00048 {
00049 public:
00050     wxEditorCommand() { Init(); }
00051     wxEditorCommand(const wxEditorCommand& info) { Copy(info); }
00052 
00053     void Init();
00054     void Copy(const wxEditorCommand& info);
00055     void operator=(const wxEditorCommand& info) { Copy(info); }
00056 
00057     bool IsDefault() const { return m_commandType == wxEditorCommandDefault; }
00058     bool IsInternal() const { return m_commandType == wxEditorCommandInternal; }
00059     bool IsExternal() const { return m_commandType == wxEditorCommandExternal; }
00060 
00062     void SetDefault(bool isDefault = true) { m_commandType = (isDefault ? wxEditorCommandDefault : wxEditorCommandExternal); }
00063     void SetInternal(bool isInternal = true) { m_commandType = (isInternal ? wxEditorCommandInternal : wxEditorCommandExternal); }
00064 
00065     wxEditorCommandType GetCommandType() const { return m_commandType; }
00066     void SetCommandType(wxEditorCommandType t) { m_commandType = t; }
00067 
00068     bool Save(wxOutputStream& stream, wxDataOutputStream& dataStream);
00069     bool Load(wxInputStream& stream, wxDataInputStream& dataStream);
00070 
00071     void Enable(bool enable) { m_enabled = enable; }
00072 
00073     wxString            m_title;
00074     wxString            m_command;
00075     bool                m_enabled;
00076     wxEditorCommandType m_commandType;
00077     // bool            m_isDefault; // system command
00078 };
00079 
00080 WX_DECLARE_OBJARRAY(wxEditorCommand, wxEditorCommandArray);
00081 
00086 class wxEditorCommands: public wxObject
00087 {
00088 public:
00089     wxEditorCommands(const wxString& fileTypeName, const wxString& fileTypeDescription, const wxString& fileTypeExtensions, int mediaType = wxEditorCommandMediaTypeUnknown)
00090     { Init(); m_fileTypeName = fileTypeName; m_fileTypeDescription = fileTypeDescription; m_fileTypeExtensions = fileTypeExtensions; m_mediaType = mediaType; }
00091 
00092     wxEditorCommands() { Init(); }
00093     
00094     wxEditorCommands(const wxEditorCommands& commands) { Copy(commands); }
00095 
00096     void Init();
00097     void Copy(const wxEditorCommands& commands);
00098     void operator=(const wxEditorCommands& commands) { Copy(commands); }
00099 
00100     const wxString& GetFileTypeName() const { return m_fileTypeName; }
00101     const wxString& GetFileTypeDescription() const { return m_fileTypeDescription; }
00102     const wxString& GetFileTypeExtensions() const { return m_fileTypeExtensions; }
00103     const wxString& GetDefaultViewerName() const { return m_defaultViewerName; }
00104     const wxString& GetDefaultEditorName() const { return m_defaultEditorName; }
00105 
00106     // Extension to use when getting the default command for editing
00107     const wxString& GetFileTypeExtensionForDefaultViewing() const { return m_fileTypeExtensionForDefaultViewing; }
00108 
00109     // Extension to use when getting the default command for viewing
00110     const wxString& GetFileTypeExtensionForDefaultEditing() const { return m_fileTypeExtensionForDefaultEditing; }
00111     
00112     const wxEditorCommandArray& GetViewers() const { return m_viewers; }
00113     wxEditorCommandArray& GetViewers() { return m_viewers; }
00114 
00115     const wxEditorCommandArray& GetEditors() const { return m_editors; }
00116     wxEditorCommandArray& GetEditors() { return m_editors; }
00117 
00118     wxArrayString GetViewerCommandNames(bool onlyEnabledCommands = true) const;
00119     wxArrayString GetEditorCommandNames(bool onlyEnabledCommands = true) const;
00120 
00122     wxEditorCommand* FindViewerCommand(const wxString& title) const;
00123     wxEditorCommand* FindViewerCommand(int i) const;
00124     wxEditorCommand* GetDefaultViewerCommand() const;
00125 
00127     wxEditorCommand* FindEditorCommand(const wxString& title) const;
00128     wxEditorCommand* FindEditorCommand(int i) const;
00129     wxEditorCommand* GetDefaultEditorCommand() const;
00130 
00132     int GetMediaType() const { return m_mediaType; }
00133     void SetMediaType(int mediaType) { m_mediaType = mediaType; }
00134 
00135     bool Save(wxOutputStream& stream, wxDataOutputStream& dataStream);
00136     bool Load(wxInputStream& stream, wxDataInputStream& dataStream);
00137 
00139     void InitializeDefaults(const wxString& extForDefaultViewing, const wxString& extForDefaultEditing, bool addInternal = true);
00140 
00141 public:
00142     wxString                m_fileTypeName;
00143     wxString                m_fileTypeDescription;
00144     wxString                m_fileTypeExtensions;
00145     wxString                m_fileTypeExtensionForDefaultViewing;
00146     wxString                m_fileTypeExtensionForDefaultEditing;
00147     wxEditorCommandArray    m_viewers;
00148     wxEditorCommandArray    m_editors;
00149 
00150     // The name of the default viewer command (m_title)
00151     wxString                m_defaultViewerName;
00152     
00153     // The name of the default editor command (m_title)
00154     wxString                m_defaultEditorName;
00155 
00156     int                     m_mediaType;
00157 };
00158 
00159 WX_DECLARE_OBJARRAY(wxEditorCommands, wxEditorCommandsArray);
00160 
00161 #define wxEDITOR_COMMAND_BY_TYPE        0x01
00162 #define wxEDITOR_COMMAND_BY_EXTENSION   0x02
00163 
00164 typedef enum {
00165     wxEDITOR_COMMAND_FAILURE,
00166     wxEDITOR_COMMAND_CANCELLED,
00167     wxEDITOR_COMMAND_SUCCESS
00168 } wxEditorCommandGetCommandStatus;
00169 
00174 class wxEditorCommandManager: public wxObject
00175 {
00176 public:
00177     wxEditorCommandManager() { Init(); }
00178     wxEditorCommandManager(const wxEditorCommandManager& manager) { Copy(manager); }
00179     ~wxEditorCommandManager();
00180 
00181     void Init();
00182     void Copy(const wxEditorCommandManager& manager);
00183     void operator=(const wxEditorCommandManager& manager) { Copy(manager); }
00184 
00186     void DeleteCommandMenu();
00187 
00189     int GetSelection() const { return m_currentSelection; }
00190 
00192     void SetSelection(int sel) { m_currentSelection = sel; }
00193 
00194     const wxEditorCommandsArray& GetFileTypes() const { return m_fileTypes; }
00195     wxEditorCommandsArray& GetFileTypes() { return m_fileTypes; }
00196 
00198     virtual wxEditorCommands* GetFileType(const wxString& name, int flags = wxEDITOR_COMMAND_BY_TYPE);
00199 
00201     virtual wxEditorCommand* GetDefaultViewer(const wxString& name, int flags = wxEDITOR_COMMAND_BY_TYPE);
00202 
00204     virtual wxEditorCommand* GetDefaultEditor(const wxString& name, int flags = wxEDITOR_COMMAND_BY_TYPE);
00205 
00208     virtual bool LaunchViewer(const wxString& filename, const wxString& name, const wxString& viewerCmdName = wxEmptyString, int flags = wxEDITOR_COMMAND_BY_TYPE);
00209 
00212     virtual bool LaunchEditor(const wxString& filename, const wxString& name, const wxString& editorCmdName = wxEmptyString, int flags = wxEDITOR_COMMAND_BY_TYPE);
00213 
00215     virtual bool LaunchFile(const wxString& filename, const wxEditorCommand& cmd, const wxString& defaultExtForCmd = wxEmptyString);
00216     virtual bool LaunchFile(const wxEditorCommandInfo& info);
00217 
00220     virtual bool LaunchFile(wxWindow* win, const wxArrayString& filenames, const wxArrayString& fileTypes, bool editing, int flags = wxEDITOR_COMMAND_BY_TYPE);
00221 
00223     virtual bool LaunchFile(wxWindow* win, const wxString& filename, const wxString& fileType, bool editing, int flags = wxEDITOR_COMMAND_BY_TYPE);
00224 
00226     virtual wxEditorCommandGetCommandStatus GetCommand(wxWindow* win, const wxArrayString& filenames, const wxArrayString& fileTypes, bool editing, wxEditorCommandInfo* info, int flags = wxEDITOR_COMMAND_BY_TYPE);
00227 
00229     virtual wxEditorCommandGetCommandStatus GetCommand(wxWindow* win, const wxString& filename, const wxString& fileType, bool editing, wxEditorCommandInfo* info, int flags = wxEDITOR_COMMAND_BY_TYPE);
00230 
00232     virtual bool DoMenuCommand(wxCommandEvent& event);
00233 
00235     void SetMenuIdRange(int start, int end) { m_startMenuId = start; m_endMenuId = end; }
00236 
00238     virtual void AddFileType(const wxEditorCommands& fileType);
00239 
00241     virtual bool DeleteFileType(int i);
00242 
00244     virtual bool Save(wxOutputStream& stream, wxDataOutputStream& dataStream);
00245     virtual bool Save(const wxString& filename);
00246 
00248     virtual bool Load(wxInputStream& stream, wxDataInputStream& dataStream);
00249     virtual bool Load(const wxString& filename);
00250 
00252     virtual void Clear();
00253 
00255     virtual bool DefaultLaunchFile(const wxString& filename) = 0;
00256 
00257     // Read an attribute name/value pair
00258     // Returns FALSE if the attribute name "END" was encountered
00259     static bool ReadAttributeValue(wxVariant& variant, wxDataInputStream& dataStream);
00260     
00261     // Writes an attribute name/value pair
00262     static bool WriteAttributeValue(const wxVariant& variant, wxDataOutputStream& dataStream);
00263     static bool WriteAttributeValue(const wxString& value, const wxString& name, wxDataOutputStream& dataStream);
00264     static bool WriteAttributeValue(long value, const wxString& name, wxDataOutputStream& dataStream);
00265     static bool WriteAttributeValue(int value, const wxString& name, wxDataOutputStream& dataStream);
00266     static bool WriteAttributeValue(double value, const wxString& name, wxDataOutputStream& dataStream);
00267     static bool WriteAttributeValue(bool value, const wxString& name, wxDataOutputStream& dataStream);
00268     
00269     // Write end of attributes marker
00270     static bool WriteAttributeEnd(wxDataOutputStream& dataStream);
00271 
00272 public:
00273     wxEditorCommandsArray m_fileTypes;
00274 
00276     bool            m_currentlyEditing;
00277     wxArrayString   m_currentFileTypes;
00278     wxArrayString   m_currentFilenames;
00279     wxArrayString   m_currentCmdChoices;
00280     wxMenu*         m_currentMenu;
00281     int             m_startMenuId;
00282     int             m_endMenuId;
00283     int             m_currentSelection;
00284 };
00285 
00290 class wxEditorCommandInfo
00291 {
00292 public:
00293     wxEditorCommandInfo() { m_command = NULL; m_commands = NULL; m_editing = false; }
00294 
00295     wxEditorCommand*    m_command;
00296     wxEditorCommands*   m_commands;
00297     bool                m_editing;
00298     wxString            m_filename;
00299     wxString            m_commandName;
00300     wxString            m_fileType;
00301 };
00302 
00303 
00304 #endif
00305     // __COMMANDEDITOR_H__

Generated on Wed May 6 19:20:18 2009 for AxTk by  doxygen 1.5.1