#ifndef XML_CTRL_H #define XML_CTRL_H #define DEFAULT_XML_DECLARATION L"\n" #define DEFAULT_XML_DECLARATION_UTF8 "\n" #include #include #include #include #include struct XmlCtrlProperties { bool completion; bool fold; bool number; bool currentLine; bool whitespaceVisible; bool wrap; bool indentLines; bool protectHiddenElements; bool toggleLineBackground; bool insertCloseTag; bool deleteWholeTag; bool validateAsYouType; bool highlightSyntax; int zoom, colorScheme; wxString font; }; enum VisibilityStates { SHOW_TAGS, HIDE_ATTRIBUTES, HIDE_TAGS }; enum ColorSchemes { COLOR_SCHEME_DEFAULT, COLOR_SCHEME_DEFAULT_BACKGROUND, COLOR_SCHEME_REDUCED_GLARE, COLOR_SCHEME_REDUCED_GLARE_BACKGROUND, COLOR_SCHEME_NONE }; enum TagTypes { TAG_TYPE_OPEN, TAG_TYPE_CLOSE, TAG_TYPE_EMPTY, TAG_TYPE_OTHER, TAG_TYPE_ERROR }; enum BackgroundStates { BACKGROUND_STATE_NORMAL, BACKGROUND_STATE_LIGHT }; enum XmlFileTypes { FILE_TYPE_XML, FILE_TYPE_DTD, FILE_TYPE_CSS, FILE_TYPE_PHP, FILE_TYPE_RNC, FILE_TYPE_BINARY }; class XmlCtrl: public wxStyledTextCtrl { public: XmlCtrl ( wxWindow *parent, XmlCtrlProperties propertiesParameter, bool *protectTagsParameter, int visibilityStateParameter = SHOW_TAGS, int typeParameter = FILE_TYPE_XML, wxWindowID id = wxID_ANY, //const std::string& buffer = DEFAULT_XML_DECLARATION_UTF8, const char *buffer = NULL, size_t bufferLen = 0, const std::string& catalogPath = "", const std::string& basePath = "", const std::string& auxPath = "", const wxPoint &position = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0 ); ~XmlCtrl() { attributeMap.clear(); elementMap.clear(); entitySet.clear(); } int getType(); int getParentCloseAngleBracket ( int pos, int range = USHRT_MAX * 4 ); void applyProperties ( XmlCtrlProperties propertiesParameter, bool zoomOnly = false ); void applyVisibilityState ( int state = SHOW_TAGS ); void updatePromptMaps(); void updatePromptMaps ( const char *buffer, size_t bufferLen ); void adjustCursor(); void adjustSelection(); void foldAll(); void unfoldAll(); void toggleFold(); bool insertChild ( const wxString& child ); bool insertSibling ( const wxString& sibling, const wxString& parent ); bool insertEntity ( const wxString& entity ); bool getDtdFound(); void setErrorIndicator ( int line, int column ); void clearErrorIndicators ( int maxLine = 0 ); wxString getParent(); wxString getLastElementName ( int pos ); std::set getChildren ( const wxString& parent ); std::set getEntitySet(); bool canInsertAt ( int pos ); int getTagStartPos ( int pos ); void toggleLineBackground(); bool shallowValidate ( int maxLine = 0, bool segmentOnly = false ); bool shallowValidate ( const char *buffer, size_t bufferLen, int startLine = 0, int maxLine = 0, int columnOffset = 0, bool segmentOnly = false ); std::string myGetTextRaw(); // alternative to faulty stc implementation bool getValidationRequired(); void setValidationRequired ( bool b ); private: int type; bool *protectTags; bool validationRequired, dtdFound; int visibilityState; int controlState; int currentMaxLine; int lineBackgroundState; wxColour baseBackground, alternateBackground; std::map > > attributeMap; std::map > requiredAttributeMap; std::map > elementMap; std::set entitySet; std::string catalogPath, basePath, auxPath; XmlCtrlProperties properties; wxString getLastAttributeName ( int pos ); int getAttributeStartPos ( int pos ); int getAttributeSectionEndPos ( int pos, int range = USHRT_MAX ); int getTagType ( int pos ); int getLexerStyleAt ( int pos ); bool isCloseTag ( int pos ); bool canMoveLeftAt ( int pos ); bool canMoveRightAt ( int pos ); wxString getOpenTag ( const wxString& element ); void handleOpenAngleBracket ( wxKeyEvent& event ); void handleCloseAngleBracket ( wxKeyEvent& event ); void handleEquals ( wxKeyEvent& event ); void handleSpace ( wxKeyEvent& event ); void handleAmpersand ( wxKeyEvent& event ); void handleForwardSlash ( wxKeyEvent& event ); void handleBackspace ( wxKeyEvent& event ); void handleDelete ( wxKeyEvent& event ); void OnMarginClick ( wxStyledTextEvent& event ); void OnChar ( wxKeyEvent& event ); void OnIdle ( wxIdleEvent& event ); void OnKeyPressed ( wxKeyEvent& event ); void OnMouseLeftDown ( wxMouseEvent& event ); void OnMouseLeftUp ( wxMouseEvent& event ); void OnMouseRightUp ( wxMouseEvent& event ); void OnMiddleDown ( wxMouseEvent& event ); void insertNewLine(); void adjustNoColumnWidth(); void adjustPosRight(); void adjustPosLeft(); void setColorScheme ( int scheme ); void expandFoldsToLevel ( int level, bool expand ); void protectHeadLine(); DECLARE_NO_COPY_CLASS ( XmlCtrl ) DECLARE_EVENT_TABLE() }; #endif