xml-copy-editor-code/src/xmlcopyeditor.h

535 lines
15 KiB
C++
Executable File

/*
* 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; version 2 of the License.
*
* 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 NEWFINDREPLACE 1
#include <wx/wx.h>
#include <wx/fdrepdlg.h>
#include <wx/filename.h>
#include <wx/wxhtml.h>
#include <wx/image.h>
#include <wx/imagpng.h>
#include <wx/utils.h>
#include <wx/docview.h>
#include <wx/propdlg.h>
#include <wx/generic/propdlg.h>
#include <wx/sysopt.h>
#include <wx/datetime.h>
#include <wx/log.h>
#include <wx/clipbrd.h>
#include <wx/strconv.h>
#include <wx/html/helpctrl.h>
#include <wx/snglinst.h>
#include <wx/ipc.h>
#include <wx/intl.h>
#include <wx/fileconf.h>
#include <utility>
#include <string>
#include <set>
#include <map>
#include <memory>
#include <vector>
#include <stdexcept>
#include "xmldoc.h"
#include "myhtmlpane.h"
#include "xmlencodinghandler.h"
#include "myipc.h"
#include <wx/aui/framemanager.h>
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_HIDE_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_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_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 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 wxArrayString &getAvailableTranslations (
const wxArrayString *catalogLookupPathPrefixes = NULL,
const wxString *catelog = NULL );
protected:
wxLocale myLocale;
private:
wxSingleInstanceChecker *checker;
MyServer *server;
MyClient *client;
MyClientConnection *connection;
bool singleInstanceCheck;
int lang;
std::auto_ptr<wxFileConfig> 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 OnClosePane ( 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 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 OnUpdateClosePane ( 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 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 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 setStrictScrolling ( bool b );
void validateRelaxNG (
XmlDoc *doc,
const wxString& schemaName,
wxString& fileName );
void closePane();
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 std::string& path = "", 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 ( wxString& fileName, bool largeFile = false );
bool isOpen ( const wxString& fileName );
bool activateTab ( const wxString& fileName );
void reloadTab();
void addToFileQueue ( wxString& fileName );
private:
wxAuiManager manager;
wxFileConfig *config; // owned by MyApp
wxLocale& myLocale;
bool singleInstanceCheck;
int lang, lastPos;
#ifdef __WXDEBUG__
wxLogStderr logTarget;
#else
wxLogNull logTarget;
#endif
std::auto_ptr<wxHtmlEasyPrinting> htmlPrinting;
std::auto_ptr<wxFindReplaceDialog> findDialog;
std::auto_ptr<wxHtmlHelpController> 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<wxMenu *> menuVector;
MyNotebook *mainBook;
MyHtmlPane *htmlReport;
std::string catalogPath, catalogUtilityPath, xslDtdPath, rssDtdPath, lzxDtdPath, xtmDtdPath,
xliffDtdPath, aspellDataPath, aspellDictPath;
std::pair<int, int> controlCoordinates;
std::map<std::string, std::map<std::string, std::set<std::string> > >
promptMap;
std::map<int, wxString> validationPresetMap;
std::set<wxString> openFileSet;
std::set<wxString> openLargeFileSet;
std::vector<wxString> 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,
daisyDir,
xpathExpression,
lastDtdPublic,
lastDtdSystem,
lastSchema,
lastSchemaNamespace,
lastXslStylesheet,
lastSchemaNamespaceAux,
lastRelaxNGSchema,
lastDtdPublicAux,
openTabsOnClose,
layout,
defaultLayout,
lastParent,
lastGrandparent,
commandString,
exportStylesheet,
exportFolder,
lastSymbol;
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;
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 openRememberedTabs();
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 );
std::string getAuxPath ( const std::string& fileName );
wxMenuBar *getMenuBar();
wxToolBar *getToolBar();
DECLARE_EVENT_TABLE()
};
#endif