Initial commit
This commit is contained in:
		| @@ -0,0 +1,7 @@ | ||||
| #include <gui/common/FrontendApplication.hpp> | ||||
|  | ||||
| FrontendApplication::FrontendApplication(Model& m, FrontendHeap& heap) | ||||
|     : FrontendApplicationBase(m, heap) | ||||
| { | ||||
|  | ||||
| } | ||||
							
								
								
									
										98
									
								
								ide-touchgfx-gen/TouchGFX/gui/src/model/Model.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								ide-touchgfx-gen/TouchGFX/gui/src/model/Model.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,98 @@ | ||||
| #include "config/touchgfx-config.h" | ||||
| #include <gui/model/Model.hpp> | ||||
| #include <gui/model/ModelListener.hpp> | ||||
|  | ||||
| Model::Model() : | ||||
|     modelListener(0), | ||||
|     logTextChanged_(false) | ||||
| { | ||||
|  | ||||
| } | ||||
|  | ||||
| void Model::initialize( | ||||
| #if defined(TOUCHGFX_ENABLED) && (TOUCHGFX_ENABLED != 0)            // Used to get a compilable project for the students! | ||||
|                        ButtonEventsHandler & buttonEventsHandler | ||||
| #endif // TOUCHGFX_ENABLED | ||||
|                       ) | ||||
| { | ||||
| #if defined(TOUCHGFX_ENABLED) && (TOUCHGFX_ENABLED != 0) | ||||
|     // Subscribe to button events | ||||
|     bool success = buttonEventsHandler.subscribe(this); | ||||
|     assert(success); | ||||
| #endif // TOUCHGFX_ENABLED | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * The tick method is called regularly by the TouchGFX task | ||||
|  */ | ||||
| void Model::tick() | ||||
| { | ||||
|     if (logTextChanged_) | ||||
|     { | ||||
|         logTextChanged_ = false; | ||||
|         if (logMessages_.size() > 0) | ||||
|         { | ||||
|             logTextTotal_.clear(); | ||||
|  | ||||
|             // Add all log messages to logTextTotal_ | ||||
|             // New messages are at the beginning of the list, but | ||||
|             // need to be at the end in logTextTotal_ | ||||
|             for (std::string str : logMessages_) | ||||
|             { | ||||
|                 logTextTotal_.insert(0, str); | ||||
|             } | ||||
|  | ||||
|             modelListener->notifyLogTextChanged(logTextTotal_); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             modelListener->notifyClearLogMessages(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| void Model::addLogMessage(const std::string & logMessage) | ||||
| { | ||||
|     logMessages_.push_front(logMessage); | ||||
|  | ||||
|     // Remove an old message if list is too big | ||||
|     if (logMessages_.size() > MAX_MESSAGES) | ||||
|     { | ||||
|         logMessages_.pop_back(); | ||||
|     } | ||||
|  | ||||
|     // Tell UI task that logText did change | ||||
|     logTextChanged_ = true; | ||||
| } | ||||
|  | ||||
| void Model::clearLogMessages() | ||||
| { | ||||
|     logMessages_.clear(); | ||||
|     logTextTotal_.clear(); | ||||
|  | ||||
|     // Tell UI task that logText did change | ||||
|     logTextChanged_ = true; | ||||
| } | ||||
|  | ||||
| #if defined(TOUCHGFX_ENABLED) && (TOUCHGFX_ENABLED != 0) | ||||
| void Model::onButtonShortPressed(ButtonIndex buttonIndex) | ||||
| { | ||||
|     std::string logMessage("Button "); | ||||
|  | ||||
|     logMessage += std::to_string(buttonIndex); | ||||
|     logMessage += " short pressed\n"; | ||||
|  | ||||
|     addLogMessage(logMessage); | ||||
| } | ||||
|  | ||||
| void Model::onButtonLongPressed(ButtonIndex buttonIndex) | ||||
| { | ||||
|     std::string logMessage("Button "); | ||||
|  | ||||
|     logMessage += std::to_string(buttonIndex); | ||||
|     logMessage += " long pressed\n"; | ||||
|  | ||||
|     addLogMessage(logMessage); | ||||
| } | ||||
| #endif // TOUCHGFX_ENABLED | ||||
| @@ -0,0 +1,38 @@ | ||||
| #include <gui/terminal_screen/TerminalView.hpp> | ||||
| #include <gui/terminal_screen/TerminalPresenter.hpp> | ||||
|  | ||||
| TerminalPresenter::TerminalPresenter(TerminalView& v) | ||||
|     : view(v) | ||||
| { | ||||
|  | ||||
| } | ||||
|  | ||||
| void TerminalPresenter::activate() | ||||
| { | ||||
|  | ||||
| } | ||||
|  | ||||
| void TerminalPresenter::deactivate() | ||||
| { | ||||
|  | ||||
| } | ||||
|  | ||||
| void TerminalPresenter::clearLogMessages() | ||||
| { | ||||
|     model->clearLogMessages(); | ||||
| } | ||||
|  | ||||
| void TerminalPresenter::onButtonClearLogTextClicked() | ||||
| { | ||||
|     clearLogMessages(); | ||||
| } | ||||
|  | ||||
| void TerminalPresenter::notifyLogTextChanged(const std::string & logText) | ||||
| { | ||||
|     view.updateLogText(logText); | ||||
| } | ||||
|  | ||||
| void TerminalPresenter::notifyClearLogMessages() | ||||
| { | ||||
|     view.clearLogText(); | ||||
| } | ||||
| @@ -0,0 +1,82 @@ | ||||
| #include <gui/terminal_screen/TerminalView.hpp> | ||||
|  | ||||
| TerminalView::TerminalView(): | ||||
|     autoScrollText_(true) | ||||
| { | ||||
|  | ||||
| } | ||||
|  | ||||
| void TerminalView::setupScreen() | ||||
| { | ||||
|     TerminalViewBase::setupScreen(); | ||||
| } | ||||
|  | ||||
| void TerminalView::tearDownScreen() | ||||
| { | ||||
|     TerminalViewBase::tearDownScreen(); | ||||
| } | ||||
|  | ||||
| void TerminalView::onButtonClearLogTextClicked() | ||||
| { | ||||
|     // Forward event to presenter | ||||
|     presenter->onButtonClearLogTextClicked(); | ||||
| } | ||||
|  | ||||
| void TerminalView::updateLogText(const std::string & str) | ||||
| { | ||||
|     Unicode::fromUTF8((const unsigned char *)str.c_str(), logText_Buffer, LOGTEXT__SIZE); | ||||
|     logText_.resizeToCurrentTextWithAlignment();   // Update height of text area | ||||
|  | ||||
|     // Check if we always need to show the end of the logs (most recent logs) | ||||
|     if (autoScrollText_) | ||||
|     { | ||||
|         auto scrollHeight = scrollableTextArea_.getHeight(); | ||||
|         auto textHeight = logText_.getTextHeight(); | ||||
|  | ||||
|         if (logText_.getRotation() == TEXT_ROTATE_0) | ||||
|         { | ||||
|             if (textHeight > scrollHeight) | ||||
|             { | ||||
|                 logText_.startMoveAnimation(logText_.getX(),                    // X value to scroll to | ||||
|                                             -(textHeight - scrollHeight),       // Y value to scroll to | ||||
|                                             2);                                 // Animation duration in ticks | ||||
|             } | ||||
|         } | ||||
|         else if (logText_.getRotation() == TEXT_ROTATE_180) | ||||
|         { | ||||
|             if (textHeight > scrollHeight) | ||||
|             { | ||||
|                 // Scroll to bottom is scrolling to y == 0 | ||||
|                 logText_.startMoveAnimation(logText_.getX(), 0, 2); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     logText_.invalidate(); | ||||
| } | ||||
|  | ||||
| void TerminalView::clearLogText() | ||||
| { | ||||
|     logText_Buffer[0] = '\0'; | ||||
|  | ||||
|     if (logText_.getRotation() == TEXT_ROTATE_0) | ||||
|     { | ||||
|         logText_.resizeHeightToCurrentText(); | ||||
|  | ||||
|         logText_.startMoveAnimation(logText_.getX(),            // X value to scroll to | ||||
|                                     0,                          // Y value to scroll to | ||||
|                                     2);                         // Animation duration in ticks | ||||
|     } | ||||
|     else if (logText_.getRotation() == TEXT_ROTATE_180) | ||||
|     { | ||||
|         logText_.resizeToCurrentTextWithAlignment(); | ||||
|  | ||||
|         logText_.startMoveAnimation(logText_.getX(),                                            // X value to scroll to | ||||
|                                     scrollableTextArea_.getHeight() - logText_.getHeight(),     // Y value to scroll to (in respect with rotated text) | ||||
|                                     2);                                                         // Animation duration in ticks | ||||
|     } | ||||
|  | ||||
|     logText_.invalidate(); | ||||
|     scrollableTextArea_.invalidate(); | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user