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>&lt;varslot&gt;</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                : [email protected]
  ***************************************************************************/
 
@@ -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()

Reply via email to