OpenTTD Source 20241224-master-gf74b0cf984
textfile_gui.h
Go to the documentation of this file.
1/*
2 * This file is part of OpenTTD.
3 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6 */
7
10#ifndef TEXTFILE_GUI_H
11#define TEXTFILE_GUI_H
12
13#include "fileio_type.h"
14#include "strings_func.h"
15#include "textfile_type.h"
16#include "window_gui.h"
17
18std::optional<std::string> GetTextfile(TextfileType type, Subdirectory dir, const std::string &filename);
19
25
26 void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override;
27 void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override;
28 void DrawWidget(const Rect &r, WidgetID widget) const override;
29 void OnResize() override;
30 void OnInvalidateData(int data = 0, bool gui_scope = true) override;
31 void OnDropdownSelect(WidgetID widget, int index) override;
32
33 void Reset() override;
34 FontSize DefaultSize() override;
35 std::optional<std::string_view> NextString() override;
36 bool Monospace() override;
37 void SetFontNames(FontCacheSettings *settings, const char *font_name, const void *os_data) override;
38 void ScrollToLine(size_t line);
39
40 virtual void LoadTextfile(const std::string &textfile, Subdirectory dir);
41
42protected:
44 void ConstructWindow();
45
46 struct Line {
47 int top = 0;
48 int bottom = 0;
49 std::string text{};
50 TextColour colour = TC_WHITE;
51
52 Line(int top, std::string_view text) : top(top), bottom(top + 1), text(text) {}
53 Line() {}
54 };
55
56 struct Hyperlink {
57 size_t line;
58 size_t begin;
59 size_t end;
60 std::string destination;
61 };
62
63 struct HistoryEntry {
64 std::string filepath;
66 };
67
68 std::string filename{};
69 std::string filepath{};
70
71 std::vector<Line> lines;
72 std::vector<size_t> jumplist;
73 std::vector<Hyperlink> links;
74 std::vector<Hyperlink> link_anchors;
75 std::vector<HistoryEntry> history;
76 size_t history_pos = 0;
77 bool trusted = false;
78
79 void LoadText(std::string_view buf);
80 void FindHyperlinksInMarkdown(Line &line, size_t line_index);
81
87 virtual void OnHyperlinkClick(const Hyperlink &link);
88
92 virtual void AfterLoadText();
93
94 void NavigateToFile(std::string newfile, size_t line);
95 void AppendHistory(const std::string &filepath);
97 void NavigateHistory(int delta);
98
99private:
101 uint max_length = 0;
102
103 uint ReflowContent();
104 uint GetContentHeight();
105 void SetupScrollbars(bool force_reflow);
107
108 void AfterLoadMarkdown();
109};
110
111#endif /* TEXTFILE_GUI_H */
A searcher for missing glyphs.
Scrollbar data structure.
Types for Standard In/Out file operations.
Subdirectory
The different kinds of subdirectories OpenTTD uses.
fluid_settings_t * settings
FluidSynth settings handle.
FontSize
Available font sizes.
Definition gfx_type.h:208
TextColour
Colour of the strings, see _string_colourmap in table/string_colours.h or docs/ottd-colourtext-palett...
Definition gfx_type.h:260
Functions related to OTTD's strings.
Dimensions (a width and height) of a rectangle in 2D.
Settings for the four different fonts.
Definition fontcache.h:200
Coordinates of a point in 2D.
Specification of a rectangle with absolute coordinates of all edges.
int scrollpos
Scrolling position the file was at at navigation time.
std::string filepath
File the history entry is in.
int bottom
Bottom scroll position in visual lines.
TextColour colour
Colour to render text line in.
int top
Top scroll position in visual lines.
std::string text
Contents of the line.
Window for displaying a textfile.
Scrollbar * hscroll
Horizontal scrollbar.
uint ReflowContent()
Get the total height of the content displayed in this window, if wrapping is disabled.
void OnInvalidateData(int data=0, bool gui_scope=true) override
Some data on this window has become invalid.
void Reset() override
Reset the search, i.e.
uint search_iterator
Iterator for the font check search.
void AppendHistory(const std::string &filepath)
Append the new location to the history, so the user can go back.
void CheckHyperlinkClick(Point pt)
Check if the user clicked on a hyperlink, and handle it if so.
void OnDropdownSelect(WidgetID widget, int index) override
A dropdown option associated to this window has been selected.
bool Monospace() override
Whether to search for a monospace font or not.
void NavigateToFile(std::string newfile, size_t line)
Navigate to the requested file.
std::optional< std::string_view > NextString() override
Get the next string to search through.
bool trusted
Whether the content is trusted (read: not from content like NewGRFs, etc).
std::vector< Line > lines
#text, split into lines in a table with lines.
void LoadText(std::string_view buf)
Load a text into the textfile viewer.
void OnClick(Point pt, WidgetID widget, int click_count) override
A click with the left mouse button has been made on the window.
void UpdateHistoryScrollpos()
Update the scroll position to the current, so we can restore there if we go back.
virtual void AfterLoadText()
Post-processing after the text is loaded.
std::string filepath
Full path to the filename.
TextfileType file_type
Type of textfile to view.
void AfterLoadMarkdown()
Post-processing of markdown files.
void SetupScrollbars(bool force_reflow)
Set scrollbars to the right lengths.
FontSize DefaultSize() override
Get the default (font) size of the string.
void DrawWidget(const Rect &r, WidgetID widget) const override
Draw the contents of a nested widget.
size_t history_pos
Position in browsing history (for forward movement).
std::vector< Hyperlink > link_anchors
Anchor names of headings that can be linked to.
void SetFontNames(FontCacheSettings *settings, const char *font_name, const void *os_data) override
Set the right font names.
void NavigateHistory(int delta)
Navigate through the history, either forward or backward.
virtual void OnHyperlinkClick(const Hyperlink &link)
Handle the clicking on a hyperlink.
std::vector< HistoryEntry > history
Browsing history in this window.
void UpdateWidgetSize(WidgetID widget, Dimension &size, const Dimension &padding, Dimension &fill, Dimension &resize) override
Update size and resize step of a widget in the window.
std::vector< Hyperlink > links
Clickable links in lines.
uint max_length
Maximum length of unwrapped text line.
std::string filename
Filename of the textfile.
Scrollbar * vscroll
Vertical scrollbar.
virtual void LoadTextfile(const std::string &textfile, Subdirectory dir)
Loads the textfile text from file and setup lines.
void OnResize() override
Called after the window got resized.
std::vector< size_t > jumplist
Table of contents list, line numbers.
void FindHyperlinksInMarkdown(Line &line, size_t line_index)
Find any hyperlinks in a given line.
Data structure for an opened window.
Definition window_gui.h:273
ResizeInfo resize
Resize information.
Definition window_gui.h:314
const NWID * GetWidget(WidgetID widnum) const
Get the nested widget with number widnum from the nested widget tree.
Definition window_gui.h:977
std::optional< std::string > GetTextfile(TextfileType type, Subdirectory dir, const std::string &filename)
Search a textfile file next to the given content.
Types related to textfiles.
TextfileType
Additional text files accompanying Tar archives.
Functions, definitions and such used only by the GUI.
int WidgetID
Widget ID.
Definition window_type.h:18