1 /*
2     SPDX-FileCopyrightText: 2011 Rafał Kułaga <rl.kulaga@gmail.com>
3 
4     SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #include "finderchart.h"
8 
9 #include "detailstable.h"
10 #include "geolocation.h"
11 #include "kstarsdatetime.h"
12 #include "loggingform.h"
13 
14 #include <QLocale>
15 #include <QTextDocument>
16 #include <QTextDocumentFragment>
17 #include <QTextDocumentWriter>
18 #include <QTextTable>
19 
FinderChart()20 FinderChart::FinderChart() : KStarsDocument()
21 {
22 }
23 
insertTitleSubtitle(const QString & title,const QString & subtitle)24 void FinderChart::insertTitleSubtitle(const QString &title, const QString &subtitle)
25 {
26     QTextCursor cursor(m_Document.get());
27     cursor.movePosition(QTextCursor::Start);
28 
29     QTextBlockFormat titleBlockFmt;
30     titleBlockFmt.setAlignment(Qt::AlignCenter);
31 
32     if (!title.isEmpty())
33     {
34         QTextCharFormat titleCharFmt;
35         QFont titleFont("Times", 20, QFont::Bold);
36         titleCharFmt.setFont(titleFont);
37 
38         cursor.insertBlock(titleBlockFmt, titleCharFmt);
39         cursor.insertText(title);
40     }
41 
42     if (!subtitle.isEmpty())
43     {
44         QTextCharFormat subtitleCharFmt;
45         QFont subtitleFont("Times", 14);
46         subtitleCharFmt.setFont(subtitleFont);
47 
48         cursor.insertBlock(titleBlockFmt, subtitleCharFmt);
49         cursor.insertText(subtitle);
50 
51         cursor.insertBlock(QTextBlockFormat(), QTextCharFormat());
52     }
53 }
54 
insertDescription(const QString & description)55 void FinderChart::insertDescription(const QString &description)
56 {
57     QTextCursor cursor = m_Document->rootFrame()->lastCursorPosition();
58 
59     QTextBlockFormat descrBlockFmt;
60     descrBlockFmt.setAlignment(Qt::AlignJustify);
61     QTextCharFormat descrCharFmt;
62     QFont descrFont("Times", 10);
63     descrCharFmt.setFont(descrFont);
64 
65     cursor.insertBlock(descrBlockFmt, descrCharFmt);
66     cursor.insertText(description);
67 
68     cursor.insertBlock(QTextBlockFormat(), QTextCharFormat());
69 }
70 
insertGeoTimeInfo(const KStarsDateTime & ut,GeoLocation * geo)71 void FinderChart::insertGeoTimeInfo(const KStarsDateTime &ut, GeoLocation *geo)
72 {
73     QTextCursor cursor = m_Document->rootFrame()->lastCursorPosition();
74 
75     QTextBlockFormat geoBlockFmt;
76     geoBlockFmt.setAlignment(Qt::AlignLeft);
77     QTextCharFormat geoCharFmt;
78     QFont geoFont("Times", 10, QFont::Bold);
79     geoCharFmt.setFont(geoFont);
80 
81     cursor.insertBlock(geoBlockFmt);
82     cursor.insertText(i18n("Date, time and location: "), geoCharFmt);
83 
84     QString geoStr = geo->translatedName();
85     if (!geo->translatedProvince().isEmpty())
86     {
87         if (!geoStr.isEmpty())
88         {
89             geoStr.append(", ");
90         }
91         geoStr.append(geo->translatedProvince());
92     }
93     if (!geo->translatedCountry().isEmpty())
94     {
95         if (!geoStr.isEmpty())
96         {
97             geoStr.append(", ");
98         }
99         geoStr.append(geo->translatedCountry());
100     }
101 
102     geoFont.setBold(false);
103     geoCharFmt.setFont(geoFont);
104     //cursor.insertText(QLocale().toString(ut.dateTime()) + ", " + geoStr, geoCharFmt);
105     cursor.insertText(QLocale().toString(ut) + ", " + geoStr, geoCharFmt);
106 
107     cursor.insertBlock(QTextBlockFormat(), QTextCharFormat());
108 }
109 
insertLoggingForm(LoggingForm * log)110 void FinderChart::insertLoggingForm(LoggingForm *log)
111 {
112     QTextCursor cursor = m_Document->rootFrame()->lastCursorPosition();
113     cursor.insertFragment(QTextDocumentFragment(log->getDocument()));
114 
115     cursor.insertBlock(QTextBlockFormat(), QTextCharFormat());
116     cursor.insertBlock(QTextBlockFormat(), QTextCharFormat());
117 }
118 
insertImage(const QImage & img,const QString & description,bool descriptionBelow)119 void FinderChart::insertImage(const QImage &img, const QString &description, bool descriptionBelow)
120 {
121     QTextCursor cursor = m_Document->rootFrame()->lastCursorPosition();
122     QTextCharFormat textFmt;
123     QTextBlockFormat blockFmt;
124     blockFmt.setAlignment(Qt::AlignHCenter);
125 
126     if (descriptionBelow)
127     {
128         cursor.insertBlock(blockFmt, textFmt);
129         cursor.insertImage(img);
130         cursor.insertBlock(blockFmt, textFmt);
131         cursor.insertText(description);
132     }
133 
134     else
135     {
136         cursor.insertBlock(blockFmt, textFmt);
137         cursor.insertText(description);
138         cursor.insertBlock(blockFmt, textFmt);
139         cursor.insertImage(img);
140     }
141 
142     cursor.insertBlock(QTextBlockFormat(), QTextCharFormat());
143     cursor.insertBlock(QTextBlockFormat(), QTextCharFormat());
144 }
145 
insertDetailsTable(DetailsTable * table)146 void FinderChart::insertDetailsTable(DetailsTable *table)
147 {
148     QTextCursor cursor = m_Document->rootFrame()->lastCursorPosition();
149     cursor.insertFragment(QTextDocumentFragment(table->getDocument()));
150 
151     cursor.insertBlock(QTextBlockFormat(), QTextCharFormat());
152     cursor.insertBlock(QTextBlockFormat(), QTextCharFormat());
153 }
154 
insertSectionTitle(const QString & title)155 void FinderChart::insertSectionTitle(const QString &title)
156 {
157     QTextCursor cursor = m_Document->rootFrame()->lastCursorPosition();
158 
159     QTextBlockFormat titleBlockFmt;
160     titleBlockFmt.setAlignment(Qt::AlignLeft);
161     QTextCharFormat titleCharFmt;
162     QFont titleFont("Times", 16, QFont::Bold);
163     titleFont.setCapitalization(QFont::AllUppercase);
164     titleCharFmt.setFont(titleFont);
165 
166     cursor.insertBlock(titleBlockFmt, titleCharFmt);
167     cursor.insertText(title);
168 }
169