update eaf package
This commit is contained in:
@@ -20,33 +20,42 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from PyQt5 import QtCore
|
||||
from PyQt5.QtCore import QUrl, QTimer
|
||||
from PyQt5.QtCore import QUrl, QTimer, QEvent, QPointF, Qt
|
||||
from PyQt5.QtWidgets import QApplication
|
||||
from PyQt5.QtGui import QColor
|
||||
from PyQt5.QtGui import QColor, QMouseEvent
|
||||
from core.browser import BrowserBuffer
|
||||
from core.utils import touch, string_to_base64, interactive
|
||||
from html import escape, unescape
|
||||
import os
|
||||
import base64
|
||||
import time
|
||||
|
||||
class AppBuffer(BrowserBuffer):
|
||||
|
||||
get_middle_node_id = QtCore.pyqtSignal(str)
|
||||
get_brother_node_id = QtCore.pyqtSignal(str)
|
||||
get_sub_node_id = QtCore.pyqtSignal(str)
|
||||
export_org_json = QtCore.pyqtSignal(str, str)
|
||||
|
||||
def __init__(self, buffer_id, url, config_dir, arguments, emacs_var_dict, module_path):
|
||||
BrowserBuffer.__init__(self, buffer_id, url, config_dir, arguments, emacs_var_dict, module_path, False)
|
||||
|
||||
self.url = url
|
||||
index_file = "file://" + (os.path.join(os.path.dirname(__file__), "index.html"))
|
||||
self.buffer_widget.setUrl(QUrl(index_file))
|
||||
index_file = os.path.join(os.path.dirname(__file__), "index.html")
|
||||
self.buffer_widget.setUrl(QUrl.fromLocalFile(index_file))
|
||||
|
||||
self.cut_node_id = None
|
||||
|
||||
for method_name in ["add_sub_node", "add_brother_node", "remove_node", "remove_middle_node", "add_middle_node", "update_node_topic_inline"]:
|
||||
edit_mode = "true" if self.emacs_var_dict["eaf-mindmap-edit-mode"] == "true" else "false"
|
||||
for method_name in ["add_sub_node", "add_brother_node", "add_middle_node"]:
|
||||
self.build_js_method(method_name, True, js_kwargs={"inline": edit_mode})
|
||||
|
||||
for method_name in ["remove_node", "remove_middle_node", "update_node_topic_inline"]:
|
||||
self.build_js_method(method_name, True)
|
||||
|
||||
for method_name in ["zoom_in", "zoom_out", "zoom_reset",
|
||||
"select_up_node", "select_down_node", "select_left_node", "select_right_node",
|
||||
"toggle_node", "save_screenshot"]:
|
||||
"toggle_node", "toggle_node_selection", "save_screenshot"]:
|
||||
self.build_js_method(method_name)
|
||||
|
||||
for method_name in ["zoom_in", "zoom_out", "zoom_reset", "remove_node",
|
||||
@@ -57,11 +66,16 @@ class AppBuffer(BrowserBuffer):
|
||||
|
||||
self.build_all_methods(self)
|
||||
|
||||
QTimer.singleShot(500, self.init_file)
|
||||
QTimer.singleShot(500, self.initialize)
|
||||
|
||||
def resize_view(self):
|
||||
self.buffer_widget.eval_js("relayout();")
|
||||
|
||||
def initialize(self):
|
||||
self.init_file()
|
||||
|
||||
self.focus_widget(QMouseEvent(QEvent.MouseButtonPress, QPointF(0, 0), Qt.LeftButton, Qt.LeftButton, Qt.NoModifier))
|
||||
|
||||
def init_file(self):
|
||||
self.url = os.path.expanduser(self.url)
|
||||
|
||||
@@ -73,20 +87,38 @@ class AppBuffer(BrowserBuffer):
|
||||
|
||||
color = "#FFFFFF"
|
||||
if self.emacs_var_dict["eaf-mindmap-dark-mode"] == "true" or \
|
||||
(self.emacs_var_dict["eaf-mindmap-dark-mode"] == "" and self.emacs_var_dict["eaf-emacs-theme-mode"] == "dark"):
|
||||
(self.emacs_var_dict["eaf-mindmap-dark-mode"] == "follow" and self.emacs_var_dict["eaf-emacs-theme-mode"] == "dark"):
|
||||
color = "#242525"
|
||||
self.buffer_widget.eval_js("init_background('{}');".format(color))
|
||||
|
||||
self.change_title(self.get_root_node_topic())
|
||||
|
||||
def build_js_method(self, method_name, auto_save=False):
|
||||
def build_js_method(self, method_name, auto_save=False, js_kwargs=None):
|
||||
js_kwargs = js_kwargs or {}
|
||||
js_func_args = ", ".join('{}={}'.format(k, v) for k, v in js_kwargs.items())
|
||||
def _do ():
|
||||
self.buffer_widget.eval_js("{}();".format(method_name))
|
||||
self.buffer_widget.eval_js("{}({});".format(method_name, js_func_args))
|
||||
|
||||
if auto_save:
|
||||
self.save_file(False)
|
||||
setattr(self, method_name, _do)
|
||||
|
||||
@interactive
|
||||
def refresh_page(self):
|
||||
self.url = os.path.expanduser(self.url)
|
||||
|
||||
if os.path.exists(self.url):
|
||||
with open(self.url, "r") as f:
|
||||
self.buffer_widget.execute_js("refresh('{}');".format(string_to_base64(f.read())))
|
||||
|
||||
color = "#FFFFFF"
|
||||
if self.emacs_var_dict["eaf-mindmap-dark-mode"] == "true" or \
|
||||
(self.emacs_var_dict["eaf-mindmap-dark-mode"] == "follow" and self.emacs_var_dict["eaf-emacs-theme-mode"] == "dark"):
|
||||
color = "#242525"
|
||||
self.buffer_widget.eval_js("init_background('{}');".format(color))
|
||||
|
||||
self.change_title(self.get_root_node_topic())
|
||||
|
||||
@interactive(insert_or_do=True)
|
||||
def change_background_color(self):
|
||||
self.send_input_message("Change node background color(Input color): ", "change_background_color")
|
||||
@@ -98,12 +130,12 @@ class AppBuffer(BrowserBuffer):
|
||||
@interactive(insert_or_do=True)
|
||||
def copy_node_topic(self):
|
||||
node_topic = self.buffer_widget.execute_js("get_node_topic();")
|
||||
self.eval_in_emacs.emit('''(kill-new "{}")'''.format(node_topic))
|
||||
self.eval_in_emacs.emit('kill-new', [node_topic])
|
||||
self.message_to_emacs.emit("Copy: {}".format(node_topic))
|
||||
|
||||
@interactive(insert_or_do=True)
|
||||
def paste_node_topic(self):
|
||||
text = QApplication.clipboard().text()
|
||||
text = self.get_clipboard_text()
|
||||
if text.strip() != "":
|
||||
self.buffer_widget.eval_js("update_node_topic('{}');".format(text))
|
||||
self.message_to_emacs.emit("Paste: {}".format(text))
|
||||
@@ -138,26 +170,63 @@ class AppBuffer(BrowserBuffer):
|
||||
"Update topic: ",
|
||||
"update_node_topic",
|
||||
"string",
|
||||
self.buffer_widget.execute_js("get_node_topic();"))
|
||||
unescape(self.buffer_widget.execute_js("get_node_topic();")))
|
||||
|
||||
def handle_update_node_topic(self, topic):
|
||||
self.buffer_widget.eval_js("update_node_topic('{}');".format(topic))
|
||||
self.buffer_widget.eval_js("update_node_topic('{}');".format(escape(topic)))
|
||||
|
||||
self.change_title(self.get_root_node_topic())
|
||||
|
||||
self.save_file(False)
|
||||
|
||||
def handle_input_message(self, result_type, result_content):
|
||||
if result_type == "update_node_topic":
|
||||
def handle_input_response(self, callback_tag, result_content):
|
||||
if callback_tag == "update_node_topic":
|
||||
self.handle_update_node_topic(str(result_content))
|
||||
elif result_type == "change_node_background":
|
||||
elif callback_tag == "change_node_background":
|
||||
print(str(result_content))
|
||||
self.buffer_widget.eval_js("change_node_background('{}');".format(str(result_content)))
|
||||
elif result_type == "change_background_color":
|
||||
elif callback_tag == "change_background_color":
|
||||
self.buffer_widget.eval_js("change_background_color('{}');".format(str(result_content)))
|
||||
elif result_type == "change_text_color":
|
||||
elif callback_tag == "change_text_color":
|
||||
self.buffer_widget.eval_js("change_text_color('{}');".format(str(result_content)))
|
||||
|
||||
def add_multiple_sub_nodes(self):
|
||||
node_id = self.buffer_widget.execute_js("_jm.get_selected_node();")
|
||||
if node_id != None:
|
||||
self.get_sub_node_id.emit(self.buffer_id)
|
||||
else:
|
||||
self.message_to_emacs.emit("No selected node.")
|
||||
|
||||
def add_multiple_brother_nodes(self):
|
||||
node_id = self.buffer_widget.execute_js("_jm.get_selected_node();")
|
||||
if node_id == None:
|
||||
self.message_to_emacs.emit("No selected node.")
|
||||
elif not self.buffer_widget.execute_js("_jm.get_selected_node().parent;"):
|
||||
self.message_to_emacs.emit("No parent node for selected node.")
|
||||
else:
|
||||
self.get_brother_node_id.emit(self.buffer_id)
|
||||
|
||||
def add_multiple_middle_nodes(self):
|
||||
node_id = self.buffer_widget.execute_js("_jm.get_selected_node();")
|
||||
if node_id == None:
|
||||
self.message_to_emacs.emit("No selected node.")
|
||||
elif not self.buffer_widget.execute_js("_jm.get_selected_node().parent;"):
|
||||
self.message_to_emacs.emit("No parent node for selected node.")
|
||||
else:
|
||||
self.get_middle_node_id.emit(self.buffer_id)
|
||||
|
||||
@interactive
|
||||
def add_texted_sub_node(self,text):
|
||||
self.buffer_widget.eval_js("add_texted_sub_node('{}');".format(str(text)))
|
||||
|
||||
@interactive
|
||||
def add_texted_brother_node(self,text):
|
||||
self.buffer_widget.eval_js("add_texted_brother_node('{}');".format(str(text)))
|
||||
|
||||
@interactive
|
||||
def add_texted_middle_node(self,text):
|
||||
self.buffer_widget.eval_js("add_texted_middle_node('{}');".format(str(text)))
|
||||
|
||||
def is_focus(self):
|
||||
return self.buffer_widget.execute_js("node_is_focus();")
|
||||
|
||||
@@ -174,7 +243,7 @@ class AppBuffer(BrowserBuffer):
|
||||
|
||||
def get_save_path(self, extension_name):
|
||||
if self.url.strip() == "":
|
||||
return os.path.join(os.path.expanduser(self.emacs_var_dict["eaf-mindmap-save-path"]), self.get_root_node_topic() + "." + extension_name)
|
||||
return os.path.join(os.path.expanduser(self.emacs_var_dict["eaf-mindmap-save-path"]), self.get_root_node_topic().replace(" ", "_") + time.strftime("_%Y%m%d_%H%M%S", time.localtime(int(time.time()))) + "." + extension_name)
|
||||
else:
|
||||
return os.path.splitext(self.url)[0] + "." + extension_name
|
||||
|
||||
|
||||
Reference in New Issue
Block a user