kopia lustrzana https://github.com/ctjacobs/pyqso
Added basic copy/paste functionality for individual records.
rodzic
7a162b2a2d
commit
946f03d95f
|
@ -20,7 +20,7 @@
|
||||||
from gi import require_version
|
from gi import require_version
|
||||||
require_version('Gtk', '3.0')
|
require_version('Gtk', '3.0')
|
||||||
require_version('PangoCairo', '1.0')
|
require_version('PangoCairo', '1.0')
|
||||||
from gi.repository import Gtk, GdkPixbuf
|
from gi.repository import Gtk, Gdk, GdkPixbuf
|
||||||
import argparse
|
import argparse
|
||||||
try:
|
try:
|
||||||
import configparser
|
import configparser
|
||||||
|
@ -94,11 +94,15 @@ class PyQSO:
|
||||||
self.logbook = Logbook(self)
|
self.logbook = Logbook(self)
|
||||||
self.toolbox = Toolbox(self)
|
self.toolbox = Toolbox(self)
|
||||||
|
|
||||||
# Set up menu and toolbar. These classes depend on the Logbook and Toolbox class.
|
# Set up the menu and toolbar. These classes depend on the Logbook and Toolbox class.
|
||||||
self.menu = Menu(self)
|
self.menu = Menu(self)
|
||||||
self.popup = Popup(self)
|
self.popup = Popup(self)
|
||||||
self.toolbar = Toolbar(self)
|
self.toolbar = Toolbar(self)
|
||||||
|
|
||||||
|
# Clipboard for copy/paste operations.
|
||||||
|
self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
|
||||||
|
|
||||||
|
# Show the main window.
|
||||||
self.window.show_all()
|
self.window.show_all()
|
||||||
|
|
||||||
if(have_config):
|
if(have_config):
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
import logging
|
import logging
|
||||||
import sqlite3 as sqlite
|
import sqlite3 as sqlite
|
||||||
|
import json
|
||||||
from os.path import expanduser
|
from os.path import expanduser
|
||||||
try:
|
try:
|
||||||
import configparser
|
import configparser
|
||||||
|
@ -1068,6 +1069,49 @@ class Logbook:
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def copy_callback(self, widget=None, path=None):
|
||||||
|
""" A callback function used to copy selected logs. """
|
||||||
|
|
||||||
|
try:
|
||||||
|
log_index = self.get_log_index()
|
||||||
|
row_index = self.get_record_index()
|
||||||
|
if(log_index is None or row_index is None):
|
||||||
|
raise ValueError("Could not determine the log and/or record index.")
|
||||||
|
r = self.logs[log_index].get_record_by_index(row_index)
|
||||||
|
except ValueError as e:
|
||||||
|
logging.error(e)
|
||||||
|
return
|
||||||
|
|
||||||
|
d = {}
|
||||||
|
for key in r.keys():
|
||||||
|
d[key.upper()] = r[key]
|
||||||
|
j = json.dumps(d)
|
||||||
|
|
||||||
|
self.application.clipboard.set_text(j, len(j))
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
def clipboard_text_received(self, clipboard, text, log):
|
||||||
|
r = json.loads(text)
|
||||||
|
log.add_record(r)
|
||||||
|
return
|
||||||
|
|
||||||
|
def paste_callback(self, widget=None, path=None):
|
||||||
|
""" A callback function used to paste selected logs. """
|
||||||
|
|
||||||
|
try:
|
||||||
|
log_index = self.get_log_index()
|
||||||
|
if(log_index is None):
|
||||||
|
raise ValueError("Could not determine the log index.")
|
||||||
|
l = self.logs[log_index]
|
||||||
|
except ValueError as e:
|
||||||
|
logging.error(e)
|
||||||
|
return
|
||||||
|
|
||||||
|
self.application.clipboard.request_text(self.clipboard_text_received, l)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def log_count(self):
|
def log_count(self):
|
||||||
""" Return the total number of logs in the logbook.
|
""" Return the total number of logs in the logbook.
|
||||||
|
|
|
@ -37,4 +37,10 @@ class Popup:
|
||||||
self.items["PINPOINT"] = self.builder.get_object("mitem_pinpoint")
|
self.items["PINPOINT"] = self.builder.get_object("mitem_pinpoint")
|
||||||
self.items["PINPOINT"].connect("activate", self.application.logbook.pinpoint_callback)
|
self.items["PINPOINT"].connect("activate", self.application.logbook.pinpoint_callback)
|
||||||
|
|
||||||
|
self.items["COPY"] = self.builder.get_object("mitem_copy")
|
||||||
|
self.items["COPY"].connect("activate", self.application.logbook.copy_callback)
|
||||||
|
|
||||||
|
self.items["PASTE"] = self.builder.get_object("mitem_paste")
|
||||||
|
self.items["PASTE"].connect("activate", self.application.logbook.paste_callback)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
|
@ -4558,6 +4558,24 @@ Base64-encoded plain text in the configuration file.</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="mitem_copy">
|
||||||
|
<property name="label">gtk-copy</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImageMenuItem" id="mitem_paste">
|
||||||
|
<property name="label">gtk-paste</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<object class="GtkBox" id="summary_page">
|
<object class="GtkBox" id="summary_page">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
|
Ładowanie…
Reference in New Issue