summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Cecchetti <marco.cecchetti@collabora.com>2019-11-27 22:56:50 +0100
committerMarco Cecchetti <marco.cecchetti@collabora.com>2019-12-02 17:34:13 +0100
commit836ce7d636e8a2d0fec1e9c9801c3125df1c5d65 (patch)
tree50ae9ee0c42dd4fcef57175362b29a03c47c4c80
parentfe04d685dbed3048c74a7ffdc0cb84d6e6824162 (diff)
formula bar: function complete
lok clients can request to complete a function name partially typed in the formula input box. Change-Id: If8e4485c5ed9f91a594dfcec04e0c0b10becdcd0 Reviewed-on: https://gerrit.libreoffice.org/83985 Reviewed-by: Marco Cecchetti <marco.cecchetti@collabora.com> Tested-by: Marco Cecchetti <marco.cecchetti@collabora.com>
-rw-r--r--bundled/include/LibreOfficeKit/LibreOfficeKit.h4
-rw-r--r--bundled/include/LibreOfficeKit/LibreOfficeKit.hxx10
-rw-r--r--kit/ChildSession.cpp24
-rw-r--r--kit/ChildSession.hpp1
-rw-r--r--loleaflet/src/control/Control.JSDialogBuilder.js4
-rw-r--r--loleaflet/src/layer/tile/TileLayer.js4
-rw-r--r--wsd/ClientSession.cpp17
7 files changed, 60 insertions, 4 deletions
diff --git a/bundled/include/LibreOfficeKit/LibreOfficeKit.h b/bundled/include/LibreOfficeKit/LibreOfficeKit.h
index a486886c1..4c9e6c66b 100644
--- a/bundled/include/LibreOfficeKit/LibreOfficeKit.h
+++ b/bundled/include/LibreOfficeKit/LibreOfficeKit.h
@@ -436,6 +436,10 @@ struct _LibreOfficeKitDocumentClass
const double dpiscale,
int viewId);
+ /// @see lok::Document::completeFunction
+ void (*completeFunction) (LibreOfficeKitDocument* pThis,
+ int nIndex);
+
#endif // defined LOK_USE_UNSTABLE_API || defined LIBO_INTERNAL_ONLY
};
diff --git a/bundled/include/LibreOfficeKit/LibreOfficeKit.hxx b/bundled/include/LibreOfficeKit/LibreOfficeKit.hxx
index ae17e4e71..d50ef4823 100644
--- a/bundled/include/LibreOfficeKit/LibreOfficeKit.hxx
+++ b/bundled/include/LibreOfficeKit/LibreOfficeKit.hxx
@@ -757,6 +757,16 @@ public:
mpDoc->pClass->removeTextContext(mpDoc, nWindowId, nBefore, nAfter);
}
+ /**
+ * Select the Calc function to be pasted into the formula input box
+ *
+ * @param nIndex is the index of the selected function
+ */
+ void completeFunction(int nIndex)
+ {
+ mpDoc->pClass->completeFunction(mpDoc, nIndex);
+ }
+
#endif // defined LOK_USE_UNSTABLE_API || defined LIBO_INTERNAL_ONLY
};
diff --git a/kit/ChildSession.cpp b/kit/ChildSession.cpp
index d07125a5c..7e8c1f70c 100644
--- a/kit/ChildSession.cpp
+++ b/kit/ChildSession.cpp
@@ -296,7 +296,8 @@ bool ChildSession::_handleInput(const char *buffer, int length)
tokens[0] == "exportsignanduploaddocument" ||
tokens[0] == "rendershapeselection" ||
tokens[0] == "removetextcontext" ||
- tokens[0] == "dialogevent");
+ tokens[0] == "dialogevent" ||
+ tokens[0] == "completefunction");
if (tokens[0] == "clientzoom")
{
@@ -432,6 +433,10 @@ bool ChildSession::_handleInput(const char *buffer, int length)
{
return dialogEvent(buffer, length, tokens);
}
+ else if (tokens[0] == "completefunction")
+ {
+ return completeFunction(buffer, length, tokens);
+ }
else
{
assert(false && "Unknown command token.");
@@ -1405,6 +1410,23 @@ bool ChildSession::dialogEvent(const char* /*buffer*/, int /*length*/, const std
return true;
}
+bool ChildSession::completeFunction(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens)
+{
+ int index;
+
+ if (tokens.size() != 2 ||
+ !getTokenInteger(tokens[1], "index", index))
+ {
+ sendTextFrame("error: cmd=completefunction kind=syntax");
+ return false;
+ }
+
+ getLOKitDocument()->setView(_viewId);
+
+ getLOKitDocument()->completeFunction(index);
+ return true;
+}
+
bool ChildSession::unoCommand(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens)
{
if (tokens.size() <= 1)
diff --git a/kit/ChildSession.hpp b/kit/ChildSession.hpp
index 88e445671..8404bcddc 100644
--- a/kit/ChildSession.hpp
+++ b/kit/ChildSession.hpp
@@ -262,6 +262,7 @@ private:
bool mouseEvent(const char* buffer, int length, const std::vector<std::string>& tokens, const LokEventTargetEnum target);
bool gestureEvent(const char* buffer, int length, const std::vector<std::string>& tokens);
bool dialogEvent(const char* buffer, int length, const std::vector<std::string>& tokens);
+ bool completeFunction(const char* buffer, int length, const std::vector<std::string>& tokens);
bool unoCommand(const char* buffer, int length, const std::vector<std::string>& tokens);
bool selectText(const char* buffer, int length, const std::vector<std::string>& tokens);
bool selectGraphic(const char* buffer, int length, const std::vector<std::string>& tokens);
diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js b/loleaflet/src/control/Control.JSDialogBuilder.js
index 4a8bd352b..b7e3bfa9e 100644
--- a/loleaflet/src/control/Control.JSDialogBuilder.js
+++ b/loleaflet/src/control/Control.JSDialogBuilder.js
@@ -320,11 +320,15 @@ L.Control.JSDialogBuilder = L.Control.extend({
$(contentDiv).hide();
if (builder.wizard) {
+ var that = this;
$(rightDiv).click(function() {
builder.wizard.goLevelDown(contentDiv);
if (contentNode.onshow)
contentNode.onshow();
});
+ $(leftDiv).click(function() {
+ that.map._socket.sendMessage('completefunction index=' + data.index);
+ });
} else {
console.debug('Builder used outside of mobile wizard: please implement the click handler');
}
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index a84bed916..d2bee6cf1 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -751,7 +751,6 @@ L.TileLayer = L.GridLayer.extend({
},
_onCalcFunctionListMsg: function (textMsg) {
- console.log('_onCalcFunctionList: textMsg: ' + textMsg);
var funcList = JSON.parse(textMsg);
this._closeMobileWizard();
@@ -764,13 +763,14 @@ L.TileLayer = L.GridLayer.extend({
};
var entries = data.children;
- for (var idx in funcList) {
+ for (var idx = 0; idx < funcList.length; ++idx) {
var func = funcList[idx];
var name = func.signature.split('(')[0];
var entry = {
id: '',
type: 'calcfuncpanel',
text: name,
+ index: idx,
enabled: true,
children: []
}
diff --git a/wsd/ClientSession.cpp b/wsd/ClientSession.cpp
index 51ec92ef5..43bc0ecbb 100644
--- a/wsd/ClientSession.cpp
+++ b/wsd/ClientSession.cpp
@@ -427,7 +427,8 @@ bool ClientSession::_handleInput(const char *buffer, int length)
tokens[0] != "renamefile" &&
tokens[0] != "resizewindow" &&
tokens[0] != "removetextcontext" &&
- tokens[0] != "dialogevent")
+ tokens[0] != "dialogevent" &&
+ tokens[0] != "completefunction")
{
LOG_ERR("Session [" << getId() << "] got unknown command [" << tokens[0] << "].");
sendTextFrame("error: cmd=" + tokens[0] + " kind=unknown");
@@ -705,6 +706,20 @@ bool ClientSession::_handleInput(const char *buffer, int length)
{
return forwardToChild(firstLine, docBroker);
}
+ else if (tokens[0] == "completefunction")
+ {
+ int temp;
+ if (tokens.size() != 2 ||
+ !getTokenInteger(tokens[1], "index", temp))
+ {
+ LOG_WRN("Invalid syntax for '" << tokens[0] << "' message: [" << firstLine << "].");
+ return true;
+ }
+ else
+ {
+ return forwardToChild(std::string(buffer, length), docBroker);
+ }
+ }
else
{
if (tokens[0] == "key")