summaryrefslogtreecommitdiffstats
path: root/umbrello/umbrello/dialogs/codeeditor.h
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commitbd9e6617827818fd043452c08c606f07b78014a0 (patch)
tree425bb4c3168f9c02f10150f235d2cb998dcc6108 /umbrello/umbrello/dialogs/codeeditor.h
downloadtdesdk-bd9e6617827818fd043452c08c606f07b78014a0.tar.gz
tdesdk-bd9e6617827818fd043452c08c606f07b78014a0.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdesdk@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'umbrello/umbrello/dialogs/codeeditor.h')
-rw-r--r--umbrello/umbrello/dialogs/codeeditor.h191
1 files changed, 191 insertions, 0 deletions
diff --git a/umbrello/umbrello/dialogs/codeeditor.h b/umbrello/umbrello/dialogs/codeeditor.h
new file mode 100644
index 00000000..57f1fb37
--- /dev/null
+++ b/umbrello/umbrello/dialogs/codeeditor.h
@@ -0,0 +1,191 @@
+
+/***************************************************************************
+ codeeditor.h - description
+ -------------------
+ begin : Fri Aug 1 2003
+ copyright : (C) 2003 by Brian Thomas
+ email : brian.thomas@gsfc.nasa.gov
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef CODEEDITOR_H
+#define CODEEDITOR_H
+
+#include <qpopupmenu.h>
+#include <qstring.h>
+#include <qlabel.h>
+#include <qtextedit.h>
+#include "../codeviewerstate.h"
+#include "../textblocklist.h"
+
+class UMLObject;
+
+class CodeViewerDialog;
+class CodeComment;
+class CodeDocument;
+class CodeClassFieldDeclarationBlock;
+class CodeMethodBlock;
+class CodeBlockWithComments;
+class HierarchicalCodeBlock;
+
+class TextBlockInfo;
+class TextBlock;
+class ParaInfo;
+
+class CodeEditor : public QTextEdit
+{
+ Q_OBJECT
+public:
+
+ explicit CodeEditor ( const QString & text, const QString & context = QString(), CodeViewerDialog * parent = 0, const char * name = 0 , CodeDocument * doc = 0);
+ explicit CodeEditor ( CodeViewerDialog * parent, const char* name = 0, CodeDocument * doc = 0);
+ ~CodeEditor ();
+
+ // return code viewer state
+ Settings::CodeViewerState getState( );
+
+protected:
+
+ bool close ( bool alsoDelete );
+
+ // various methods for appending various types of text blocks in the editor.
+ void appendText (TextBlock * tblock);
+ void appendText (HierarchicalCodeBlock * hblock);
+ void appendText (CodeClassFieldDeclarationBlock * db );
+ void appendText (TextBlockList * items);
+ void appendText (CodeMethodBlock * mb);
+ void appendText (CodeComment * comment, TextBlock * parent, UMLObject * umlObj = 0, const QString & compName="");
+ void appendText (CodeBlockWithComments * cb );
+
+ // Rebuild our view of the document. Happens whenever we change
+ // some field/aspect of an underlying UML object used to create
+ // the view.
+ // If connections are right, then the UMLObject will send out the modified()
+ // signal which will trigger a call to re-generate the appropriate code within
+ // the code document. Our burden is to appropriately prepare the tool: we clear
+ // out ALL the textblocks in the QTextEdit widget and then re-show them
+ // after the dialog disappears
+ void rebuildView( int startCursorPos );
+
+ // override the QT event so we can do appropriate things
+ void contentsMouseMoveEvent ( QMouseEvent * e );
+
+ // implemented so we may capture certain key presses, namely backspace
+ // and 'return' events.
+ void keyPressEvent ( QKeyEvent * e );
+
+ // (re) load the parent code document into the editor
+ void loadFromDocument();
+
+ // specialized popup menu for our tool
+ QPopupMenu * createPopupMenu ( const QPoint & pos );
+
+private:
+
+ QString parentDocName;
+ CodeDocument * m_parentDoc;
+ CodeViewerDialog * m_parentDlg;
+
+ int m_lastPara;
+ int m_lastPos;
+
+ bool m_newLinePressed;
+ bool m_backspacePressed;
+ bool m_isHighlighted;
+ bool m_showHiddenBlocks;
+
+ TextBlock * m_textBlockToPaste;
+ TextBlock * m_selectedTextBlock;
+ TextBlock * m_lastTextBlockToBeEdited;
+
+ QMap<TextBlock*, TextBlockInfo*> *m_tbInfoMap;
+ TextBlockList m_textBlockList;
+
+ // main insert routine. Will append if startline is not supplied.
+ void insert (const QString & text, TextBlock * parent, bool isEditable = false,
+ const QColor & fgcolor = QColor("black"), const QColor & bgcolor = QColor("white"),
+ UMLObject * umlobj = 0, const QString & displayName = "", int startLine = -1);
+
+ void editTextBlock(TextBlock * tBlock, int para);
+ void clearText();
+ QLabel * getComponentLabel();
+ bool paraIsNotSingleLine (int para);
+ void expandSelectedParagraph( int where );
+ void contractSelectedParagraph( int where );
+ void updateTextBlockFromText (TextBlock * block);
+
+ void initText ( CodeDocument * doc );
+ void init ( CodeViewerDialog * parentDlg, CodeDocument * parentDoc );
+
+ void changeTextBlockHighlighting(TextBlock * tb, bool selected);
+ bool isParaEditable (int para);
+ bool textBlockIsClickable(UMLObject * obj);
+
+ // return whether or not the passed string is empty or
+ // contains nothing but whitespace
+ static bool StringIsBlank( const QString &str );
+
+public slots:
+
+ void insertParagraph ( const QString & text, int para );
+ void removeParagraph ( int para );
+ void changeHighlighting(int signal);
+ void changeShowHidden (int signal);
+ void slotRedrawText();
+
+protected slots:
+
+ void clicked(int para, int pos );
+ void doubleClicked(int para, int pos );
+ void cursorPositionChanged(int para, int pos );
+ void slotCopyTextBlock ( );
+ void slotCutTextBlock ( );
+ void slotPasteTextBlock ( );
+ void slotChangeSelectedBlockView();
+ void slotChangeSelectedBlockCommentView();
+ void slotInsertCodeBlockAfterSelected();
+ void slotInsertCodeBlockBeforeSelected();
+
+signals:
+
+ /*
+ void sigNewLinePressed ();
+ void sigBackspacePressed ();
+ */
+
+};
+
+class ParaInfo {
+public:
+ int start; // this is a relative offset from the beginning of the tblock
+ int size;
+ QColor fgcolor;
+ QColor bgcolor;
+ bool isEditable;
+
+ ParaInfo () { isEditable = false; }
+};
+
+class TextBlockInfo {
+public:
+ QPtrList<ParaInfo> m_paraList;
+ UMLObject * m_parent;
+ QString displayName;
+ bool isClickable;
+ bool isCodeAccessorMethod;
+
+ TextBlockInfo () { m_parent = 0; isClickable = false; isCodeAccessorMethod = false; }
+ void setParent(UMLObject *p = 0) { m_parent = p; }
+ UMLObject * getParent() { return m_parent; }
+
+};
+
+#endif // CODEEDITOR_H