diff options
| author | André Nusser <andre.nusser@googlemail.com> | 2017-05-05 22:35:47 +0200 | 
|---|---|---|
| committer | André Nusser <andre.nusser@googlemail.com> | 2017-05-05 22:35:47 +0200 | 
| commit | 72e6e0401677740a286ab937194c61db1448e4c9 (patch) | |
| tree | c39de5f7b2fbfbcf02bb4c9c514fefde4cd2a07b /plugingui | |
| parent | 33639dddd8b1b01739994b7427d70ffc676cb22d (diff) | |
Refactor TextEdit widget.
Diffstat (limited to 'plugingui')
| -rw-r--r-- | plugingui/drumkitframecontent.cc | 8 | ||||
| -rw-r--r-- | plugingui/filebrowser.cc | 4 | ||||
| -rw-r--r-- | plugingui/lineedit.cc | 2 | ||||
| -rw-r--r-- | plugingui/lineedit.h | 2 | ||||
| -rw-r--r-- | plugingui/textedit.cc | 131 | ||||
| -rw-r--r-- | plugingui/textedit.h | 38 | 
6 files changed, 84 insertions, 101 deletions
| diff --git a/plugingui/drumkitframecontent.cc b/plugingui/drumkitframecontent.cc index 3752cc3..f90f346 100644 --- a/plugingui/drumkitframecontent.cc +++ b/plugingui/drumkitframecontent.cc @@ -147,7 +147,7 @@ void DrumkitframeContent::resize(std::size_t width, std::size_t height)  void DrumkitframeContent::kitBrowseClick()  { -	std::string path = drumkit_file.getLineEdit().text(); +	std::string path = drumkit_file.getLineEdit().getText();  	if(path == "")  	{  		path = config.lastkit; @@ -155,7 +155,7 @@ void DrumkitframeContent::kitBrowseClick()  	if(path == "")  	{ -		path = midimap_file.getLineEdit().text(); +		path = midimap_file.getLineEdit().getText();  	}  	file_browser.setPath(path); @@ -166,7 +166,7 @@ void DrumkitframeContent::kitBrowseClick()  void DrumkitframeContent::midimapBrowseClick()  { -	std::string path = midimap_file.getLineEdit().text(); +	std::string path = midimap_file.getLineEdit().getText();  	if(path == "")  	{  		path = config.lastmidimap; @@ -174,7 +174,7 @@ void DrumkitframeContent::midimapBrowseClick()  	if(path == "")  	{ -		path = drumkit_file.getLineEdit().text(); +		path = drumkit_file.getLineEdit().getText();  	}  	file_browser.setPath(path); diff --git a/plugingui/filebrowser.cc b/plugingui/filebrowser.cc index 76a2744..62f7775 100644 --- a/plugingui/filebrowser.cc +++ b/plugingui/filebrowser.cc @@ -158,7 +158,7 @@ void FileBrowser::handleKeyEvent()  {  	listbox.clearSelectedValue(); -	std::string value = lineedit.text(); +	std::string value = lineedit.getText();  	if((value.size() > 1) && (value[0] == '@'))  	{  		DEBUG(filebrowser, "Selecting ref-file '%s'\n", value.c_str()); @@ -166,7 +166,7 @@ void FileBrowser::handleKeyEvent()  		return;  	} -	dir.setPath(lineedit.text()); +	dir.setPath(lineedit.getText());  	changeDir();  } diff --git a/plugingui/lineedit.cc b/plugingui/lineedit.cc index d2e9dea..96bf56f 100644 --- a/plugingui/lineedit.cc +++ b/plugingui/lineedit.cc @@ -65,7 +65,7 @@ void LineEdit::setText(const std::string& text)  	textChanged();  } -std::string LineEdit::text() +std::string LineEdit::getText()  {  	return _text;  } diff --git a/plugingui/lineedit.h b/plugingui/lineedit.h index dd37776..86ad986 100644 --- a/plugingui/lineedit.h +++ b/plugingui/lineedit.h @@ -45,7 +45,7 @@ public:  	bool isFocusable() override { return true; } -	std::string text(); +	std::string getText();  	void setText(const std::string& text);  	void setReadOnly(bool readonly); diff --git a/plugingui/textedit.cc b/plugingui/textedit.cc index 4de6e52..f57a1d4 100644 --- a/plugingui/textedit.cc +++ b/plugingui/textedit.cc @@ -26,14 +26,7 @@   */  #include "textedit.h" -#include "window.h" - -#include <assert.h> -#include <hugin.hpp> -#include <list> -#include <stdio.h> - -#define BORDER 10 +#include "painter.h"  namespace GUI  { @@ -42,7 +35,7 @@ TextEdit::TextEdit(Widget* parent) : Widget(parent), scroll(this)  {  	setReadOnly(true); -	scroll.move(width() - 23, 1); +	scroll.move(width() - 2*x_border - 3, y_border - 1);  	scroll.resize(16, 100);  	CONNECT(&scroll, valueChangeNotifier, this, &TextEdit::scrolled);  } @@ -56,8 +49,8 @@ void TextEdit::resize(std::size_t width, std::size_t height)  	Widget::resize(width, height);  	needs_preprocessing = true; -	scroll.resize(scroll.width(), height - 14); -	scroll.move(width - 23, 7); +	scroll.move(width - 2*x_border - 3, y_border - 1); +	scroll.resize(scroll.width(), height - 2*(y_border - 1));  }  void TextEdit::setReadOnly(bool readonly) @@ -72,75 +65,71 @@ bool TextEdit::readOnly()  void TextEdit::setText(const std::string& text)  { -	_text = text; +	this->text = text;  	needs_preprocessing = true;  	redraw();  	textChangedNotifier();  } -std::string TextEdit::text() +std::string TextEdit::getText()  { -	return _text; +	return text;  }  void TextEdit::preprocessText()  { -	preprocessedtext.clear(); -	std::string text = _text; +	std::vector<std::string> lines; + +	preprocessed_text.clear(); +	std::string text = this->text; -	{ // Handle tab characters -		for(size_t i = 0; i < text.length(); ++i) +	// Handle tab characters +	for(std::size_t i = 0; i < text.length(); ++i) +	{ +		char ch = text.at(i); +		if(ch == '\t')  		{ -			char ch = text.at(i); -			if(ch == '\t') -			{ -				text.erase(i, 1); -				text.insert(i, 4, ' '); -			} +			text.erase(i, 1); +			text.insert(i, 4, ' ');  		}  	} -	{ // Handle "\r" -		for(size_t i = 0; i < text.length(); ++i) +	// Handle "\r" +	for(std::size_t i = 0; i < text.length(); ++i) +	{ +		char ch = text.at(i); +		if(ch == '\r')  		{ -			char ch = text.at(i); -			if(ch == '\r') -			{ -				text.erase(i, 1); -			} +			text.erase(i, 1);  		}  	} -	std::list<std::string> lines; -	{ // Handle new line characters -		size_t pos = 0; -		do -		{ -			pos = text.find("\n"); -			lines.push_back(text.substr(0, pos)); -			text = text.substr(pos + 1); -		} while(pos != std::string::npos); -	} +	// Handle new line characters +	std::size_t pos = 0; +	do +	{ +		pos = text.find("\n"); +		lines.push_back(text.substr(0, pos)); +		text = text.substr(pos + 1); +	} while(pos != std::string::npos); -	{ // Wrap long lines -		std::list<std::string>::iterator it; -		for(it = lines.begin(); it != lines.end(); ++it) -		{ -			std::string line = *it; +	// Wrap long lines +	for(auto it = lines.begin(); it != lines.end(); ++it) +	{ +		auto line = *it; -			for(size_t i = 0; i < line.length(); ++i) +		for(std::size_t i = 0; i < line.length(); ++i) +		{ +			auto linewidth = font.textWidth(line.substr(0, i)); +			if(linewidth >= width() - 2*x_border - 10 - scroll.width())  			{ -				size_t linewidth = font.textWidth(line.substr(0, i)); -				if(linewidth >= width() - BORDER - 20 - scroll.width()) -				{ -					preprocessedtext.push_back(line.substr(0, i)); -					line = line.substr(i); -					i = 0; -				} +				preprocessed_text.push_back(line.substr(0, i)); +				line = line.substr(i); +				i = 0;  			} -			preprocessedtext.push_back(line);  		} +		preprocessed_text.push_back(line);  	}  } @@ -155,44 +144,30 @@ void TextEdit::repaintEvent(RepaintEvent* repaintEvent)  	// update values of scroll bar  	scroll.setRange(height() / font.textHeight()); -	scroll.setMaximum(preprocessedtext.size()); +	scroll.setMaximum(preprocessed_text.size()); -	int w = width(); -	int h = height(); -	if((w == 0) || (h == 0)) +	if((width() == 0) || (height() == 0))  	{  		return;  	} -	box.setSize(w, h); +	box.setSize(width(), height());  	p.drawImage(0, 0, box); -  	p.setColour(Colour(183.0 / 255.0, 219.0 / 255.0, 255.0 / 255.0, 1)); -	int skip = scroll.value(); - -	int ypos = font.textHeight() + 5 + 1 + 1 + 1; -	std::list<std::string>::iterator it; -	it = preprocessedtext.begin(); - -	int c = 0; -	for(; c < skip; c++) -	{ -		++it; -	} +	int ypos = font.textHeight() + y_border; -	c = 0; -	for(; it != preprocessedtext.end(); it++) +	auto scroll_value = scroll.value(); +	for(int i = 0; i < preprocessed_text.size() - scroll_value; ++i)  	{ -		if((c * font.textHeight()) >= (height() - 8 - font.textHeight())) +		if(i * font.textHeight() >= (height() - y_border - font.textHeight()))  		{  			break;  		} -		std::string line = *it; -		p.drawText(BORDER - 4 + 3, ypos, font, line); +		auto const& line = preprocessed_text[scroll_value + i]; +		p.drawText(x_border, ypos, font, line);  		ypos += font.textHeight(); -		++c;  	}  } diff --git a/plugingui/textedit.h b/plugingui/textedit.h index 5959ae9..6ce59b6 100644 --- a/plugingui/textedit.h +++ b/plugingui/textedit.h @@ -27,27 +27,32 @@  #pragma once  #include <string> -#include <list> +#include <vector> -#include "widget.h"  #include "font.h" -#include "painter.h" +#include "notifier.h"  #include "scrollbar.h"  #include "texturedbox.h" -#include "notifier.h" +#include "widget.h" -namespace GUI { +namespace GUI +{ -class TextEdit : public Widget { +class TextEdit +	: public Widget +{  public: -	TextEdit(Widget *parent); +	TextEdit(Widget* parent);  	virtual ~TextEdit();  	// From Widget -	bool isFocusable() override { return true; } +	bool isFocusable() override +	{ +		return true; +	}  	void resize(std::size_t width, std::size_t height) override; -	std::string text(); +	std::string getText();  	void setText(const std::string& text);  	void setReadOnly(bool readonly); @@ -65,20 +70,23 @@ protected:  private:  	void scrolled(int value); -	TexturedBox box{getImageCache(), ":resources/widget.png", -			0, 0, // atlas offset (x, y) -			7, 1, 7, // dx1, dx2, dx3 -			7, 63, 7}; // dy1, dy2, dy3 +	TexturedBox box{getImageCache(), ":resources/widget.png", 0, +	    0,         // atlas offset (x, y) +	    7, 1, 7,   // dx1, dx2, dx3 +	    7, 63, 7}; // dy1, dy2, dy3 +	 +	static constexpr std::size_t x_border{10}; +	static constexpr std::size_t y_border{8};  	ScrollBar scroll;  	Font font; -	std::string _text; +	std::string text;  	bool readonly{true};  	bool needs_preprocessing{false}; -	std::list< std::string > preprocessedtext; +	std::vector<std::string> preprocessed_text;  };  } // GUI:: | 
