mirror of
https://github.com/reactos/CMake.git
synced 2025-05-14 02:25:53 +00:00

This should avoid an exponential slowdown in the display time for projects with lots of output. This is still slower than cmake due to the ncurses drawing, but it should now be O(L) in total and not O(L^2) wrt to output length. Fixes: #20535
64 lines
1.6 KiB
C++
64 lines
1.6 KiB
C++
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
file Copyright.txt or https://cmake.org/licensing for details. */
|
|
#ifndef cmCursesLongMessageForm_h
|
|
#define cmCursesLongMessageForm_h
|
|
|
|
#include "cmConfigure.h" // IWYU pragma: keep
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "cmCursesForm.h"
|
|
#include "cmCursesStandardIncludes.h"
|
|
|
|
class cmCursesLongMessageForm : public cmCursesForm
|
|
{
|
|
public:
|
|
enum class ScrollBehavior
|
|
{
|
|
NoScroll,
|
|
ScrollDown
|
|
};
|
|
|
|
cmCursesLongMessageForm(std::vector<std::string> const& messages,
|
|
const char* title, ScrollBehavior scrollBehavior);
|
|
~cmCursesLongMessageForm() override;
|
|
|
|
cmCursesLongMessageForm(cmCursesLongMessageForm const&) = delete;
|
|
cmCursesLongMessageForm& operator=(cmCursesLongMessageForm const&) = delete;
|
|
|
|
void UpdateContent(std::string const& output, std::string const& title);
|
|
|
|
// Description:
|
|
// Handle user input.
|
|
void HandleInput() override;
|
|
|
|
// Description:
|
|
// Display form. Use a window of size width x height, starting
|
|
// at top, left.
|
|
void Render(int left, int top, int width, int height) override;
|
|
|
|
// Description:
|
|
// This method should normally called only by the form.
|
|
// The only exception is during a resize.
|
|
void PrintKeys();
|
|
|
|
// Description:
|
|
// This method should normally called only by the form.
|
|
// The only exception is during a resize.
|
|
void UpdateStatusBar() override;
|
|
|
|
protected:
|
|
static constexpr int MAX_CONTENT_SIZE = 60000;
|
|
|
|
void DrawMessage(const char* msg) const;
|
|
|
|
std::string Messages;
|
|
std::string Title;
|
|
ScrollBehavior Scrolling;
|
|
|
|
FIELD* Fields[2];
|
|
};
|
|
|
|
#endif // cmCursesLongMessageForm_h
|