1414#include < utils/fileutils.h>
1515#include " exception.h"
1616#include " nodeinfowidget.h"
17+ #include " notetemplateselector.h"
1718#include < utils/widgetutils.h>
1819#include < core/templatemgr.h>
1920#include < core/configmgr.h>
@@ -43,27 +44,8 @@ void NewNoteDialog::setupUI(const Node *p_node)
4344
4445 auto infoLayout = m_infoWidget->getMainLayout ();
4546
46- {
47- auto templateLayout = new QHBoxLayout ();
48- templateLayout->setContentsMargins (0 , 0 , 0 , 0 );
49- infoLayout->addRow (tr (" Template:" ), templateLayout);
50-
51- setupTemplateComboBox (m_infoWidget);
52- templateLayout->addWidget (m_templateComboBox);
53-
54- templateLayout->addStretch ();
55-
56- auto manageBtn = new QPushButton (tr (" Manage" ), m_infoWidget);
57- templateLayout->addWidget (manageBtn);
58- connect (manageBtn, &QPushButton::clicked,
59- this , []() {
60- WidgetUtils::openUrlByDesktop (QUrl::fromLocalFile (TemplateMgr::getInst ().getTemplateFolder ()));
61- });
62-
63- m_templateTextEdit = WidgetsFactory::createPlainTextConsole (m_infoWidget);
64- infoLayout->addRow (" " , m_templateTextEdit);
65- m_templateTextEdit->hide ();
66- }
47+ m_templateSelector = new NoteTemplateSelector (m_infoWidget);
48+ infoLayout->addRow (tr (" Template:" ), m_templateSelector);
6749
6850 setDialogButtonBox (QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
6951
@@ -106,41 +88,56 @@ bool NewNoteDialog::validateNameInput(QString &p_msg)
10688
10789void NewNoteDialog::acceptedButtonClicked ()
10890{
109- s_lastTemplate = m_templateComboBox-> currentData (). toString ();
91+ s_lastTemplate = m_templateSelector-> getCurrentTemplate ();
11092
11193 {
11294 auto fileType = FileTypeHelper::getInst ().getFileTypeByName (m_infoWidget->getFileType ()).m_type ;
11395 ConfigMgr::getInst ().getWidgetConfig ().setNewNoteDefaultFileType (static_cast <int >(fileType));
11496 }
11597
116- if (validateInputs () && newNote ()) {
98+ if (validateInputs ()) {
99+ Notebook *notebook = const_cast <Notebook *>(m_infoWidget->getNotebook ());
100+ Node *parentNode = const_cast <Node *>(m_infoWidget->getParentNode ());
101+ QString errMsg;
102+ m_newNode = newNote (notebook,
103+ parentNode,
104+ m_infoWidget->getName (),
105+ m_templateSelector->getTemplateContent (),
106+ errMsg);
107+ if (!m_newNode) {
108+ setInformationText (errMsg, ScrollDialog::InformationLevel::Error);
109+ return ;
110+ }
117111 accept ();
118112 }
119113}
120114
121- bool NewNoteDialog::newNote ()
115+ QSharedPointer<Node> NewNoteDialog::newNote (Notebook *p_notebook,
116+ Node *p_parentNode,
117+ const QString &p_name,
118+ const QString &p_templateContent,
119+ QString &p_errMsg)
122120{
123- m_newNode.clear ();
121+ Q_ASSERT (p_notebook && p_parentNode);
122+
123+ QSharedPointer<Node> newNode;
124+ p_errMsg.clear ();
124125
125- Notebook *notebook = const_cast <Notebook *>(m_infoWidget->getNotebook ());
126- Node *parentNode = const_cast <Node *>(m_infoWidget->getParentNode ());
127126 try {
128- m_newNode = notebook ->newNode (parentNode ,
127+ newNode = p_notebook ->newNode (p_parentNode ,
129128 Node::Flag::Content,
130- m_infoWidget-> getName () ,
131- getTemplateContent ( ));
129+ p_name ,
130+ evaluateTemplateContent (p_templateContent, p_name ));
132131 } catch (Exception &p_e) {
133- QString msg = tr (" Failed to create note under (%1) in (%2) (%3)." ).arg (parentNode->getName (),
134- notebook->getName (),
135- p_e.what ());
136- qCritical () << msg;
137- setInformationText (msg, ScrollDialog::InformationLevel::Error);
138- return false ;
132+ p_errMsg = tr (" Failed to create note under (%1) in (%2) (%3)." ).arg (p_parentNode->getName (),
133+ p_notebook->getName (),
134+ p_e.what ());
135+ qCritical () << p_errMsg;
136+ return nullptr ;
139137 }
140138
141- emit notebook->nodeUpdated (m_newNode.data ());
142-
143- return true ;
139+ emit p_notebook->nodeUpdated (newNode.data ());
140+ return newNode;
144141}
145142
146143const QSharedPointer<Node> &NewNoteDialog::getNewNode () const
@@ -166,66 +163,17 @@ void NewNoteDialog::initDefaultValues(const Node *p_node)
166163
167164 if (!s_lastTemplate.isEmpty ()) {
168165 // Restore.
169- int idx = m_templateComboBox->findData (s_lastTemplate);
170- if (idx != -1 ) {
171- m_templateComboBox->setCurrentIndex (idx);
172- } else {
166+ if (!m_templateSelector->setCurrentTemplate (s_lastTemplate)) {
173167 s_lastTemplate.clear ();
174168 }
175169 }
176170}
177171
178- void NewNoteDialog::setupTemplateComboBox (QWidget *p_parent)
179- {
180- m_templateComboBox = WidgetsFactory::createComboBox (p_parent);
181-
182- // None.
183- m_templateComboBox->addItem (tr (" None" ), " " );
184-
185- int idx = 1 ;
186- auto templates = TemplateMgr::getInst ().getTemplates ();
187- for (const auto &temp : templates) {
188- m_templateComboBox->addItem (temp, temp);
189- m_templateComboBox->setItemData (idx++, temp, Qt::ToolTipRole);
190- }
191-
192- m_templateComboBox->setCurrentIndex (0 );
193-
194- connect (m_templateComboBox, QOverload<int >::of (&QComboBox::currentIndexChanged),
195- this , &NewNoteDialog::updateCurrentTemplate);
196- }
197-
198- QString NewNoteDialog::getTemplateContent () const
172+ QString NewNoteDialog::evaluateTemplateContent (const QString &p_content, const QString &p_name)
199173{
200174 int cursorOffset = 0 ;
201- return SnippetMgr::getInst ().applySnippetBySymbol (m_templateContent ,
175+ return SnippetMgr::getInst ().applySnippetBySymbol (p_content ,
202176 QString (),
203177 cursorOffset,
204- SnippetMgr::generateOverrides (m_infoWidget->getName ()));
205- }
206-
207- void NewNoteDialog::updateCurrentTemplate ()
208- {
209- m_templateContent.clear ();
210- m_templateTextEdit->clear ();
211-
212- auto temp = m_templateComboBox->currentData ().toString ();
213- if (temp.isEmpty ()) {
214- m_templateTextEdit->hide ();
215- return ;
216- }
217-
218- const auto filePath = TemplateMgr::getInst ().getTemplateFilePath (temp);
219- try {
220- m_templateContent = FileUtils::readTextFile (filePath);
221- m_templateTextEdit->setPlainText (m_templateContent);
222- m_templateTextEdit->show ();
223- } catch (Exception &p_e) {
224- m_templateTextEdit->hide ();
225-
226- QString msg = tr (" Failed to load template (%1) (%2)." )
227- .arg (filePath, p_e.what ());
228- qCritical () << msg;
229- setInformationText (msg, ScrollDialog::InformationLevel::Error);
230- }
178+ SnippetMgr::generateOverrides (p_name));
231179}
0 commit comments