Merge branch 'pendingUI' into main
This commit is contained in:
commit
206c7f2455
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!-- Generated with glade 3.22.1 -->
|
<!-- Generated with glade 3.36.0 -->
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="3.20"/>
|
<requires lib="gtk+" version="3.20"/>
|
||||||
<object class="GtkApplicationWindow" id="mainWindow">
|
<object class="GtkApplicationWindow" id="mainWindow">
|
||||||
@ -7,21 +7,6 @@
|
|||||||
<property name="resizable">False</property>
|
<property name="resizable">False</property>
|
||||||
<property name="default_width">250</property>
|
<property name="default_width">250</property>
|
||||||
<property name="default_height">250</property>
|
<property name="default_height">250</property>
|
||||||
<child type="titlebar">
|
|
||||||
<object class="GtkHeaderBar">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="show_close_button">True</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkStackSwitcher">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="margin_left">10</property>
|
|
||||||
<property name="stack">sendReceiveStack</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkStack" id="sendReceiveStack">
|
<object class="GtkStack" id="sendReceiveStack">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
@ -111,17 +96,28 @@
|
|||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkBox">
|
<object class="GtkBox" id="pendingBox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="margin_left">16</property>
|
<property name="margin_start">16</property>
|
||||||
<property name="margin_right">16</property>
|
<property name="margin_end">16</property>
|
||||||
<property name="margin_top">16</property>
|
<property name="margin_top">16</property>
|
||||||
<property name="margin_bottom">16</property>
|
<property name="margin_bottom">16</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
<child>
|
<child>
|
||||||
<placeholder/>
|
<object class="GtkListBox" id="pendingTransfersList">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
<style>
|
||||||
|
<class name=".pendingArea"/>
|
||||||
|
</style>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="name">Pending</property>
|
<property name="name">Pending</property>
|
||||||
@ -131,6 +127,21 @@
|
|||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
<child type="titlebar">
|
||||||
|
<object class="GtkHeaderBar">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="show_close_button">True</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkStackSwitcher">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="margin_left">10</property>
|
||||||
|
<property name="stack">sendReceiveStack</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<object class="GtkFileChooserDialog" id="filePicker">
|
<object class="GtkFileChooserDialog" id="filePicker">
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
@ -139,9 +150,6 @@
|
|||||||
<property name="transient_for">mainWindow</property>
|
<property name="transient_for">mainWindow</property>
|
||||||
<property name="has_resize_grip">True</property>
|
<property name="has_resize_grip">True</property>
|
||||||
<property name="select_multiple">True</property>
|
<property name="select_multiple">True</property>
|
||||||
<child type="titlebar">
|
|
||||||
<placeholder/>
|
|
||||||
</child>
|
|
||||||
<child internal-child="vbox">
|
<child internal-child="vbox">
|
||||||
<object class="GtkBox">
|
<object class="GtkBox">
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
@ -169,5 +177,8 @@
|
|||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
<child type="titlebar">
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
51
dropship.py
51
dropship.py
@ -12,9 +12,11 @@ import trio_gtk
|
|||||||
gi.require_version("Gtk", "3.0")
|
gi.require_version("Gtk", "3.0")
|
||||||
gi.require_version("Gdk", "3.0")
|
gi.require_version("Gdk", "3.0")
|
||||||
|
|
||||||
from gi.repository import Gdk as gdk
|
from gi.repository import Gdk
|
||||||
from gi.repository import GLib as glib
|
from gi.repository import GLib
|
||||||
from gi.repository import Gtk as gtk
|
from gi.repository import Gtk
|
||||||
|
|
||||||
|
from ui_templates import pendingTransferRow
|
||||||
|
|
||||||
logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO"))
|
logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO"))
|
||||||
|
|
||||||
@ -30,7 +32,7 @@ class DropShip:
|
|||||||
self.CSS_FILE = "dropship.css"
|
self.CSS_FILE = "dropship.css"
|
||||||
self.DOWNLOAD_DIR = os.path.expanduser("~")
|
self.DOWNLOAD_DIR = os.path.expanduser("~")
|
||||||
|
|
||||||
self.clipboard = gtk.Clipboard.get(gdk.SELECTION_CLIPBOARD)
|
self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
|
||||||
self.nursery = nursery
|
self.nursery = nursery
|
||||||
|
|
||||||
self.init_glade()
|
self.init_glade()
|
||||||
@ -40,42 +42,39 @@ class DropShip:
|
|||||||
|
|
||||||
def init_glade(self):
|
def init_glade(self):
|
||||||
"""Initialise the GUI from Glade file."""
|
"""Initialise the GUI from Glade file."""
|
||||||
self.builder = gtk.Builder()
|
self.builder = Gtk.Builder()
|
||||||
self.builder.add_from_file(self.GLADE_FILE)
|
self.builder.add_from_file(self.GLADE_FILE)
|
||||||
self.builder.connect_signals(self)
|
self.builder.connect_signals(self)
|
||||||
|
|
||||||
def init_css(self):
|
def init_css(self):
|
||||||
"""Initialise CSS injection."""
|
"""Initialise CSS injection."""
|
||||||
self.screen = gdk.Screen.get_default()
|
self.screen = Gdk.Screen.get_default()
|
||||||
self.provider = gtk.CssProvider()
|
self.provider = Gtk.CssProvider()
|
||||||
self.provider.load_from_path(self.CSS_FILE)
|
self.provider.load_from_path(self.CSS_FILE)
|
||||||
gtk.StyleContext.add_provider_for_screen(
|
Gtk.StyleContext.add_provider_for_screen(
|
||||||
self.screen, self.provider, gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
|
self.screen, self.provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
|
||||||
)
|
)
|
||||||
|
|
||||||
def init_window(self):
|
def init_window(self):
|
||||||
"""Initialise the Main GUI window."""
|
"""Initialise the Main GUI window."""
|
||||||
self.main_window_id = "mainWindow"
|
self.main_window_id = "mainWindow"
|
||||||
self.window = self.builder.get_object(self.main_window_id)
|
self.window = self.builder.get_object(self.main_window_id)
|
||||||
self.window.connect("delete-event", gtk.main_quit)
|
self.window.connect("delete-event", Gtk.main_quit)
|
||||||
self.window.show()
|
self.window.show()
|
||||||
|
|
||||||
def init_ui_elements(self):
|
def init_ui_elements(self):
|
||||||
"""Initialize the UI elements."""
|
"""Initialize the UI elements."""
|
||||||
|
|
||||||
# TODO (rra) find out how to use composite templates
|
|
||||||
# https://github.com/sebp/PyGObject-Tutorial/issues/149
|
|
||||||
|
|
||||||
# Send UI
|
# Send UI
|
||||||
# Drag & Drop Box
|
# Drag & Drop Box
|
||||||
self.files_to_send = ""
|
self.files_to_send = ""
|
||||||
self.enforce_target = gtk.TargetEntry.new(
|
self.enforce_target = Gtk.TargetEntry.new(
|
||||||
"text/uri-list", gtk.TargetFlags(4), 129
|
"text/uri-list", Gtk.TargetFlags(4), 129
|
||||||
)
|
)
|
||||||
|
|
||||||
self.drop_box = self.builder.get_object("dropBox")
|
self.drop_box = self.builder.get_object("dropBox")
|
||||||
self.drop_box.drag_dest_set(
|
self.drop_box.drag_dest_set(
|
||||||
gtk.DestDefaults.ALL, [self.enforce_target], gdk.DragAction.COPY
|
Gtk.DestDefaults.ALL, [self.enforce_target], Gdk.DragAction.COPY
|
||||||
)
|
)
|
||||||
self.drop_box.connect("drag-data-received", self.on_drop)
|
self.drop_box.connect("drag-data-received", self.on_drop)
|
||||||
self.drop_label = self.builder.get_object("dropLabel")
|
self.drop_label = self.builder.get_object("dropLabel")
|
||||||
@ -84,7 +83,7 @@ class DropShip:
|
|||||||
# File chooser
|
# File chooser
|
||||||
self.file_chooser = self.builder.get_object("filePicker")
|
self.file_chooser = self.builder.get_object("filePicker")
|
||||||
self.file_chooser.add_buttons(
|
self.file_chooser.add_buttons(
|
||||||
"Cancel", gtk.ResponseType.CANCEL, "Add", gtk.ResponseType.OK
|
"Cancel", Gtk.ResponseType.CANCEL, "Add", Gtk.ResponseType.OK
|
||||||
)
|
)
|
||||||
|
|
||||||
# Receive UI
|
# Receive UI
|
||||||
@ -92,13 +91,25 @@ class DropShip:
|
|||||||
self.recv_box = self.builder.get_object("receiveBoxCodeEntry")
|
self.recv_box = self.builder.get_object("receiveBoxCodeEntry")
|
||||||
self.recv_box.connect("activate", self.on_recv)
|
self.recv_box.connect("activate", self.on_recv)
|
||||||
|
|
||||||
|
# Pending Transfers UI
|
||||||
|
self.pending_transfers_list = self.builder.get_object("pendingTransfersList")
|
||||||
|
self.transfer_code = ''
|
||||||
|
|
||||||
|
|
||||||
def on_drop(self, widget, drag_context, x, y, data, info, time):
|
def on_drop(self, widget, drag_context, x, y, data, info, time):
|
||||||
"""Handler for file dropping."""
|
"""Handler for file dropping."""
|
||||||
files = data.get_uris()
|
files = data.get_uris()
|
||||||
self.files_to_send = files
|
self.files_to_send = files
|
||||||
if len(files) == 1:
|
if len(files) == 1:
|
||||||
fpath = files[0].replace("file://", "")
|
fpath = files[0].replace("file://", "")
|
||||||
|
# TODO Luke can u make a callback that spawns pendingTransmissions after we got a code?
|
||||||
self.nursery.start_soon(self.wormhole_send, fpath)
|
self.nursery.start_soon(self.wormhole_send, fpath)
|
||||||
|
|
||||||
|
# TODO Roel/Luke, move this somewhere logical in its own function?
|
||||||
|
status = pendingTransferRow(self, fpath.split('/')[-1], self.transfer_code)
|
||||||
|
# TODO Roel, find out how to add to a listbox
|
||||||
|
self.pending_transfers_list.insert(status,-1) #-1 is add at bottom
|
||||||
|
|
||||||
else:
|
else:
|
||||||
log.info("Multiple file sending coming soon ™")
|
log.info("Multiple file sending coming soon ™")
|
||||||
|
|
||||||
@ -109,7 +120,7 @@ class DropShip:
|
|||||||
def add_files(self, widget, event):
|
def add_files(self, widget, event):
|
||||||
"""Handler for adding files with system interface"""
|
"""Handler for adding files with system interface"""
|
||||||
response = self.file_chooser.run()
|
response = self.file_chooser.run()
|
||||||
if response == gtk.ResponseType.OK:
|
if response == Gtk.ResponseType.OK:
|
||||||
fpath = self.file_chooser.get_filenames()[0]
|
fpath = self.file_chooser.get_filenames()[0]
|
||||||
self.nursery.start_soon(self.wormhole_send, fpath)
|
self.nursery.start_soon(self.wormhole_send, fpath)
|
||||||
self.file_chooser.hide()
|
self.file_chooser.hide()
|
||||||
@ -129,6 +140,9 @@ class DropShip:
|
|||||||
output = await process.stderr.receive_some()
|
output = await process.stderr.receive_some()
|
||||||
code = output.decode().split()[-1]
|
code = output.decode().split()[-1]
|
||||||
|
|
||||||
|
self.clipboard.set_text(code, -1)
|
||||||
|
self.transfer_code = code
|
||||||
|
|
||||||
self.drop_label.set_text(code)
|
self.drop_label.set_text(code)
|
||||||
self.drop_label.set_visible(True)
|
self.drop_label.set_visible(True)
|
||||||
self.drop_label.set_selectable(True)
|
self.drop_label.set_selectable(True)
|
||||||
@ -144,7 +158,6 @@ class DropShip:
|
|||||||
command = ["wormhole", "receive", "--accept-file", code]
|
command = ["wormhole", "receive", "--accept-file", code]
|
||||||
await trio.run_process(command, stderr=PIPE)
|
await trio.run_process(command, stderr=PIPE)
|
||||||
|
|
||||||
|
|
||||||
async def main():
|
async def main():
|
||||||
"""Trio main entrypoint."""
|
"""Trio main entrypoint."""
|
||||||
async with trio.open_nursery() as nursery:
|
async with trio.open_nursery() as nursery:
|
||||||
|
227
pendingTransferRow.ui
Normal file
227
pendingTransferRow.ui
Normal file
@ -0,0 +1,227 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generated with glade 3.36.0 -->
|
||||||
|
<interface>
|
||||||
|
<requires lib="gtk+" version="3.20"/>
|
||||||
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-no</property>
|
||||||
|
<property name="icon_size">3</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkListBoxRow" id="pendingTransferRow">
|
||||||
|
<property name="width_request">100</property>
|
||||||
|
<property name="height_request">80</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="activatable">False</property>
|
||||||
|
<property name="selectable">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="name">pendingTransmission</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="valign">start</property>
|
||||||
|
<property name="hexpand">True</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="margin_bottom">2</property>
|
||||||
|
<property name="hexpand">True</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkStack" id="transferStatusStack">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="margin_left">6</property>
|
||||||
|
<property name="margin_right">12</property>
|
||||||
|
<property name="margin_start">6</property>
|
||||||
|
<property name="margin_end">12</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImage">
|
||||||
|
<property name="width_request">30</property>
|
||||||
|
<property name="height_request">30</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="icon_name">network-transmit</property>
|
||||||
|
<property name="icon_size">5</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="name">page0</property>
|
||||||
|
<property name="title" translatable="yes">page0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImage">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="icon_name">dialog-ok</property>
|
||||||
|
<property name="icon_size">5</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="name">page1</property>
|
||||||
|
<property name="title" translatable="yes">page1</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="margin_top">6</property>
|
||||||
|
<property name="margin_bottom">6</property>
|
||||||
|
<property name="hexpand">True</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="spacing">6</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="fileNameLabel">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="halign">start</property>
|
||||||
|
<property name="label" translatable="yes">screenshot_lkashdflasjdjasödjlkasjdlaskdlkashd01-292.jpg</property>
|
||||||
|
<property name="ellipsize">middle</property>
|
||||||
|
<property name="max_width_chars">20</property>
|
||||||
|
<property name="track_visited_links">False</property>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="weight" value="bold"/>
|
||||||
|
</attributes>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">False</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="fileNameMetadata">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="halign">start</property>
|
||||||
|
<property name="label" translatable="yes">336 KB</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">False</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="transferCodeButton">
|
||||||
|
<property name="label" translatable="yes">5-courier-happening</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
<property name="halign">center</property>
|
||||||
|
<property name="margin_top">6</property>
|
||||||
|
<signal name="clicked" handler="copy_transfer_code" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">False</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkStack" id="statusButtonsStack">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="margin_left">12</property>
|
||||||
|
<property name="margin_right">6</property>
|
||||||
|
<property name="margin_start">12</property>
|
||||||
|
<property name="margin_end">6</property>
|
||||||
|
<property name="hhomogeneous">False</property>
|
||||||
|
<property name="transition_type">crossfade</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="cancelTransfer">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
<property name="halign">center</property>
|
||||||
|
<property name="valign">center</property>
|
||||||
|
<property name="margin_top">16</property>
|
||||||
|
<property name="margin_bottom">16</property>
|
||||||
|
<property name="image">image1</property>
|
||||||
|
<signal name="clicked" handler="cancel_transfer" swapped="no"/>
|
||||||
|
<style>
|
||||||
|
<class name="circular"/>
|
||||||
|
</style>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="name">page0</property>
|
||||||
|
<property name="title" translatable="yes">page0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton">
|
||||||
|
<property name="label" translatable="yes">button</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
<property name="halign">center</property>
|
||||||
|
<property name="valign">center</property>
|
||||||
|
<property name="margin_top">16</property>
|
||||||
|
<property name="margin_bottom">16</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="name">page1</property>
|
||||||
|
<property name="title" translatable="yes">page1</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">2</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkSeparator">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
@ -1,130 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!-- Generated with glade 3.22.1 -->
|
|
||||||
<interface>
|
|
||||||
<requires lib="gtk+" version="3.20"/>
|
|
||||||
<template class="PendingTransmission" parent="GtkBox">
|
|
||||||
<property name="name">pendingTransmission</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="decorated">False</property>
|
|
||||||
<child type="titlebar">
|
|
||||||
<placeholder/>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkBox">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage">
|
|
||||||
<property name="width_request">50</property>
|
|
||||||
<property name="height_request">50</property>
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="stock">gtk-network</property>
|
|
||||||
<property name="icon_size">6</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkBox">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="margin_top">6</property>
|
|
||||||
<property name="margin_bottom">6</property>
|
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkBox">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="spacing">6</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="fileNameLabel">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="label" translatable="yes">screenshot_01-292.jpg</property>
|
|
||||||
<property name="ellipsize">end</property>
|
|
||||||
<attributes>
|
|
||||||
<attribute name="weight" value="bold"/>
|
|
||||||
<attribute name="scale" value="1.2"/>
|
|
||||||
</attributes>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="fileNameMetadata">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="label" translatable="yes">336 KB</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="transmissionCodeButton">
|
|
||||||
<property name="label" translatable="yes">5-courier-happening</property>
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="receives_default">True</property>
|
|
||||||
<property name="halign">center</property>
|
|
||||||
<property name="margin_top">6</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="cancelTransmission">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="receives_default">True</property>
|
|
||||||
<property name="halign">center</property>
|
|
||||||
<property name="valign">center</property>
|
|
||||||
<property name="margin_top">16</property>
|
|
||||||
<property name="margin_bottom">16</property>
|
|
||||||
<property name="image">image1</property>
|
|
||||||
<style>
|
|
||||||
<class name="circular"/>
|
|
||||||
</style>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
<property name="position">2</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</template>
|
|
||||||
<object class="GtkImage" id="image1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="stock">gtk-no</property>
|
|
||||||
<property name="icon_size">3</property>
|
|
||||||
</object>
|
|
||||||
</interface>
|
|
40
ui_templates.py
Normal file
40
ui_templates.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
import gi
|
||||||
|
gi.require_version('Gtk', '3.0')
|
||||||
|
from gi.repository import Gtk, GLib, Gdk
|
||||||
|
|
||||||
|
@Gtk.Template.from_file('pendingTransferRow.ui')
|
||||||
|
class pendingTransferRow(Gtk.ListBoxRow):
|
||||||
|
__gtype_name__ = 'PendingTransferRow'
|
||||||
|
|
||||||
|
fileNameLabel = Gtk.Template.Child()
|
||||||
|
fileNameMetadata = Gtk.Template.Child()
|
||||||
|
transferCodeButton = Gtk.Template.Child()
|
||||||
|
cancelTransfer = Gtk.Template.Child()
|
||||||
|
|
||||||
|
def __init__(self, parent, fileName, transferCode):
|
||||||
|
super(Gtk.ListBoxRow, self).__init__()
|
||||||
|
self.init_template()
|
||||||
|
|
||||||
|
self.fileNameLabel.set_text(fileName)
|
||||||
|
self.transferCodeButton.set_label(transferCode)
|
||||||
|
|
||||||
|
@Gtk.Template.Callback()
|
||||||
|
def copy_transfer_code(self,widget):
|
||||||
|
'''
|
||||||
|
what to do when we press the button:
|
||||||
|
copy the code again to clipboard
|
||||||
|
'''
|
||||||
|
print('click')
|
||||||
|
code = widget.get_label()
|
||||||
|
|
||||||
|
clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
|
||||||
|
clipboard.set_text(code, -1) #-1 is auto-size
|
||||||
|
|
||||||
|
@Gtk.Template.Callback()
|
||||||
|
def cancel_transfer(self,widget):
|
||||||
|
'''
|
||||||
|
cancel the transfer
|
||||||
|
destroy thread
|
||||||
|
remove the object from the list
|
||||||
|
'''
|
||||||
|
print('poof!')
|
Loading…
Reference in New Issue
Block a user