/* * Copyright 2005-2007 Gerald Schmidt. * * This file is part of Xml Copy Editor. * * Xml Copy Editor is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * Xml Copy Editor is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Xml Copy Editor; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef XMLCOPYEDITOR_H #define XMLCOPYEDITOR_H #define wxDEBUG_LEVEL 0 #ifdef __WXOSX__ #define wxMAC_USE_NATIVE_TOOLBAR 1 #endif #define NEWFINDREPLACE 1 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "xmldoc.h" #include "myhtmlpane.h" #include "xmlencodinghandler.h" #include enum { STATUS_HIDDEN = 1, STATUS_PROTECTED, STATUS_MODIFIED, STATUS_POSITION, ID_TOOLBAR = wxID_HIGHEST + 1, ID_XML_TOOLBAR, ID_NOTEBOOK, ID_LOCATION_PANEL, ID_INSERT_CHILD_PANEL, ID_INSERT_SIBLING_PANEL, ID_INSERT_ENTITY_PANEL, ID_FIND_REPLACE_PANEL, ID_FIND_PANEL, ID_COMMAND, ID_VALIDATION_PANE, ID_LOCATION_PANE_VISIBLE, ID_PREVIOUS_DOCUMENT, ID_NEXT_DOCUMENT, ID_OPTIONS, ID_IMPORT_MSWORD, ID_CLOSE_MESSAGE_PANE, ID_CLOSE_FIND_REPLACE_PANE, ID_CLOSE_COMMAND_PANE, ID_HOME, ID_PASTE_NEW_DOCUMENT, ID_PRINT_SETUP, ID_FEEDBACK, ID_TOOLBAR_VISIBLE, ID_PROTECT_TAGS, ID_SHOW_TAGS, ID_HIDE_ATTRIBUTES, ID_HIDE_TAGS, ID_REPLACE, ID_GLOBAL_REPLACE, ID_COLOR_SCHEME_DEFAULT, ID_COLOR_SCHEME_DEFAULT_BACKGROUND, ID_COLOR_SCHEME_REDUCED_GLARE, ID_COLOR_SCHEME_NONE, ID_NOTEBOOK_STYLE_FLAT, ID_NOTEBOOK_STYLE_VC8, ID_NOTEBOOK_STYLE_VC8_COLOR, ID_DOWNLOAD_SOURCE, ID_OPEN_LARGE_FILE, ID_RELOAD, ID_WRAP_WORDS, // IDs to be activated only if a document is open ID_SPLIT_TAB_TOP, ID_SPLIT_TAB_RIGHT, ID_SPLIT_TAB_BOTTOM, ID_SPLIT_TAB_LEFT, ID_FIND, ID_FIND_AGAIN, ID_GOTO, ID_TOGGLE_COMMENT, ID_PRINT, ID_WORD_COUNT, ID_PRINT_PREVIEW, ID_INSERT_CHILD, ID_INSERT_SIBLING, ID_INSERT_TWIN, ID_INSERT_ENTITY, ID_INSERT_SYMBOL, ID_CHECK_WELLFORMED, ID_VALIDATE_DTD, ID_VALIDATE_RELAX_NG, ID_VALIDATE_W3C_SCHEMA, ID_CREATE_SCHEMA, ID_DTD_TO_SCHEMA, ID_XPATH, ID_COPY_XPATH, ID_XSLT, ID_XSLT_TEI_FO, ID_XSLT_TEI_HTML, ID_XSLT_TEI_XHTML, ID_XSLT_TEI_LATEX, ID_XSLT_DOCBOOK_FO, ID_XSLT_DOCBOOK_HTML, ID_XSLT_DOCBOOK_XHTML, ID_XSLT_DOCBOOK_WORDML, ID_XSLT_WORDML_DOCBOOK, ID_ASSOCIATE_DTD_PUBLIC, ID_ASSOCIATE_DTD_SYSTEM, ID_ASSOCIATE_W3C_SCHEMA, ID_ASSOCIATE_W3C_SCHEMA_NS, ID_ASSOCIATE_XSL, ID_PRETTYPRINT, ID_ENCODING, ID_SPELL, ID_STYLE, ID_FONT_SMALLER, ID_FONT_NORMAL, ID_FONT_LARGER, ID_BROWSER, ID_TOGGLE_FOLD, ID_FOLD_ALL, ID_UNFOLD_ALL, ID_VALIDATE_PRESET1, ID_VALIDATE_PRESET2, ID_VALIDATE_PRESET3, ID_VALIDATE_PRESET4, ID_VALIDATE_PRESET5, ID_VALIDATE_PRESET6, ID_VALIDATE_PRESET7, ID_VALIDATE_PRESET8, ID_VALIDATE_PRESET9, ID_EXPORT, ID_EXPORT_MSWORD, // icon constants CONST_WARNING, CONST_STOP, CONST_INFO, CONST_QUESTION }; class MyServer; class MyApp : public wxApp { public: MyApp(); ~MyApp(); virtual bool OnInit(); virtual void OnUnhandledException(); virtual bool OnExceptionInMainLoop(); #ifndef __WXMSW__ virtual void HandleEvent ( wxEvtHandler *handler, wxEventFunction func, wxEvent& event ) const; #endif const std::set &getAvailableTranslations ( const wxArrayString *catalogLookupPathPrefixes = NULL, const wxString *catelog = NULL ); protected: wxLocale myLocale; private: wxSingleInstanceChecker *checker; MyServer *server; bool singleInstanceCheck; int lang; std::auto_ptr config; }; // forward declarations class MyNotebook; class wxAuiNotebookEvent; class LocationPanel; class InsertPanel; class CommandPanel; #ifdef NEWFINDREPLACE class FindReplacePanel; #endif class MyFrame : public wxFrame { public: MyFrame ( const wxString& title, wxFileConfig *configParameter, wxLocale& locale, bool singleInstanceCheck, int langParameter ); ~MyFrame(); void OnActivateApp ( wxActivateEvent& event ); void OnAbout ( wxCommandEvent& event ); void OnCheckWellformedness ( wxCommandEvent& event ); void OnClose ( wxCommandEvent& event ); void OnCloseAll ( wxCommandEvent& event ); void OnCloseMessagePane ( wxCommandEvent& event ); void OnCloseFindReplacePane ( wxCommandEvent& event ); void OnCloseCommandPane ( wxCommandEvent& event ); void OnCut ( wxCommandEvent& event ); void OnCopy ( wxCommandEvent& event ); void OnPaste ( wxCommandEvent& event ); void OnPasteNewDocument ( wxCommandEvent& event ); void OnPrintSetup ( wxCommandEvent &event ); void OnPrintPreview ( wxCommandEvent &event ); void OnPrint ( wxCommandEvent &event ); void OnFind ( wxCommandEvent& event ); void OnFindAgain ( wxCommandEvent& event ); void OnFindReplace ( wxCommandEvent& event ); void OnCommand ( wxCommandEvent& event ); void OnGlobalReplace ( wxCommandEvent& event ); void OnToggleComment ( wxCommandEvent& event ); void OnWordCount ( wxCommandEvent& event ); void OnFeedback ( wxCommandEvent& event ); void OnSplitTab ( wxCommandEvent& event ); void OnFontSmaller ( wxCommandEvent& event ); void OnFontMedium ( wxCommandEvent& event ); void OnFontLarger ( wxCommandEvent& event ); void OnImportMSWord ( wxCommandEvent& event ); void OnExport ( wxCommandEvent& event ); void OnInsertChild ( wxCommandEvent& event ); void OnInsertSibling ( wxCommandEvent& event ); void OnInsertTwin ( wxCommandEvent& event ); void OnInsertEntity ( wxCommandEvent& event ); void OnInsertSymbol ( wxCommandEvent& event ); void OnExportMSWord ( wxCommandEvent& event ); void OnBrowser ( wxCommandEvent& event ); void OnHelp ( wxCommandEvent& event ); void OnGoto ( wxCommandEvent& event ); void OnIconize ( wxIconizeEvent& event ); void OnNew ( wxCommandEvent& event ); void OnOpen ( wxCommandEvent& event ); void OnPrettyPrint ( wxCommandEvent& event ); void OnEncoding ( wxCommandEvent& event ); void OnQuit ( wxCommandEvent& event ); void OnSave ( wxCommandEvent& event ); void OnSaveAs ( wxCommandEvent& event ); void OnReload ( wxCommandEvent& event ); void OnUndo ( wxCommandEvent& event ); void OnRedo ( wxCommandEvent& event ); void OnSpelling ( wxCommandEvent& event ); //void OnStyle ( wxCommandEvent& event ); void OnPreviousDocument ( wxCommandEvent& event ); void OnNextDocument ( wxCommandEvent& event ); void OnOptions ( wxCommandEvent& event ); void OnHistoryFile ( wxCommandEvent& event ); void OnDialogFind ( wxFindDialogEvent& event ); void OnDialogReplace ( wxFindDialogEvent& event ); void OnDialogReplaceAll ( wxFindDialogEvent& event ); void OnFrameClose ( wxCloseEvent& event ); void OnIdle ( wxIdleEvent& event ); void OnUpdateCloseMessagePane ( wxUpdateUIEvent& event ); void OnUpdateCloseFindReplacePane ( wxUpdateUIEvent& event ); void OnUpdateCloseCommandPane ( wxUpdateUIEvent& event ); void OnUpdateCloseAll ( wxUpdateUIEvent& event ); void OnUpdateUndo ( wxUpdateUIEvent& event ); void OnUpdatePreviousDocument ( wxUpdateUIEvent& event ); void OnUpdateSavedOnly ( wxUpdateUIEvent& event ); void OnUpdateNextDocument ( wxUpdateUIEvent& event ); void OnUpdateRedo ( wxUpdateUIEvent& event ); void OnUpdateCutCopy ( wxUpdateUIEvent& event ); void OnUpdateFindAgain ( wxUpdateUIEvent& event ); void OnUpdatePaste ( wxUpdateUIEvent& event ); void OnUpdateToggleComment ( wxUpdateUIEvent& event ); void OnUpdateDocRange ( wxUpdateUIEvent& event ); void OnUpdateReplaceRange ( wxUpdateUIEvent& event ); void OnUpdateReload ( wxUpdateUIEvent& event ); void OnUpdateLocationPaneVisible ( wxUpdateUIEvent& event ); void OnValidateDTD ( wxCommandEvent& event ); void OnValidateRelaxNG ( wxCommandEvent& event ); void OnValidateSchema ( wxCommandEvent& event ); void OnCreateSchema ( wxCommandEvent& event ); void OnDtd2Schema ( wxCommandEvent& event ); void OnXPath ( wxCommandEvent& event ); void OnXslt ( wxCommandEvent& event ); void OnValidatePreset ( wxCommandEvent& event ); void OnHome ( wxCommandEvent& event ); void OnDownloadSource ( wxCommandEvent& event ); void OnKeyPressed ( wxKeyEvent& event ); void OnToolbarVisible ( wxCommandEvent& event ); void OnLocationPaneVisible ( wxCommandEvent& event ); void OnProtectTags ( wxCommandEvent& event ); void OnVisibilityState ( wxCommandEvent& event ); void OnColorScheme ( wxCommandEvent& event ); void OnAssociate ( wxCommandEvent& event ); void OnPageClosing ( wxAuiNotebookEvent& event ); void OnToggleFold ( wxCommandEvent& event ); void OnFoldAll ( wxCommandEvent& event ); void OnUnfoldAll ( wxCommandEvent& event ); void OnRevert ( wxCommandEvent& event ); void OnWrapWords ( wxCommandEvent& event ); #ifdef __WXMSW__ void OnDropFiles ( wxDropFilesEvent& event ); #endif void OnPromptGenerated ( wxNotifyEvent &event ); void OnCopyXPath ( wxCommandEvent &event ); void OnUpdateCopyXPath ( wxUpdateUIEvent& event ); void setStrictScrolling ( bool b ); void validateRelaxNG ( XmlDoc *doc, const wxString& schemaName, wxString& fileName ); void closeMessagePane(); void closeFindReplacePane(); void closeCommandPane(); bool closeActiveDocument(); bool getHandleCommandLineFlag(); // public to allow access outside MyFrame constructor void handleCommandLine(); MyNotebook *getNotebook() { return mainBook; } // public to allow access from CommandPanel XmlDoc *getActiveDocument(); void newDocument ( const wxString& s, const wxString& path = wxEmptyString, bool canSave = false ); void newDocument ( const std::string& s, const wxString& path = wxEmptyString, bool canSave = false ); void statusProgress ( const wxString& s ); // public to allow InsertPanel access void messagePane ( const wxString& s, int iconType = CONST_INFO, bool forcePane = false ); // public to allow IPC access bool openFile ( const wxString &fileName, bool largeFile = false ); bool isOpen ( const wxString& fileName ); bool activateTab ( const wxString& fileName ); void reloadTab(); void addToFileQueue ( wxString& fileName ); void openRememberedTabs(); private: wxAuiManager manager; wxFileConfig *config; // owned by MyApp wxLocale& myLocale; bool singleInstanceCheck; int lang, lastPos; #ifndef __WXDEBUG__ wxLogNull logTarget; #endif std::auto_ptr htmlPrinting; std::auto_ptr findDialog; std::auto_ptr helpController; wxBoxSizer *frameSizer; wxMenuBar *menuBar; wxToolBar *toolBar; LocationPanel *locationPanel; InsertPanel *insertChildPanel, *insertSiblingPanel, *insertEntityPanel; #ifdef NEWFINDREPLACE FindReplacePanel *findReplacePanel; #endif CommandPanel *commandPanel; XmlDoc *lastDoc; wxMenu *fileMenu, *xmlMenu, *viewMenu, *colorSchemeMenu; std::vector menuVector; MyNotebook *mainBook; MyHtmlPane *htmlReport; wxString catalogPath, xslDtdPath, rssDtdPath, lzxDtdPath, xtmDtdPath, xliffDtdPath, aspellDataPath, aspellDictPath; std::map > > promptMap; std::map validationPresetMap; #ifdef __WXMSW__ struct MyCompare : public std::binary_function { bool operator() ( const wxString &x, const wxString &y ) const { return x.CmpNoCase ( y ) < 0; } }; std::set openFileSet; #else std::set openFileSet; #endif std::set openLargeFileSet; std::vector tempFileVector, fileQueue; int documentCount, framePosX, framePosY, frameWidth, frameHeight, notebookStyle, visibilityState, commandOutput; wxPoint stylePosition, aboutPosition; wxSize styleSize; wxString applicationDir, ruleSetPreset, dictionaryPreset, filterPreset, ruleSetDir, filterDir, binDir, templateDir, helpDir, rngDir, htmlDir, pngDir, xpmDir, daisyDir, xpathExpression, lastDtdPublic, lastDtdSystem, lastSchema, lastSchemaNamespace, lastXslStylesheet, lastSchemaNamespaceAux, lastRelaxNGSchema, lastDtdPublicAux, openTabsOnClose, layout, defaultLayout, lastParent, lastGrandparent, commandString, exportStylesheet, exportFolder, lastSymbol; wxString mLastDir; bool globalReplaceAllDocuments, toolbarVisible, protectTags, handleCommandLineFlag, rememberOpenTabs, libxmlNetAccess, deletePageVetoed, saveBom, unlimitedUndo, #ifdef __WXMSW__ useCoolBar, useCoolBarOnStart, #endif restoreLayout, showLocationPane, showInsertChildPane, showInsertSiblingPane, showInsertEntityPane, expandInternalEntities, validateAsYouType, restoreFocusToNotebook, showFullPathOnFrame, findRegex, commandSync, exportQuiet, exportMp3Album, exportSuppressOptional, exportHtml, exportEpub, exportRtf, exportDoc, exportFullDaisy, xercescSSE2Warning; wxBitmap newBitmap, new16Bitmap, openBitmap, open16Bitmap, searchBitmap, saveBitmap, saveGrBitmap, save16Bitmap, printPreviewBitmap, printBitmap, print16Bitmap, undoBitmap, undo16Bitmap, redoBitmap, redo16Bitmap, cutBitmap, copyBitmap, pasteBitmap, findBitmap, spellingBitmap, spellingGrBitmap, spelling16Bitmap, helpBitmap, internetBitmap, internetGrBitmap, hyperlinkBitmap, filtersBitmap, checkWellformedBitmap, checkValidBitmap; wxFileHistory history; wxFindReplaceData findData; XmlCtrlProperties properties, largeFileProperties; // member functions bool panelHasFocus(); bool saveFile ( XmlDoc *doc, wxString& fileName, bool checkLastModified = true ); int getFileType ( const wxString& fileName ); long getNotebookStyleMask(); bool isSpecialFileType ( const wxString& fileName ); wxString getHtmlBuffer(); void encodingMessage(); void save(); void saveAs(); void displaySavedStatus ( int bytes ); void addSafeSeparator ( wxToolBar *toolBar ); void findAgain ( wxString s, int flags ); void updateFileMenu ( bool deleteExisting = true ); void documentOk ( const wxString& status ); void applyEditorProperties ( bool zoomOnly = false ); void xmliseWideTextNode ( wxString& s ); void updatePaths(); void importMSWord ( const wxString& path ); void showTopBars ( bool b ); void modifiedMessage(); void loadBitmaps(); void getRawText ( XmlDoc *doc, std::string& buffer ); void updateToolbar(); std::string getApproximateEncoding ( char *docBuffer, size_t docBufferLen ); bool saveRawUtf8 ( const std::string& fileNameLocal, std::string& bufferUtf8, bool ignoreEncoding = false, bool isXml = true ); void removeUtf8Bom ( std::string& buffer ); wxString getAuxPath ( const wxString& fileName ); wxMenuBar *getMenuBar(); wxToolBar *getToolBar(); void validatePaths(); DECLARE_EVENT_TABLE() }; #endif