Skip to content

Commit

Permalink
ticket:4067 Fixes the issue with quotes.
Browse files Browse the repository at this point in the history
Allow users to edit __OpenModelica_infoHeader as well.
  • Loading branch information
adeas31 committed Nov 25, 2016
1 parent 93e212e commit ffae961
Show file tree
Hide file tree
Showing 8 changed files with 251 additions and 14 deletions.
100 changes: 88 additions & 12 deletions OMEdit/OMEditGUI/Modeling/DocumentationWidget.cpp
Expand Up @@ -86,14 +86,22 @@ DocumentationWidget::DocumentationWidget(QWidget *pParent)
mpEditInfoToolButton->setToolButtonStyle(Qt::ToolButtonIconOnly);
mpEditInfoToolButton->setDisabled(true);
connect(mpEditInfoToolButton, SIGNAL(clicked()), SLOT(editInfoDocumentation()));
// create the edit info button
// create the edit revisions button
mpEditRevisionsToolButton = new QToolButton;
mpEditRevisionsToolButton->setText(tr("Edit Revisions"));
mpEditRevisionsToolButton->setToolTip(tr("Edit Revisions Documentation"));
mpEditRevisionsToolButton->setIcon(QIcon(":/Resources/icons/edit-revisions.svg"));
mpEditRevisionsToolButton->setToolButtonStyle(Qt::ToolButtonIconOnly);
mpEditRevisionsToolButton->setDisabled(true);
connect(mpEditRevisionsToolButton, SIGNAL(clicked()), SLOT(editRevisionsDocumentation()));
// create the edit infoHeader button
mpEditInfoHeaderToolButton = new QToolButton;
mpEditInfoHeaderToolButton->setText(tr("Edit __OpenModelica_infoHeader"));
mpEditInfoHeaderToolButton->setToolTip(tr("Edit __OpenModelica_infoHeader Documentation"));
mpEditInfoHeaderToolButton->setIcon(QIcon(":/Resources/icons/edit-info-header.svg"));
mpEditInfoHeaderToolButton->setToolButtonStyle(Qt::ToolButtonIconOnly);
mpEditInfoHeaderToolButton->setDisabled(true);
connect(mpEditInfoHeaderToolButton, SIGNAL(clicked()), SLOT(editInfoHeaderDocumentation()));
// create the save button
mpSaveToolButton = new QToolButton;
mpSaveToolButton->setText(Helper::save);
Expand Down Expand Up @@ -129,6 +137,7 @@ DocumentationWidget::DocumentationWidget(QWidget *pParent)
pNavigationButtonsLayout->addWidget(mpNextToolButton);
pNavigationButtonsLayout->addWidget(mpEditInfoToolButton);
pNavigationButtonsLayout->addWidget(mpEditRevisionsToolButton);
pNavigationButtonsLayout->addWidget(mpEditInfoHeaderToolButton);
pNavigationButtonsLayout->addWidget(mpSaveToolButton);
pNavigationButtonsLayout->addWidget(mpCancelToolButton);
// Documentation viewer layout
Expand Down Expand Up @@ -193,6 +202,7 @@ void DocumentationWidget::showDocumentation(LibraryTreeItem *pLibraryTreeItem)
updatePreviousNextButtons();
mpEditInfoToolButton->setDisabled(pLibraryTreeItem->isSystemLibrary());
mpEditRevisionsToolButton->setDisabled(pLibraryTreeItem->isSystemLibrary());
mpEditInfoHeaderToolButton->setDisabled(pLibraryTreeItem->isSystemLibrary());
mpSaveToolButton->setDisabled(true);
mpCancelToolButton->setDisabled(true);
mpDocumentationViewer->show();
Expand Down Expand Up @@ -266,6 +276,7 @@ void DocumentationWidget::editInfoDocumentation()
mpNextToolButton->setDisabled(true);
mpEditInfoToolButton->setDisabled(true);
mpEditRevisionsToolButton->setDisabled(true);
mpEditInfoHeaderToolButton->setDisabled(true);
mpSaveToolButton->setDisabled(false);
mpCancelToolButton->setDisabled(false);
mpDocumentationViewer->hide();
Expand Down Expand Up @@ -294,6 +305,36 @@ void DocumentationWidget::editRevisionsDocumentation()
mpNextToolButton->setDisabled(true);
mpEditInfoToolButton->setDisabled(true);
mpEditRevisionsToolButton->setDisabled(true);
mpEditInfoHeaderToolButton->setDisabled(true);
mpSaveToolButton->setDisabled(false);
mpCancelToolButton->setDisabled(false);
mpDocumentationViewer->hide();
}
}
}

/*!
* \brief DocumentationWidget::editInfoHeaderDocumentation
* Starts editing the __OpenModelica_infoHeader section of the documentation annotation.\n
* Slot activated when clicked signal of mpEditInfoHeaderToolButton is raised.
*/
void DocumentationWidget::editInfoHeaderDocumentation()
{
// get the __OpenModelica_infoHeader documentation annotation
if (mDocumentationHistoryPos >= 0) {
LibraryTreeItem *pLibraryTreeItem = mpDocumentationHistoryList->at(mDocumentationHistoryPos).mpLibraryTreeItem;
if (pLibraryTreeItem && !pLibraryTreeItem->isNonExisting()) {
QList<QString> infoHeader = MainWindow::instance()->getOMCProxy()->getDocumentationAnnotationInClass(pLibraryTreeItem);
mpHTMLEditor->getPlainTextEdit()->setPlainText(infoHeader.at(2));
mpHTMLEditor->getPlainTextEdit()->setFocus(Qt::ActiveWindowFocusReason);
mpHTMLEditor->show();
mEditType = EditType::InfoHeader;
// update the buttons
mpPreviousToolButton->setDisabled(true);
mpNextToolButton->setDisabled(true);
mpEditInfoToolButton->setDisabled(true);
mpEditRevisionsToolButton->setDisabled(true);
mpEditInfoHeaderToolButton->setDisabled(true);
mpSaveToolButton->setDisabled(false);
mpCancelToolButton->setDisabled(false);
mpDocumentationViewer->hide();
Expand All @@ -313,19 +354,53 @@ void DocumentationWidget::saveDocumentation(LibraryTreeItem *pNextLibraryTreeIte
if (mDocumentationHistoryPos >= 0) {
LibraryTreeItem *pLibraryTreeItem = mpDocumentationHistoryList->at(mDocumentationHistoryPos).mpLibraryTreeItem;
if (pLibraryTreeItem && !pLibraryTreeItem->isNonExisting()) {
QString newDocAnnotationString = "annotate=Documentation(info=\"%1\", revisions=\"%3\", __OpenModelica_infoHeader=\"%6\")";
QList<QString> documentation = MainWindow::instance()->getOMCProxy()->getDocumentationAnnotationInClass(pLibraryTreeItem);
QString oldDocAnnotationString = QString("annotate=Documentation(info=\"%1\", revisions=\"%3\", __OpenModelica_infoHeader=\"%6\")")
.arg(documentation.at(0)).arg(documentation.at(1)).arg(documentation.at(2));
if (mEditType == EditType::Info) {
newDocAnnotationString = newDocAnnotationString.arg(mpHTMLEditor->getPlainTextEdit()->toPlainText())
.arg(documentation.at(1))
.arg(documentation.at(2));
} else if (mEditType == EditType::Revisions) {
newDocAnnotationString = newDocAnnotationString.arg(documentation.at(0))
.arg(mpHTMLEditor->getPlainTextEdit()->toPlainText())
.arg(documentation.at(2));
// old documentation annotation
QString oldDocAnnotationString = "annotate=Documentation(";
if (!documentation.at(0).isEmpty()) {
oldDocAnnotationString.append("info=\"").append(StringHandler::escapeStringQuotes(documentation.at(0))).append("\"");
}
if (!documentation.at(1).isEmpty()) {
oldDocAnnotationString.append(", revisions=\"").append(StringHandler::escapeStringQuotes(documentation.at(1))).append("\"");
}
if (!documentation.at(2).isEmpty()) {
oldDocAnnotationString.append(", __OpenModelica_infoHeader=\"").append(StringHandler::escapeStringQuotes(documentation.at(2))).append("\"");
}
oldDocAnnotationString.append(")");
// new documentation annotation
QString newDocAnnotationString = "annotate=Documentation(";
if (mEditType == EditType::Info) { // if editing the info section
if (!mpHTMLEditor->getPlainTextEdit()->toPlainText().isEmpty()) {
newDocAnnotationString.append("info=\"").append(StringHandler::escapeStringQuotes(mpHTMLEditor->getPlainTextEdit()->toPlainText())).append("\"");
}
if (!documentation.at(1).isEmpty()) {
newDocAnnotationString.append(", revisions=\"").append(StringHandler::escapeStringQuotes(documentation.at(1))).append("\"");
}
if (!documentation.at(2).isEmpty()) {
newDocAnnotationString.append(", __OpenModelica_infoHeader=\"").append(StringHandler::escapeStringQuotes(documentation.at(2))).append("\"");
}
} else if (mEditType == EditType::Revisions) { // if editing the revisions section
if (!documentation.at(0).isEmpty()) {
newDocAnnotationString.append("info=\"").append(StringHandler::escapeStringQuotes(documentation.at(0))).append("\"");
}
if (!mpHTMLEditor->getPlainTextEdit()->toPlainText().isEmpty()) {
newDocAnnotationString.append(", revisions=\"").append(StringHandler::escapeStringQuotes(mpHTMLEditor->getPlainTextEdit()->toPlainText())).append("\"");
}
if (!documentation.at(2).isEmpty()) {
newDocAnnotationString.append(", __OpenModelica_infoHeader=\"").append(StringHandler::escapeStringQuotes(documentation.at(2))).append("\"");
}
} else if (mEditType == EditType::InfoHeader) { // if editing the __OpenModelica_infoHeader section
if (!documentation.at(0).isEmpty()) {
newDocAnnotationString.append("info=\"").append(StringHandler::escapeStringQuotes(documentation.at(0))).append("\"");
}
if (!documentation.at(1).isEmpty()) {
newDocAnnotationString.append(", revisions=\"").append(StringHandler::escapeStringQuotes(documentation.at(1))).append("\"");
}
if (!mpHTMLEditor->getPlainTextEdit()->toPlainText().isEmpty()) {
newDocAnnotationString.append(", __OpenModelica_infoHeader=\"").append(StringHandler::escapeStringQuotes(mpHTMLEditor->getPlainTextEdit()->toPlainText())).append("\"");
}
}
newDocAnnotationString.append(")");
// if we have ModelWidget for class then put the change on undo stack.
if (pLibraryTreeItem->getModelWidget()) {
UpdateClassAnnotationCommand *pUpdateClassExperimentAnnotationCommand;
Expand Down Expand Up @@ -355,6 +430,7 @@ void DocumentationWidget::cancelDocumentation()
updatePreviousNextButtons();
mpEditInfoToolButton->setDisabled(false);
mpEditRevisionsToolButton->setDisabled(false);
mpEditInfoHeaderToolButton->setDisabled(false);
mpSaveToolButton->setDisabled(true);
mpCancelToolButton->setDisabled(true);
mpDocumentationViewer->show();
Expand Down
5 changes: 4 additions & 1 deletion OMEdit/OMEditGUI/Modeling/DocumentationWidget.h
Expand Up @@ -57,7 +57,8 @@ class DocumentationWidget : public QWidget
enum EditType {
None,
Info,
Revisions
Revisions,
InfoHeader
};
DocumentationWidget(QWidget *pParent = 0);
~DocumentationWidget();
Expand All @@ -71,6 +72,7 @@ class DocumentationWidget : public QWidget
QToolButton *mpNextToolButton;
QToolButton *mpEditInfoToolButton;
QToolButton *mpEditRevisionsToolButton;
QToolButton *mpEditInfoHeaderToolButton;
QToolButton *mpSaveToolButton;
QToolButton *mpCancelToolButton;
DocumentationViewer *mpDocumentationViewer;
Expand All @@ -85,6 +87,7 @@ public slots:
void nextDocumentation();
void editInfoDocumentation();
void editRevisionsDocumentation();
void editInfoHeaderDocumentation();
void saveDocumentation(LibraryTreeItem *pNextLibraryTreeItem = 0);
void cancelDocumentation();
};
Expand Down
2 changes: 2 additions & 0 deletions OMEdit/OMEditGUI/OMC/OMCProxy.cpp
Expand Up @@ -1671,6 +1671,8 @@ bool OMCProxy::addClassAnnotation(QString className, QString annotation)
if (StringHandler::unparseBool(getResult())) {
return true;
} else {
MessagesWidget::instance()->addGUIMessage(MessageItem(MessageItem::Modelica, "", false, 0, 0, 0, 0, getResult(),
Helper::scriptingKind, Helper::errorLevel));
return false;
}
}
Expand Down
140 changes: 140 additions & 0 deletions OMEdit/OMEditGUI/Resources/icons/edit-info-header.svg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion OMEdit/OMEditGUI/Resources/icons/edit-revisions.svg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
14 changes: 14 additions & 0 deletions OMEdit/OMEditGUI/Util/StringHandler.cpp
Expand Up @@ -942,6 +942,20 @@ QString StringHandler::escapeString(QString value)
return res;
}

QString StringHandler::escapeStringQuotes(QString value)
{
QString res;
value = value.trimmed();
for (int i = 0; i < value.length(); i++) {
switch (value[i].toAscii())
{
case '"': res.append("\\\""); break;
default: res.append(value[i]); break;
}
}
return res;
}

#define CONSUME_CHAR(value,res,i) \
if (value.at(i) == '\\') { \
i++; \
Expand Down
1 change: 1 addition & 0 deletions OMEdit/OMEditGUI/Util/StringHandler.h
Expand Up @@ -113,6 +113,7 @@ class StringHandler : public QObject
static QString getFirstWordBeforeDot(QString value);
static QString removeFirstWordAfterDot(QString value);
static QString escapeString(QString value);
static QString escapeStringQuotes(QString value);
// Returns "" if the string is not a standard Modelica string. Else it unparses it into normal form.
static QString unparse(QString value);
// Returns empty list if the string is not a standard Modelica string-array. Else it unparses it into normal form.
Expand Down
1 change: 1 addition & 0 deletions OMEdit/OMEditGUI/resource_omedit.qrc
Expand Up @@ -113,6 +113,7 @@
<file>Resources/icons/edit-icon.svg</file>
<file>Resources/icons/edit-info.svg</file>
<file>Resources/icons/edit-revisions.svg</file>
<file>Resources/icons/edit-info-header.svg</file>
<file>Resources/icons/up.svg</file>
<file>Resources/icons/down.svg</file>
<file>Resources/icons/top.svg</file>
Expand Down

0 comments on commit ffae961

Please sign in to comment.