Initial commit...
This commit is contained in:
96
src/utils/CrossClassSignals.py
Normal file
96
src/utils/CrossClassSignals.py
Normal file
@@ -0,0 +1,96 @@
|
||||
# Gtk imports
|
||||
from gi.repository import GLib as glib
|
||||
|
||||
# Python imports
|
||||
import os, threading, time, datetime
|
||||
|
||||
import pyscreenshot as capture
|
||||
|
||||
# Application imports
|
||||
|
||||
|
||||
|
||||
def threaded(fn):
|
||||
def wrapper(*args, **kwargs):
|
||||
threading.Thread(target=fn, args=args, kwargs=kwargs).start()
|
||||
|
||||
return wrapper
|
||||
|
||||
class CrossClassSignals:
|
||||
def __init__(self, settings):
|
||||
self.settings = settings
|
||||
self.builder = self.settings.returnBuilder()
|
||||
self.SCREENSHOTS_DIR = self.settings.returnScreenshotsDir()
|
||||
self.fileStore = self.builder.get_object("fileStore")
|
||||
self.refreshingState = False
|
||||
|
||||
|
||||
def returnRefreshingState(self):
|
||||
return self.refreshingState
|
||||
|
||||
def setRefreshingState(self, state):
|
||||
self.refreshingState = state
|
||||
|
||||
|
||||
@threaded
|
||||
def refereshDirectoryList(self):
|
||||
self.refreshingState = True
|
||||
images = self.returnDirectoryList()
|
||||
images.sort()
|
||||
if len(images) != len(self.fileStore):
|
||||
self.fileStore.clear()
|
||||
for image in images:
|
||||
glib.idle_add(self.addToStore, (image))
|
||||
|
||||
# self.fileStore.sort()
|
||||
self.refreshingState = False
|
||||
|
||||
|
||||
@threaded
|
||||
def addToStore(self, image):
|
||||
self.fileStore.append([image])
|
||||
|
||||
def returnDirectoryList(self):
|
||||
files = []
|
||||
|
||||
for file in os.listdir(self.SCREENSHOTS_DIR):
|
||||
if os.path.isfile(os.path.join(self.SCREENSHOTS_DIR, file)):
|
||||
files.append(file)
|
||||
|
||||
return files
|
||||
|
||||
|
||||
def boundingBoxGrab(self, x1, y1, x2, y2):
|
||||
# childprocess=False needed to not crash program
|
||||
im = capture.grab(bbox=(x1, y1, x2, y2), childprocess=False)
|
||||
im.save(self.generateScreenshotName())
|
||||
|
||||
def generateScreenshotName(self):
|
||||
return self.SCREENSHOTS_DIR + '/scrshot_' + self.getTime() + '.png'
|
||||
|
||||
def getTime(self):
|
||||
now = datetime.datetime.now()
|
||||
return now.strftime("%Y-%m-%d %H:%M:%S")
|
||||
|
||||
def sleep(self, wait=None):
|
||||
delayAmount = self.builder.get_object("delayAmount")
|
||||
if not wait:
|
||||
wait = delayAmount.get_value_as_int()
|
||||
|
||||
time.sleep(wait)
|
||||
|
||||
|
||||
def getClipboardData(self):
|
||||
proc = subprocess.Popen(['xclip','-selection', 'clipboard', '-o'], stdout=subprocess.PIPE)
|
||||
retcode = proc.wait()
|
||||
data = proc.stdout.read()
|
||||
return data.decode("utf-8").strip()
|
||||
|
||||
def setClipboardData(self, data):
|
||||
proc = subprocess.Popen(['xclip','-selection','clipboard'], stdin=subprocess.PIPE)
|
||||
proc.stdin.write(data)
|
||||
proc.stdin.close()
|
||||
retcode = proc.wait()
|
||||
|
||||
def close(self, widget):
|
||||
gtk.main_quit()
|
||||
71
src/utils/Settings.py
Normal file
71
src/utils/Settings.py
Normal file
@@ -0,0 +1,71 @@
|
||||
# Gtk imports
|
||||
import gi, cairo
|
||||
gi.require_version('Gtk', '3.0')
|
||||
gi.require_version('Gdk', '3.0')
|
||||
|
||||
from gi.repository import Gtk as gtk
|
||||
from gi.repository import Gdk as gdk
|
||||
|
||||
# Python imports
|
||||
import os
|
||||
|
||||
# Application imports
|
||||
|
||||
|
||||
class Settings:
|
||||
def __init__(self):
|
||||
self.SCRIPT_PTH = os.path.dirname(os.path.realpath(__file__)) + "/"
|
||||
self.builder = gtk.Builder()
|
||||
self.builder.add_from_file(self.SCRIPT_PTH + "../resources/Main_Window.glade")
|
||||
|
||||
# 'Filters'
|
||||
self.images = ('.png', '.jpg', '.jpeg', '.gif')
|
||||
HOME_PATH = os.path.expanduser('~')
|
||||
self.SCREENSHOTS_DIR = HOME_PATH + "/" + ".screenshots"
|
||||
|
||||
if not os.path.isdir(self.SCREENSHOTS_DIR):
|
||||
os.mkdir(self.SCREENSHOTS_DIR)
|
||||
|
||||
|
||||
def createWindow(self):
|
||||
# Get window and connect signals
|
||||
window = self.builder.get_object("Main_Window")
|
||||
window.connect("delete-event", gtk.main_quit)
|
||||
self.setWindowData(window)
|
||||
return window
|
||||
|
||||
def setWindowData(self, window):
|
||||
screen = window.get_screen()
|
||||
visual = screen.get_rgba_visual()
|
||||
|
||||
if visual != None and screen.is_composited():
|
||||
window.set_visual(visual)
|
||||
|
||||
# bind css file
|
||||
cssProvider = gtk.CssProvider()
|
||||
cssProvider.load_from_path(self.SCRIPT_PTH + '../resources/stylesheet.css')
|
||||
screen = gdk.Screen.get_default()
|
||||
styleContext = gtk.StyleContext()
|
||||
styleContext.add_provider_for_screen(screen, cssProvider, gtk.STYLE_PROVIDER_PRIORITY_USER)
|
||||
|
||||
def getMonitorData(self):
|
||||
screen = self.builder.get_object("Main_Window").get_screen()
|
||||
wdth = screen.get_width()
|
||||
hght = screen.get_height()
|
||||
mon0 = gdk.Rectangle()
|
||||
mon0.width = wdth
|
||||
mon0.height = hght
|
||||
monitors = []
|
||||
|
||||
monitors.append(mon0)
|
||||
for m in range(screen.get_n_monitors()):
|
||||
monitors.append(screen.get_monitor_geometry(m))
|
||||
|
||||
return monitors
|
||||
|
||||
|
||||
def returnBuilder(self): return self.builder
|
||||
def returnScreenshotsDir(self): return self.SCREENSHOTS_DIR
|
||||
|
||||
# Filter returns
|
||||
def returnImagesFilter(self): return self.images
|
||||
2
src/utils/__init__.py
Normal file
2
src/utils/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
from .Settings import Settings
|
||||
from .CrossClassSignals import CrossClassSignals
|
||||
Reference in New Issue
Block a user