Qt: Fix simple_dialog formatting.

Make sure that simple_dialog displays plain text. Trim whitespace
and remove excessive newlines in order to improve message formatting.
Add a comment about simple_dialog's behavior in Qt and GTK+ and how it
might be improved.

Bug: 13178
Change-Id: Ic6ff3cecd5ef1d76ec095d7a409f38e602b41ce2
Reviewed-on: https://code.wireshark.org/review/18985
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Jaap Keuter <jaap.keuter@xs4all.nl>
Reviewed-by: Gerald Combs <gerald@wireshark.org>
This commit is contained in:
Gerald Combs 2016-11-29 09:32:47 -08:00
parent ff0371e898
commit 7242719272
3 changed files with 36 additions and 18 deletions

View File

@ -644,7 +644,7 @@ get_capture_device_open_failure_messages(const char *open_err_str,
"Please check that \"%s\" is the proper interface.\n"
"\n"
"\n"
"Help can be found at:\n"
"Help can be found on the following pages:\n"
"\n"
" https://wiki.wireshark.org/WinPcap\n"
" https://wiki.wireshark.org/CaptureSetup\n",

View File

@ -29,13 +29,14 @@
#include "wireshark_application.h"
#include <QMessageBox>
#include <QRegExp>
#include <QTextCodec>
/* Simple dialog function - Displays a dialog box with the supplied message
* text.
*
* This is meant to be used as a backend for the functions defined in
* ui/simple_dialog.h. Qt code should use QMessageBox directly.
* ui/simple_dialog.h. Qt code should use QMessageBox directly.
*
* Args:
* type : One of ESD_TYPE_*.
@ -62,14 +63,7 @@ simple_dialog_primary_end(void) {
char *
simple_dialog_format_message(const char *msg)
{
char *str;
if (msg) {
str = xml_escape(msg);
} else {
str = NULL;
}
return str;
return g_strdup(msg);
}
/*
@ -95,10 +89,13 @@ SimpleDialog::SimpleDialog(QWidget *parent, ESD_TYPE_E type, int btn_mask, const
message = QTextCodec::codecForLocale()->toUnicode(vmessage);
g_free(vmessage);
setTextFormat(Qt::RichText);
setTextFormat(Qt::PlainText);
MessagePair msg_pair = splitMessage(message);
QString primary = msg_pair.first;
QString secondary = msg_pair.second;
// Remove leading and trailing whitespace along with excessive newline runs.
QString primary = msg_pair.first.trimmed();
QString secondary = msg_pair.second.trimmed();
secondary.replace(QRegExp("\n\n+"), "\n\n");
if (primary.isEmpty()) {
return;

View File

@ -80,11 +80,32 @@ typedef enum {
/** Create and show a simple dialog.
*
* @param type type of dialog
* @param btn_mask the buttons to display
* @param msg_format printf like message format
* @param ... printf like parameters
* @return the newly created dialog
* @param Type type of dialog, e.g. ESD_TYPE_WARN
* @param btn_mask The buttons to display, e.g. ESD_BTNS_OK_CANCEL
* @param msg_format Printf like message format. Text must be plain.
* @param ... Printf like parameters
* @return The newly created dialog
*/
/*
* XXX This is a bit clunky. We typically pass in:
* - simple_dialog_primary_start
* - The primary message
* - simple_dialog_primary_end
* - Optionally, the secondary message.
*
* In the GTK+ UI primary_start and primary_end make up a <span> that adds
* text formatting. The whole string is then shoved into a GtkLabel.
*
* In the Qt UI we use primary_start and _end to split the primary and
* secondary messages. They are then added to a QMessageBox via setText and
* setInformativeText respectively. No formatting is applied.
*
* Callers are responsible for wrapping the primary message and formatting
* the message text.
*
* Explicitly passing in separate primary and secondary messages would let us
* get rid of primary_start and primary_end and reduce the amount of
* gymnastics we have to to in the Qt UI.
*/
extern gpointer simple_dialog(ESD_TYPE_E type, gint btn_mask,
const gchar *msg_format, ...)