Initial commit...

This commit is contained in:
2020-06-16 21:19:40 -05:00
parent f22acb1d82
commit 2a93b0e404
16 changed files with 1197 additions and 0 deletions

View 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
View 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
View File

@@ -0,0 +1,2 @@
from .Settings import Settings
from .CrossClassSignals import CrossClassSignals