00001
00002
00003
00004
00005
00006
00007
00008
00009
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,
00026 wxEditorCommandInternal,
00027 wxEditorCommandExternal
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
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
00107 const wxString& GetFileTypeExtensionForDefaultViewing() const { return m_fileTypeExtensionForDefaultViewing; }
00108
00109
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
00151 wxString m_defaultViewerName;
00152
00153
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
00258
00259 static bool ReadAttributeValue(wxVariant& variant, wxDataInputStream& dataStream);
00260
00261
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
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