| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| file Copyright.txt or https://cmake.org/licensing for details. */ | |
| #pragma once | |
| #include "cmConfigure.h" // IWYU pragma: keep | |
| #include <cstddef> | |
| #include <memory> | |
| #include <string> | |
| #include <vector> | |
| #include <cm/optional> | |
| #include "cmCursesCacheEntryComposite.h" | |
| #include "cmCursesForm.h" | |
| #include "cmCursesStandardIncludes.h" | |
| #include "cmStateTypes.h" | |
| class cmake; | |
| class cmCursesLongMessageForm; | |
| /** \class cmCursesMainForm | |
| * \brief The main page of ccmake | |
| * | |
| * cmCursesMainForm is the main page of ccmake. | |
| */ | |
| class cmCursesMainForm : public cmCursesForm | |
| { | |
| public: | |
| cmCursesMainForm(std::vector<std::string> args, int initwidth); | |
| ~cmCursesMainForm() override; | |
| cmCursesMainForm(cmCursesMainForm const&) = delete; | |
| cmCursesMainForm& operator=(cmCursesMainForm const&) = delete; | |
| /** | |
| * Set the widgets which represent the cache entries. | |
| */ | |
| void InitializeUI(); | |
| /** | |
| * Handle user input. | |
| */ | |
| void HandleInput() override; | |
| /** | |
| * 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; | |
| /** | |
| * Returns true if an entry with the given key is in the | |
| * list of current composites. | |
| */ | |
| bool LookForCacheEntry(const std::string& key); | |
| enum | |
| { | |
| MIN_WIDTH = 65, | |
| MIN_HEIGHT = 6, | |
| IDEAL_WIDTH = 80, | |
| MAX_WIDTH = 512 | |
| }; | |
| /** | |
| * This method should normally be called only by the form. The only | |
| * exception is during a resize. The optional argument specifies the | |
| * string to be displayed in the status bar. | |
| */ | |
| void UpdateStatusBar() override { this->UpdateStatusBar(cm::nullopt); } | |
| void UpdateStatusBar(cm::optional<std::string> message); | |
| /** | |
| * Display current commands and their keys on the toolbar. This | |
| * method should normally called only by the form. The only | |
| * exception is during a resize. If the optional argument process is | |
| * specified and is either 1 (configure) or 2 (generate), then keys | |
| * will be displayed accordingly. | |
| */ | |
| void PrintKeys(int process = 0); | |
| /** | |
| * During a CMake run, an error handle should add errors | |
| * to be displayed afterwards. | |
| */ | |
| void AddError(const std::string& message, const char* title) override; | |
| /** | |
| * Used to do a configure. If argument is specified, it does only the check | |
| * and not configure. | |
| */ | |
| int Configure(int noconfigure = 0); | |
| /** | |
| * Used to generate | |
| */ | |
| int Generate(); | |
| /** | |
| * Used by main program | |
| */ | |
| int LoadCache(const char* dir); | |
| /** | |
| * Progress callback | |
| */ | |
| void UpdateProgress(const std::string& msg, float prog); | |
| protected: | |
| // Copy the cache values from the user interface to the actual | |
| // cache. | |
| void FillCacheManagerFromUI(); | |
| // Fix formatting of values to a consistent form. | |
| void FixValue(cmStateEnums::CacheEntryType type, const std::string& in, | |
| std::string& out) const; | |
| // Re-post the existing fields. Used to toggle between | |
| // normal and advanced modes. Render() should be called | |
| // afterwards. | |
| void RePost(); | |
| // Remove an entry from the interface and the cache. | |
| void RemoveEntry(const char* value); | |
| // Jump to the cache entry whose name matches the string. | |
| void JumpToCacheEntry(const char* str); | |
| // Clear and reset the output log and state | |
| void ResetOutputs(); | |
| // Display the current progress and output | |
| void DisplayOutputs(std::string const& newOutput); | |
| // Copies of cache entries stored in the user interface | |
| std::vector<cmCursesCacheEntryComposite> Entries; | |
| // The form used to display logs during processing | |
| std::unique_ptr<cmCursesLongMessageForm> LogForm; | |
| // Output produced by the last pass | |
| std::vector<std::string> Outputs; | |
| // Did the last pass produced outputs of interest (errors, warnings, ...) | |
| bool HasNonStatusOutputs = false; | |
| // Last progress bar | |
| std::string LastProgress; | |
| // Command line arguments to be passed to cmake each time | |
| // it is run | |
| std::vector<std::string> Args; | |
| // Message displayed when user presses 'h' | |
| // It is: Welcome + info about current entry + common help | |
| std::vector<std::string> HelpMessage; | |
| // Common help | |
| static const char* s_ConstHelpMessage; | |
| // Fields displayed. Includes labels, new entry markers, entries | |
| std::vector<FIELD*> Fields; | |
| // Number of entries shown (depends on mode -normal or advanced-) | |
| size_t NumberOfVisibleEntries = 0; | |
| bool AdvancedMode = false; | |
| // Did the iteration converge (no new entries) ? | |
| bool OkToGenerate = false; | |
| // Number of pages displayed | |
| int NumberOfPages = 0; | |
| bool IsEmpty = false; | |
| int InitialWidth; | |
| std::unique_ptr<cmake> CMakeInstance; | |
| std::string SearchString; | |
| std::string OldSearchString; | |
| bool SearchMode = false; | |
| }; |