[rkward] /: Allow to reference current script file name in plugins (untested)

Thomas Friedrichsmeier null at kde.org
Sat Sep 29 15:48:47 BST 2018


Git commit f605ff01d8429d7f4b548e15e81f5cc4f6339b76 by Thomas Friedrichsmeier.
Committed on 29/09/2018 at 14:47.
Pushed by tfry into branch 'master'.

Allow to reference current script file name in plugins (untested)

M  +1    -0    ChangeLog
M  +3    -2    doc/rkwardplugins/index.docbook
M  +8    -2    rkward/plugin/rkstandardcomponent.cpp
M  +2    -1    rkward/windows/rkcommandeditorwindow.cpp

https://commits.kde.org/rkward/f605ff01d8429d7f4b548e15e81f5cc4f6339b76

diff --git a/ChangeLog b/ChangeLog
index f794e6ff..13fa1374 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,5 @@
 --- Version 0.7.1 - UNRELEASED
+- Allow to reference current script file in plugins      TODO: Test this
 - Add various live-preview options for R scripts, including a preview of R markdown rendering
 - Make it possible to "link" to specific settings pages from the internal documentation
 - Slighlty less confusing output in case a package is installed from require(), such as in many plugins
diff --git a/doc/rkwardplugins/index.docbook b/doc/rkwardplugins/index.docbook
index 39c04bd1..516bfe45 100644
--- a/doc/rkwardplugins/index.docbook
+++ b/doc/rkwardplugins/index.docbook
@@ -1702,9 +1702,10 @@ This chapter contains information on some topics that are useful only to certain
 </sect1>
 
 <sect1 id="current_object">
-<title>Referencing the current object</title>
+<title>Referencing the current object or current file</title>
 	<para>
-		For many plugins it is desirable to work on the <quote>current</quote> object. For instance a <quote>sort</quote> plugin could pre-select the data.frame that is currently being edited for sorting. The name of the current object is available to plugins as a pre-defined property called <parameter>current_object</parameter>. You can connect to this property in the usual way. If no object is current, the property equates to an empty string.
+		For many plugins it is desirable to work on the <quote>current</quote> object. For instance a <quote>sort</quote> plugin could pre-select the data.frame that is currently being edited for sorting. The name of the current object is available to plugins as a pre-defined property called <parameter>current_object</parameter>. You can connect to this property in the usual way. If no object is current, the property equates to an empty string. Similarly, the url of the current script file
+		is accessible as a pre-defined property called <parameter>current_filename</parameter>. That property is empty if no script file is currently being edited, or the script file has not been saved, yet.
 	</para>
 	<para>
 		Currently the <parameter>current_object</parameter> can only be of class <function>data.frame</function>, but please do not rely on this, since this will be extended to other types of data in the future. If you are interested in <function>data.frame</function> objects, only, connect to the <parameter>current_dataframe</parameter> property, instead. Alternatively, you can enforce type requirements by using appropriate constraints on your <command><varslot></command>s, or by using <link linkend="logic_scripted">GUI logic scripting</link>.
diff --git a/rkward/plugin/rkstandardcomponent.cpp b/rkward/plugin/rkstandardcomponent.cpp
index 89538c00..95d05d06 100644
--- a/rkward/plugin/rkstandardcomponent.cpp
+++ b/rkward/plugin/rkstandardcomponent.cpp
@@ -2,7 +2,7 @@
                           rkstandardcomponent  -  description
                              -------------------
     begin                : Sun Feb 19 2006
-    copyright            : (C) 2006-2016 by Thomas Friedrichsmeier
+    copyright            : (C) 2006-2018 by Thomas Friedrichsmeier
     email                : thomas.friedrichsmeier at kdemail.net
  ***************************************************************************/
 
@@ -80,13 +80,19 @@ RKStandardComponent::RKStandardComponent (RKComponent *parent_component, QWidget
 
 	RKComponentPropertyRObjects *current_object_property = new RKComponentPropertyRObjects (this, false);
 	RKComponentPropertyRObjects *current_dataframe_property = new RKComponentPropertyRObjects (this, false);
+	RKComponentPropertyBase *current_filename_property = new RKComponentPropertyBase (this, false);
 	current_object_property->setInternal (true);
 	current_dataframe_property->setInternal (true);
+	current_filename_property->setInternal (false);
 	RKMDIWindow *w = RKWorkplace::mainWorkplace ()->activeWindow (RKMDIWindow::AnyWindowState);
-	if (w) current_object_property->setValue (w->globalContextProperty ("current_object"));
+	if (w) {
+		current_object_property->setValue (w->globalContextProperty ("current_object"));
+		current_filename_property->setValue (w->globalContextProperty ("current_filename"));
+	}
 	if (current_object_property->objectValue () && current_object_property->objectValue ()->isDataFrame ()) current_dataframe_property->setObjectValue (current_object_property->objectValue ());
 	addChild ("current_object", current_object_property);
 	addChild ("current_dataframe", current_dataframe_property);
+	addChild ("current_filename", current_filename_property);
 
 	// open the main description file for parsing
 	XMLHelper* xml = getXmlHelper ();
diff --git a/rkward/windows/rkcommandeditorwindow.cpp b/rkward/windows/rkcommandeditorwindow.cpp
index e0d29772..b924a0d8 100644
--- a/rkward/windows/rkcommandeditorwindow.cpp
+++ b/rkward/windows/rkcommandeditorwindow.cpp
@@ -208,7 +208,8 @@ RKCommandEditorWindow::RKCommandEditorWindow (QWidget *parent, const QUrl _url,
 	preview_widget->hide ();
 	layout->addWidget(preview_splitter);
 
-	connect (m_doc, &KTextEditor::Document::documentUrlChanged, this, &RKCommandEditorWindow::updateCaption);
+	setGlobalContextProperty ("current_filename", m_doc->url ().url ());
+	connect (m_doc, &KTextEditor::Document::documentUrlChanged, [this]() { updateCaption(); setGlobalContextProperty ("current_filename", m_doc->url ().url ()); });
 	connect (m_doc, &KTextEditor::Document::modifiedChanged, this, &RKCommandEditorWindow::updateCaption);                // of course most of the time this causes a redundant call to updateCaption. Not if a modification is undone, however.
 #ifdef __GNUC__
 #warning remove this in favor of KTextEditor::Document::restore()


More information about the kde-doc-english mailing list