1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-06-23 21:00:46 +08:00
CMake/Source/CursesDialog/cmCursesLongMessageForm.h
Sylvain Joubert 88cfef0821 ccmake: redirect stdout/stderr to the displayed logs
Use cmSystemTools to report some messages.
These should now be caught and displayed properly,
both in ccmake and cmake-gui

Avoid log display flickering during processing
- Don't clear the screen each time the long message form is rendered.
  It always renders the whole screen again so clearing it only causes
  flickering.
- Add scroll down capabilities to the long message form so that it can
  draw itself directly in the correct state. This removes the need to
  programatically scroll down just after that also caused flickering.

Fixes #19882
Fixes #13288
2019-11-16 08:27:32 +01:00

58 lines
1.5 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;
// 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:
std::string Messages;
std::string Title;
ScrollBehavior Scrolling;
FIELD* Fields[2];
};
#endif // cmCursesLongMessageForm_h