Additional patches are attached, fixes what miika has mentioned.
-- Regards, Gehad Elrobey
>From 319bc22a0ce08b69fec79e6109f89bd5015b8c3f Mon Sep 17 00:00:00 2001 From: Gehad elrobey <[email protected]> Date: Mon, 2 Jun 2014 17:46:55 +0300 Subject: [PATCH 4/6] Minor Fixes to the export dialog ui -use heading "Style options" instead of advanced -choice of selected dives is the same as other tabs -changing the default font to 14 Signed-off-by: Gehad elrobey <[email protected]> --- qt-ui/divelogexportdialog.ui | 103 ++++++++++++++++++++++++++----------------- 1 file changed, 63 insertions(+), 40 deletions(-) diff --git a/qt-ui/divelogexportdialog.ui b/qt-ui/divelogexportdialog.ui index 5bd41e1..53be92c 100644 --- a/qt-ui/divelogexportdialog.ui +++ b/qt-ui/divelogexportdialog.ui @@ -48,7 +48,7 @@ <widget class="QGroupBox" name="exportSelection"> <property name="geometry"> <rect> - <x>250</x> + <x>260</x> <y>20</y> <width>171</width> <height>114</height> @@ -230,6 +230,26 @@ <enum>Qt::Horizontal</enum> </property> </widget> + <widget class="Line" name="line_3"> + <property name="geometry"> + <rect> + <x>230</x> + <y>60</y> + <width>20</width> + <height>151</height> + </rect> + </property> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + </widget> + <zorder>exportSelection</zorder> + <zorder>exportFormat</zorder> + <zorder>description</zorder> + <zorder>line</zorder> + <zorder>line_3</zorder> + <zorder>exportAll</zorder> + <zorder>exportSelected</zorder> </widget> <widget class="QWidget" name="HTML_tab"> <attribute name="title"> @@ -248,7 +268,7 @@ </rect> </property> <property name="title"> - <string>Advanced Options</string> + <string>Style Options</string> </property> <property name="checkable"> <bool>true</bool> @@ -297,6 +317,9 @@ </item> <item> <widget class="QComboBox" name="fontSizeSelection"> + <property name="currentIndex"> + <number>3</number> + </property> <item> <property name="text"> <string>8</string> @@ -385,7 +408,7 @@ <widget class="Line" name="line_2"> <property name="geometry"> <rect> - <x>230</x> + <x>210</x> <y>40</y> <width>20</width> <height>141</height> @@ -395,16 +418,49 @@ <enum>Qt::Vertical</enum> </property> </widget> - <widget class="QWidget" name="layoutWidget4"> + <widget class="QWidget" name="layoutWidget5"> <property name="geometry"> <rect> <x>10</x> <y>50</y> - <width>201</width> + <width>191</width> <height>80</height> </rect> </property> - <layout class="QVBoxLayout" name="exportOptions"> + <layout class="QVBoxLayout" name="additionalOptions"> + <item> + <widget class="QCheckBox" name="checkBox"> + <property name="text"> + <string>Order dives from 0</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="checkBox_2"> + <property name="text"> + <string>Minimum Javascript</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="checkBox_3"> + <property name="text"> + <string>Dive List only</string> + </property> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name=""> + <property name="geometry"> + <rect> + <x>250</x> + <y>50</y> + <width>132</width> + <height>52</height> + </rect> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> <item> <widget class="QRadioButton" name="exportSelectedDives"> <property name="minimumSize"> @@ -433,7 +489,7 @@ </size> </property> <property name="text"> - <string>All</string> + <string>All Dives</string> </property> <attribute name="buttonGroup"> <string notr="true">buttonGroup</string> @@ -442,39 +498,6 @@ </item> </layout> </widget> - <widget class="QWidget" name="layoutWidget5"> - <property name="geometry"> - <rect> - <x>250</x> - <y>50</y> - <width>191</width> - <height>80</height> - </rect> - </property> - <layout class="QVBoxLayout" name="additionalOptions"> - <item> - <widget class="QCheckBox" name="checkBox"> - <property name="text"> - <string>Dives Starting from 0</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="checkBox_2"> - <property name="text"> - <string>Minimum Javascript</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="checkBox_3"> - <property name="text"> - <string>Dive List only</string> - </property> - </widget> - </item> - </layout> - </widget> </widget> </widget> </widget> -- 1.9.1
>From 900f72ebb5102196760d7fa90682888cc3f5aba3 Mon Sep 17 00:00:00 2001 From: Gehad elrobey <[email protected]> Date: Mon, 2 Jun 2014 18:38:35 +0300 Subject: [PATCH 5/6] Remeber old selection of exporting settings add a new QSettings group "HTML" to save the old exporting settings and remember it later. Signed-off-by: Gehad elrobey <[email protected]> --- qt-ui/divelogexportdialog.cpp | 20 ++++++++++++++++++++ qt-ui/divelogexportdialog.ui | 12 ++++-------- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/qt-ui/divelogexportdialog.cpp b/qt-ui/divelogexportdialog.cpp index e8dabc1..938a19d 100644 --- a/qt-ui/divelogexportdialog.cpp +++ b/qt-ui/divelogexportdialog.cpp @@ -31,6 +31,19 @@ DiveLogExportDialog::DiveLogExportDialog(QWidget *parent) : QDialog(parent), ui->fontSelection->addItem("Georgia", "Georgia, serif"); ui->fontSelection->addItem("Courier", "Courier, monospace"); ui->fontSelection->addItem("Verdana", "Verdana, Geneva, sans-serif"); + + QSettings settings; + settings.beginGroup("HTML"); + if (settings.contains("fontSelection")) { + ui->fontSelection->setCurrentIndex(settings.value("fontSelection").toInt()); + } + if (settings.contains("fontSizeSelection")) { + ui->fontSizeSelection->setCurrentIndex(settings.value("fontSizeSelection").toInt()); + } + if (settings.contains("themeSelection")) { + ui->themeSelection->setCurrentIndex(settings.value("themeSelection").toInt()); + } + settings.endGroup(); } DiveLogExportDialog::~DiveLogExportDialog() @@ -102,6 +115,13 @@ void DiveLogExportDialog::exportHtmlInit(QString filename) void DiveLogExportDialog::exportHTMLsettings(QString filename) { + QSettings settings; + settings.beginGroup("HTML"); + settings.setValue("fontSelection", ui->fontSelection->currentIndex()); + settings.setValue("fontSizeSelection", ui->fontSizeSelection->currentIndex()); + settings.setValue("themeSelection", ui->themeSelection->currentIndex()); + settings.endGroup(); + QString fontSize = ui->fontSizeSelection->currentText(); QString fontFamily = ui->fontSelection->itemData(ui->fontSelection->currentIndex()).toString(); QFile file(filename); diff --git a/qt-ui/divelogexportdialog.ui b/qt-ui/divelogexportdialog.ui index 53be92c..5506d7a 100644 --- a/qt-ui/divelogexportdialog.ui +++ b/qt-ui/divelogexportdialog.ui @@ -243,13 +243,6 @@ <enum>Qt::Vertical</enum> </property> </widget> - <zorder>exportSelection</zorder> - <zorder>exportFormat</zorder> - <zorder>description</zorder> - <zorder>line</zorder> - <zorder>line_3</zorder> - <zorder>exportAll</zorder> - <zorder>exportSelected</zorder> </widget> <widget class="QWidget" name="HTML_tab"> <attribute name="title"> @@ -378,6 +371,9 @@ </item> <item> <widget class="QComboBox" name="themeSelection"> + <property name="currentIndex"> + <number>0</number> + </property> <item> <property name="text"> <string>Light</string> @@ -451,7 +447,7 @@ </item> </layout> </widget> - <widget class="QWidget" name=""> + <widget class="QWidget" name="layoutWidget"> <property name="geometry"> <rect> <x>250</x> -- 1.9.1
>From 6698369082c5104ed8efae01e2b2df59cc475c71 Mon Sep 17 00:00:00 2001 From: Gehad elrobey <[email protected]> Date: Mon, 2 Jun 2014 20:10:54 +0300 Subject: [PATCH 6/6] HTML: Better quoting to the export strings Quote the location, buddy, suit, tags and notes This prevents js code from crashing. Signed-off-by: Gehad elrobey <[email protected]> --- save-html.c | 105 +++++++++++++++++++++++++++----------------------------- save-html.h | 4 +-- worldmap-save.c | 4 ++- 3 files changed, 55 insertions(+), 58 deletions(-) diff --git a/save-html.c b/save-html.c index 4f37849..af7b485 100644 --- a/save-html.c +++ b/save-html.c @@ -8,65 +8,58 @@ void put_HTML_date(struct membuffer *b, struct dive *dive, const char *pre, cons put_format(b, "%s%04u-%02u-%02u%s", pre, tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, post); } -char *replace_char(char *str, char replace, char *replace_by) +void put_quoted(struct membuffer *b, const char *text) { - /* - this function can't replace a character with a substring - where the substring contains the character, infinite loop. - */ - - if (!str) - return 0; - - int i = 0, char_count = 0, new_size; - - while (str[i] != '\0') { - if (str[i] == replace) - char_count++; - i++; - } - - new_size = strlen(str) + char_count * strlen(replace_by) + 1; - char *result = malloc(new_size); - char *temp = strdup(str); - char *p0, *p1; - if (!result || !temp) - return 0; - result[0] = '\0'; - p0 = temp; - p1 = strchr(temp, replace); - while (p1) { - *p1 = '\0'; - strcat(result, p0); - strcat(result, replace_by); - p0 = p1 + 1; - p1 = strchr(p0, replace); + const char *p = text; + + for (;;) { + const char *escape; + + switch (*p++) { + default: + continue; + case 0: + escape = NULL; + break; + case 1 ... 8: + case 11: + case 12: + case 14 ... 31: + escape = "?"; + break; + case '<': + escape = "<"; + break; + case '>': + escape = ">"; + break; + case '&': + escape = "&"; + break; + case '\'': + escape = "'"; + break; + case '\"': + escape = """; + break; + case '\n': + escape = "<br>"; + break; + } + put_bytes(b, text, (p - text - 1)); + if (!escape) + break; + put_string(b, escape); + text = p; } - strcat(result, p0); /*concat the rest of the string*/ - free(temp); - return result; -} - -char *quote(char *string) -{ - char *less_than_removed = replace_char(string, '<', "<"); - char *greater_than_removed = replace_char(less_than_removed, '>', ">"); - char *new_line_removed = replace_char(greater_than_removed, '\n', "<br>"); - char *double_quotes_removed = replace_char(new_line_removed, '"', """); - char *single_quotes_removed = replace_char(double_quotes_removed, '\'', "'"); - free(new_line_removed); - free(less_than_removed); - free(greater_than_removed); - free(double_quotes_removed); - return single_quotes_removed; } void put_HTML_notes(struct membuffer *b, struct dive *dive, const char *pre, const char *post) { if (dive->notes) { - char *notes = quote(dive->notes); - put_format(b, "%s%s%s", pre, notes, post); - free(notes); + put_string(b, pre); + put_quoted(b, dive->notes); + put_string(b, post); } } @@ -113,7 +106,9 @@ void put_HTML_tags(struct membuffer *b, struct dive *dive, const char *pre, cons put_string(b, "\"--\","); while (tag) { - put_format(b, "\"%s\",", tag->tag->name); + put_string(b, "\""); + put_quoted(b, tag->tag->name); + put_string(b, "\","); tag = tag->next; } put_string(b, "]"); @@ -124,7 +119,9 @@ void write_attribute(struct membuffer *b, const char *att_name, const char *valu { if (!value) value = "--"; - put_format(b, "\"%s\":\"%s\",", att_name, value); + put_format(b, "\"%s\":\"", att_name); + put_quoted(b, value); + put_string(b, "\","); } void write_one_dive(struct membuffer *b, struct dive *dive, int *dive_no) diff --git a/save-html.h b/save-html.h index 47f6d21..b7bbbff 100644 --- a/save-html.h +++ b/save-html.h @@ -13,9 +13,7 @@ void put_HTML_airtemp(struct membuffer *b, struct dive *dive, const char *pre, c void put_HTML_watertemp(struct membuffer *b, struct dive *dive, const char *pre, const char *post); void put_HTML_time(struct membuffer *b, struct dive *dive, const char *pre, const char *post); void put_HTML_notes(struct membuffer *b, struct dive *dive, const char *pre, const char *post); - -char *replace_char(char *str, char replace, char *replace_by); -char *quote(char *string); +void put_quoted(struct membuffer *b, const char *text); void export_HTML(const char *file_name, const bool selected_only); diff --git a/worldmap-save.c b/worldmap-save.c index 0b22b55..589973e 100644 --- a/worldmap-save.c +++ b/worldmap-save.c @@ -38,7 +38,9 @@ void writeMarkers(struct membuffer *b, const bool selected_only) put_depth(b, dive->maxdepth, translate("gettextFromC", "<p>Max Depth: "), translate("gettextFromC", " m</p>")); put_HTML_airtemp(b, dive, translate("gettextFromC", "<p>Air Temp: "), "</p>"); put_HTML_watertemp(b, dive, translate("gettextFromC", "<p>Water Temp : "), "</p>"); - put_format(b, "<p>Location : <b>%s</b></p>", quote(dive->location)); + put_format(b, "<p>Location : <b>"); + put_quoted(b, dive->location); + put_string(b, "</b></p>"); put_HTML_notes(b, dive, translate("gettextFromC", "<p> Notes"), " </p>"); put_string(b, "</p>'+'</div>'+'</div>'});\ninfowindows.push(tempinfowindow);\n"); put_format(b, "google.maps.event.addListener(markers[%d], 'mouseover', function() {\ninfowindows[%d].open(map,markers[%d]);}", dive_no, dive_no, dive_no); -- 1.9.1
_______________________________________________ subsurface mailing list [email protected] http://lists.hohndel.org/cgi-bin/mailman/listinfo/subsurface
