1 #include "markvariabletext.h"
2 #include "marks.h"
3 #include <QComboBox>
4 
MarkVariableText(const QList<Mark * > & marks,QWidget * parent)5 MarkVariableText::MarkVariableText(const QList<Mark*>& marks, QWidget *parent) : MarkInsert(marks, parent), m_widgetType(ComboBox), m_mark(nullptr)
6 {
7 	//for editing mark entry in text - user can change mark pointer inserted into text or create new mark entry
8 	setupUi(this);
9 
10 	labelEditWidget = (QWidget*) new QComboBox(parent);
11 	((QComboBox*) labelEditWidget)->addItem(tr("New Mark"), QVariant::fromValue((void*) nullptr));
12 	for (int i = 0; i < marks.size(); ++i)
13 	{
14 		if (marks[i]->isType(MARKVariableTextType))
15 			((QComboBox*) labelEditWidget)->addItem(marks[i]->label, QVariant::fromValue((void*) marks[i]));
16 	}
17 	((QComboBox*) labelEditWidget)->setEditable(true);
18 	((QComboBox*) labelEditWidget)->lineEdit()->setToolTip(tr("Edit selected Mark's label. To create new Mark select \"New Mark\" in drop list and input new label."));
19 	connect(((QComboBox*) labelEditWidget), SIGNAL(currentIndexChanged(int)),this,SLOT(onLabelList_currentIndexChanged(int)));
20 	labelLayout->addWidget(labelEditWidget);
21 	textEdit->setToolTip(tr("Edit variable text"));
22 	setWindowTitle(tr("Mark with Variable Text"));
23 }
24 
MarkVariableText(const Mark * mark,QWidget * parent)25 MarkVariableText::MarkVariableText(const Mark* mark, QWidget *parent) : MarkInsert(mark, parent), m_widgetType(LineEdit), m_mark(mark)
26 {
27 	//for editing by marks Manager - user can change label and variable text
28 	setupUi(this);
29 
30 	labelEditWidget = (QWidget*) new QLineEdit(parent);
31 	((QLineEdit*) labelEditWidget)->setToolTip(tr("Edit selected Mark's label"));
32 
33 	labelLayout->addWidget(labelEditWidget);
34 	textEdit->setToolTip(tr("Edit variable text"));
35 	setWindowTitle(tr("Mark with Variable Text"));
36 }
37 
~MarkVariableText()38 MarkVariableText::~MarkVariableText()
39 {
40 	//delete ui;
41 	delete labelEditWidget;
42 }
43 
values(QString & label,QString & text)44 Mark* MarkVariableText::values(QString& label, QString& text)
45 {
46 	text = textEdit->text();
47 	//hack to read if it is QComboBox or QLineEdit
48 	if (m_widgetType == ComboBox)
49 	{
50 		QComboBox* comboBox = (QComboBox*) labelEditWidget;
51 		int labelID = comboBox->currentIndex();
52 		label = comboBox->currentText();
53 		if (label == tr("New Mark"))
54 			label = "VariableMark";
55 		return (Mark*) (comboBox->itemData(labelID).value<void*>());
56 	}
57 	label = ((QLineEdit*) labelEditWidget)->text();
58 	if (label == tr("New Mark"))
59 		label = "VariableMark";
60 	return const_cast<Mark*> (m_mark);
61 }
62 
setValues(QString label,QString text)63 void MarkVariableText::setValues(QString label, QString text)
64 {
65 	if (m_widgetType == LineEdit)
66 		((QLineEdit*) labelEditWidget)->setText(label);
67 	else
68 	{
69 		QComboBox* comboBox = (QComboBox*) labelEditWidget;
70 		comboBox->setCurrentIndex(comboBox->findText(label));
71 	}
72 	textEdit->setText(text);
73 }
74 
changeEvent(QEvent * e)75 void MarkVariableText::changeEvent(QEvent *e)
76 {
77 	QDialog::changeEvent(e);
78 	switch (e->type()) {
79 		case QEvent::LanguageChange:
80 			retranslateUi(this);
81 			break;
82 		default:
83 			break;
84 	}
85 }
86 
onLabelList_currentIndexChanged(int index)87 void MarkVariableText::onLabelList_currentIndexChanged(int index)
88 {
89 	if (index > 0)
90 	{
91 		Mark* mrk = (Mark*) ((QComboBox*) labelEditWidget)->itemData(index).value<void*>();
92 		textEdit->setText(mrk->getString());
93 	}
94 	else
95 	{
96 		((QComboBox*) labelEditWidget)->setEditText("");
97 		textEdit->clear();
98 	}
99 }
100