Skip to content

Commit

Permalink
Implemented indenting and unindenting selection in gui::codeedit::Cod…
Browse files Browse the repository at this point in the history
…eEdit. Fixed 18.
  • Loading branch information
mamontov-cpp committed Jul 25, 2015
1 parent c88b6c5 commit a022127
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 1 deletion.
67 changes: 67 additions & 0 deletions plugins/ifaceed/ifaceed/gui/codeedit/codeedit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <QTextBlock>
#include <QAbstractTextDocumentLayout>
#include <QScrollBar>
#include <QKeyEvent>

#include <algorithm>

Expand Down Expand Up @@ -215,6 +216,72 @@ void gui::codeedit::CodeEdit::resizeEvent(QResizeEvent *e)
m_line_number_area->setGeometry(QRect(cr.left(), cr.top(), lineNumberAreaWidth(), cr.height()));
}

void gui::codeedit::CodeEdit::keyPressEvent(QKeyEvent* e)
{
bool handled = false;
if (e->key() == Qt::Key_Tab)
{
QTextCursor cursor = textCursor();
if (cursor.hasSelection())
{
handled = true;
if (e->modifiers() & Qt::ControlModifier)
{
unindentSelection(cursor);
}
else
{
indentSelection(cursor);
}
}
}
if (!handled)
{
this->gui::textedit::TextEdit::keyPressEvent(e);
}
}

void gui::codeedit::CodeEdit::indentSelection(QTextCursor& cursor)
{
int startpos = cursor.selectionStart();
QString text = cursor.selectedText();
QStringList list = text.split(QChar::ParagraphSeparator);
for(size_t i = 0; i < list.size(); i++)
{
if (list[i].size() != 0)
{
list[i] = " " + list[i];
}
}
text = list.join(QChar::ParagraphSeparator);
cursor.insertText(text);
cursor.setPosition(startpos),
cursor.setPosition(startpos + text.length(), QTextCursor::KeepAnchor);
this->setTextCursor(cursor);
}

void gui::codeedit::CodeEdit::unindentSelection(QTextCursor& cursor)
{
int startpos = cursor.selectionStart();
QString text = cursor.selectedText();
QStringList list = text.split(QChar::ParagraphSeparator);
for(size_t i = 0; i < list.size(); i++)
{
if (list[i].startsWith("\t"))
{
list[i] = list[i].mid(1);
}
if (list[i].startsWith(" "))
{
list[i] = list[i].mid(4);
}
}
text = list.join(QChar::ParagraphSeparator);
cursor.insertText(text);
cursor.setPosition(startpos),
cursor.setPosition(startpos + text.length(), QTextCursor::KeepAnchor);
this->setTextCursor(cursor);
}

QString gui::codeedit::CodeEdit::textUnderCursor() const
{
Expand Down
14 changes: 13 additions & 1 deletion plugins/ifaceed/ifaceed/gui/codeedit/codeedit.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,19 @@ Q_OBJECT
\param[in] e event
*/
void resizeEvent(QResizeEvent* e);
/*! Returns text under cursor
/*! Handles key press event, indenting or unindenting selection if needed
\param[in] e event
*/
virtual void keyPressEvent(QKeyEvent* e);
/*! Indents selection, using cursor
\param[in] cursor a cursor
*/
void indentSelection(QTextCursor& cursor);
/*! Unindents selection, using cursor
\param[in] cursor a cursor
*/
void unindentSelection(QTextCursor& cursor);
/*! Returns text under cursor
\return text under cursor
*/
virtual QString textUnderCursor() const;
Expand Down
2 changes: 2 additions & 0 deletions plugins/ifaceed/ifaceed/ifaceed.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,7 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseQt4|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Template|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='UnitTests|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugQt4|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_color.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='GUITests|Win32'">true</ExcludedFromBuild>
Expand Down Expand Up @@ -622,6 +623,7 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='GUITests|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Template|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='UnitTests|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseQt4|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_color.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
Expand Down
1 change: 1 addition & 0 deletions plugins/ifaceed/ifaceed/mainpanel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
#include <freetype/font.h>

#include <QFileDialog>
#include <QHeaderView>
#include <QStringListModel>
#include <QLinkedList>
#include <QSet>
Expand Down

0 comments on commit a022127

Please sign in to comment.