added settings, changed layout, added thumbnail saving
@ -1,15 +1,17 @@
|
||||
# GWinWrap
|
||||
GWinWrap is a Gtk with Python gui to select videos for XWinWrap, images for Nitrogen Wallpaper Manager, and gifs for Gifsicle.
|
||||
GWinWrap is a Gtk wpic2ith Python gui to select videos for XWinWrap, images for Nitrogen Wallpaper Manager, and gifs for Gifsicle.
|
||||
It includes the XWinWrap binary and source code for Shantanu Goel's version of XWinWrap.
|
||||
|
||||
# Notes
|
||||
Need python 2+
|
||||
|
||||
# Images
|
||||
![Default view starting out](images/pic1.png)
|
||||
![Video thumbnails in image grid. Path to directory highlighted purple](images/pic2.png)
|
||||
![Image thumbnails in image grid with xscreensaver checked](images/pic3.png)
|
||||
![Image in preview popup](images/pic4.png)
|
||||
![1 Default view starting out. ](images/pic1.png)
|
||||
![2 Video thumbnails in image grid. Path to directory highlighted purple. ](images/pic2.png)
|
||||
![3 Image thumbnails in image grid. ](images/pic3.png)
|
||||
![4 Image in preview popup. ](images/pic4.png)
|
||||
![5 Xscreensaver preview running. ](images/pic5.png)
|
||||
![6 Settings window poped open. ](images/pic6.png)
|
||||
|
||||
# TODO
|
||||
Nothing...
|
||||
|
Before Width: | Height: | Size: 479 KiB After Width: | Height: | Size: 479 KiB |
Before Width: | Height: | Size: 637 KiB After Width: | Height: | Size: 577 KiB |
Before Width: | Height: | Size: 1.7 MiB After Width: | Height: | Size: 486 KiB |
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 2.3 MiB |
BIN
python/images/pic5.png
Normal file
After Width: | Height: | Size: 944 KiB |
BIN
python/images/pic6.png
Normal file
After Width: | Height: | Size: 442 KiB |
113
python/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/GWinWrap.py
Executable file → Normal file
@ -1,20 +1,17 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os, cairo, sys, gi, re, threading, subprocess
|
||||
import os, cairo, sys, gi, re, threading, subprocess, hashlib
|
||||
|
||||
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
|
||||
from gi.repository import GObject as gobject
|
||||
from gi.repository import GdkPixbuf
|
||||
from gi.repository import Gtk as gtk, Gdk as gdk, GObject as gobject, GdkPixbuf
|
||||
|
||||
from os import listdir
|
||||
from os.path import isfile, join
|
||||
from threading import Thread
|
||||
|
||||
from utils import SaveState
|
||||
from utils import SaveStateToXWinWarp, SaveGWinWrapSettings
|
||||
|
||||
gdk.threads_init()
|
||||
|
||||
@ -36,6 +33,13 @@ class GWinWrap:
|
||||
self.window.set_app_paintable(True)
|
||||
self.window.connect("draw", self.area_draw)
|
||||
|
||||
# bind css file
|
||||
cssProvider = gtk.CssProvider()
|
||||
cssProvider.load_from_path('resources/stylesheet.css')
|
||||
screen = gdk.Screen.get_default()
|
||||
styleContext = gtk.StyleContext()
|
||||
styleContext.add_provider_for_screen(screen, cssProvider, gtk.STYLE_PROVIDER_PRIORITY_USER)
|
||||
|
||||
# Add filter to allow only folders to be selected
|
||||
dialog = self.builder.get_object("selectedDirDialog")
|
||||
filefilter = self.builder.get_object("Folders")
|
||||
@ -44,7 +48,9 @@ class GWinWrap:
|
||||
# Get reference to remove and add it back...
|
||||
self.gridLabel = self.builder.get_object("gridLabel")
|
||||
|
||||
self.stateSaver = SaveState()
|
||||
self.stateSaver = SaveStateToXWinWarp()
|
||||
self.sttngsSver = SaveGWinWrapSettings()
|
||||
|
||||
self.focusedImg = gtk.Image()
|
||||
self.usrHome = os.path.expanduser('~')
|
||||
self.xScreenVal = None
|
||||
@ -70,6 +76,11 @@ class GWinWrap:
|
||||
for file in list:
|
||||
xscreenList.append((file,))
|
||||
|
||||
self.selectedImg = None # EventBox holder
|
||||
self.player = None
|
||||
self.imgVwr = None
|
||||
self.retrieveSettings()
|
||||
|
||||
self.window.show()
|
||||
|
||||
def area_draw(self, widget, cr):
|
||||
@ -86,19 +97,18 @@ class GWinWrap:
|
||||
Thread(target=self.newDir, args=(dir,)).start()
|
||||
|
||||
def newDir(self, dir):
|
||||
imageGrid = self.builder.get_object("imageGrid")
|
||||
dirPath = dir
|
||||
list = [f for f in listdir(dirPath) if isfile(join(dirPath, f))]
|
||||
files = []
|
||||
row = 0
|
||||
col = 0
|
||||
imageGrid = self.builder.get_object("imageGrid")
|
||||
dirPath = dir
|
||||
list = [f for f in listdir(dirPath) if isfile(join(dirPath, f))]
|
||||
files = []
|
||||
row = 0
|
||||
col = 0
|
||||
|
||||
for file in list:
|
||||
if file.lower().endswith(('.mkv', '.avi', '.flv', '.mov', '.m4v', '.mpg', '.wmv', '.mpeg', '.mp4', '.webm', '.png', '.jpg', '.jpeg', '.gif')):
|
||||
files.append(file)
|
||||
|
||||
|
||||
fractionTick = 1.0 / len(files)
|
||||
fractionTick = 1.0 / 1.0 if len(files) == 0 else len(files)
|
||||
tickCount = 0.0
|
||||
self.clear()
|
||||
imageGrid.remove_column(0)
|
||||
@ -111,16 +121,20 @@ class GWinWrap:
|
||||
thumbnl = gtk.Image()
|
||||
|
||||
if file.lower().endswith(('.mkv', '.avi', '.flv', '.mov', '.m4v', '.mpg', '.wmv', '.mpeg', '.mp4', '.webm')):
|
||||
self.generateThumbnail(fullPathFile)
|
||||
thumbnl = self.createGtkImage("/tmp/image.png", [310, 310])
|
||||
eveBox.connect("button_press_event", self.runMplayerProcess, (fullPathFile, file,))
|
||||
eveBox.connect("enter_notify_event", self.mouseOver, (fullPathFile, file))
|
||||
eveBox.connect("leave_notify_event", self.mouseOut, (fullPathFile, file))
|
||||
fileHash = hashlib.sha256(str.encode(fullPathFile)).hexdigest()
|
||||
hashImgpth = self.usrHome + "/.thumbnails/normal/" + fileHash + ".png"
|
||||
if os.path.isfile(hashImgpth) == False:
|
||||
self.generateThumbnail(fullPathFile, hashImgpth)
|
||||
|
||||
thumbnl = self.createGtkImage(hashImgpth, [310, 310])
|
||||
eveBox.connect("button_press_event", self.runMplayerProcess, (fullPathFile, file, eveBox,))
|
||||
eveBox.connect("enter_notify_event", self.mouseOver, ())
|
||||
eveBox.connect("leave_notify_event", self.mouseOut, ())
|
||||
elif file.lower().endswith(('.png', '.jpg', '.jpeg', '.gif')):
|
||||
thumbnl = self.createGtkImage(fullPathFile, [310, 310])
|
||||
eveBox.connect("button_press_event", self.runImageViewerProcess, (fullPathFile, file))
|
||||
eveBox.connect("enter_notify_event", self.mouseOver, (fullPathFile, file))
|
||||
eveBox.connect("leave_notify_event", self.mouseOut, (fullPathFile, file))
|
||||
eveBox.connect("button_press_event", self.runImageViewerProcess, (fullPathFile, file, eveBox,))
|
||||
eveBox.connect("enter_notify_event", self.mouseOver, ())
|
||||
eveBox.connect("leave_notify_event", self.mouseOut, ())
|
||||
else:
|
||||
print("Not a video or image file.")
|
||||
return
|
||||
@ -145,8 +159,8 @@ class GWinWrap:
|
||||
def addToGrid(self, args):
|
||||
args[0].attach(args[1], args[2], args[3], 1, 1)
|
||||
|
||||
def generateThumbnail(self, fullPathFile):
|
||||
subprocess.call(["ffmpegthumbnailer", "-t", "65%", "-s", "300", "-c", "jpg", "-i", fullPathFile, "-o", "/tmp/image.png"])
|
||||
def generateThumbnail(self, fullPathFile, hashImgpth):
|
||||
subprocess.call(["ffmpegthumbnailer", "-t", "65%", "-s", "300", "-c", "jpg", "-i", fullPathFile, "-o", hashImgpth])
|
||||
|
||||
def createGtkImage(self, path, wxh):
|
||||
try:
|
||||
@ -158,17 +172,26 @@ class GWinWrap:
|
||||
return gtk.Image.new_from_pixbuf(pixbuf)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
return gtk.Image()
|
||||
|
||||
def runMplayerProcess(self, widget, eve, params):
|
||||
self.setSelected(params[2])
|
||||
video = params[0] #.replace(" ", "\\ ")
|
||||
|
||||
if eve.type == gdk.EventType.DOUBLE_BUTTON_PRESS:
|
||||
subprocess.call(["mplayer", "-really-quiet", "-ao", "null", "-loop", "0", params[0]])
|
||||
subprocess.call([self.player, video, "-really-quiet", "-ao", "null", "-loop", "0"])
|
||||
|
||||
self.toSavePath = params[0]
|
||||
self.applyType = 1
|
||||
self.helpLabel.set_markup("<span foreground=\"#e0cc64\">" + params[1] + "</span>")
|
||||
|
||||
def openMainImageViewer(self, widget):
|
||||
subprocess.call([self.imgVwr, self.toSavePath])
|
||||
|
||||
def runImageViewerProcess(self, widget, eve, params):
|
||||
self.setSelected(params[2])
|
||||
|
||||
if eve.type == gdk.EventType.DOUBLE_BUTTON_PRESS:
|
||||
previewWindow = self.builder.get_object("previewWindow")
|
||||
previewImg = self.builder.get_object("previewImg")
|
||||
@ -180,22 +203,25 @@ class GWinWrap:
|
||||
self.applyType = 2
|
||||
self.helpLabel.set_markup("<span foreground=\"#e0cc64\">" + params[1] + "</span>")
|
||||
|
||||
def openMainImageViewer(self, widget):
|
||||
subprocess.call(["xdg-open", self.toSavePath])
|
||||
def setSelected(self, eveBox):
|
||||
if self.selectedImg:
|
||||
col = gdk.RGBA(0.0, 0.0, 0.0, 0.0)
|
||||
self.selectedImg.override_background_color(gtk.StateType.NORMAL, col)
|
||||
|
||||
col = gdk.RGBA(0.9, 0.7, 0.4, 0.74)
|
||||
eveBox.override_background_color(gtk.StateType.NORMAL, col)
|
||||
self.selectedImg = eveBox
|
||||
|
||||
def closePopup(self, widget):
|
||||
previewWindow = self.builder.get_object("previewWindow")
|
||||
previewWindow.popdown()
|
||||
self.builder.get_object("previewWindow").popdown()
|
||||
|
||||
def mouseOver(self, widget, eve, args):
|
||||
pass
|
||||
# hand_cursor = gdk.Cursor(gdk.CursorType.GDK_HAND2)
|
||||
# self.window.get_window().set_cursor(hand_cursor)
|
||||
hand_cursor = gdk.Cursor(gdk.CursorType.HAND2)
|
||||
self.window.get_window().set_cursor(hand_cursor)
|
||||
|
||||
def mouseOut(self, widget, eve, args):
|
||||
pass
|
||||
# watch_cursor = gdk.Cursor(gdk.CursorType.GDK_LEFT_PTR)
|
||||
# self.window.get_window().set_cursor(watch_cursor)
|
||||
watch_cursor = gdk.Cursor(gdk.CursorType.LEFT_PTR)
|
||||
self.window.get_window().set_cursor(watch_cursor)
|
||||
|
||||
def toggleXscreenUsageField(self, widget, data=None):
|
||||
useXscreenSaver = self.builder.get_object("useXScrnList")
|
||||
@ -204,6 +230,21 @@ class GWinWrap:
|
||||
else:
|
||||
self.builder.get_object("xScreenSvrList").set_sensitive(False)
|
||||
|
||||
def popSttingsWindow(self, widget):
|
||||
self.builder.get_object("settingsWindow").popup()
|
||||
|
||||
def saveToSettingsFile(self, widget):
|
||||
self.player = self.builder.get_object("customVideoPlyr").get_text().strip()
|
||||
self.imgVwr = self.builder.get_object("customImgVwr").get_text().strip()
|
||||
self.sttngsSver.saveSettings(self.player, self.imgVwr)
|
||||
|
||||
def retrieveSettings(self):
|
||||
data = self.sttngsSver.retrieveSettings()
|
||||
self.player = data[0]
|
||||
self.imgVwr = data[1]
|
||||
self.builder.get_object("customVideoPlyr").set_text(self.player)
|
||||
self.builder.get_object("customImgVwr").set_text(self.imgVwr)
|
||||
|
||||
def saveToFile(self, widget, data=None):
|
||||
saveLoc = self.builder.get_object("saveLoc").get_active_text()
|
||||
useXscreenSaver = self.builder.get_object("useXScrnList").get_active()
|
||||
|
@ -37,12 +37,25 @@
|
||||
<property name="stock">gtk-jump-to</property>
|
||||
<property name="icon_size">3</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="saveImag">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-save</property>
|
||||
<property name="icon_size">3</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="saveImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-save</property>
|
||||
<property name="icon_size">3</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="settingsImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="tooltip_text" translatable="yes">Settings....</property>
|
||||
<property name="stock">gtk-properties</property>
|
||||
<property name="icon_size">3</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="startImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
@ -63,7 +76,7 @@
|
||||
<property name="window_position">center</property>
|
||||
<property name="default_width">950</property>
|
||||
<property name="default_height">600</property>
|
||||
<property name="icon">GWinWrap.png</property>
|
||||
<property name="icon">icons/GWinWrap.png</property>
|
||||
<property name="gravity">center</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
@ -98,22 +111,6 @@
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton">
|
||||
<property name="label" translatable="yes">Clear</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="image">clearImage</property>
|
||||
<property name="always_show_image">True</property>
|
||||
<signal name="clicked" handler="clearSelection" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFileChooserButton" id="selectedDirDialog">
|
||||
<property name="visible">True</property>
|
||||
@ -127,6 +124,21 @@
|
||||
<property name="title" translatable="yes">Dream Scene / Image Dir</property>
|
||||
<signal name="file-set" handler="setNewDir" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="image">settingsImage</property>
|
||||
<property name="always_show_image">True</property>
|
||||
<signal name="clicked" handler="popSttingsWindow" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
@ -140,6 +152,18 @@
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkProgressBar" id="loadProgress">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="show_text">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
<property name="visible">True</property>
|
||||
@ -182,19 +206,23 @@
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkProgressBar" id="loadProgress">
|
||||
<object class="GtkButton">
|
||||
<property name="label" translatable="yes">Clear</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="show_text">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="image">clearImage</property>
|
||||
<property name="always_show_image">True</property>
|
||||
<signal name="clicked" handler="clearSelection" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
@ -487,7 +515,7 @@
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton">
|
||||
<property name="label" translatable="yes">Start</property>
|
||||
<property name="label" translatable="yes">(Re)Start</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
@ -633,6 +661,7 @@
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-missing-image</property>
|
||||
<property name="icon_size">6</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
@ -647,4 +676,108 @@
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkPopover" id="settingsWindow">
|
||||
<property name="width_request">250</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="relative_to">button1</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="pixbuf">icons/player.png</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="customVideoPlyr">
|
||||
<property name="width_request">330</property>
|
||||
<property name="height_request">26</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Set Custom Video Player</property>
|
||||
<property name="placeholder_text" translatable="yes">Set Custom Video Player</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</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="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="pixbuf">icons/picture.png</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="customImgVwr">
|
||||
<property name="width_request">330</property>
|
||||
<property name="height_request">26</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Set Custom Image Viewer</property>
|
||||
<property name="placeholder_text" translatable="yes">Set Custom Image Viewer</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</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">
|
||||
<property name="label" translatable="yes">Save</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="image">saveImag</property>
|
||||
<property name="always_show_image">True</property>
|
||||
<signal name="clicked" handler="saveToSettingsFile" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 6.4 KiB |
After Width: | Height: | Size: 6.4 KiB |
@ -0,0 +1,3 @@
|
||||
window {
|
||||
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os, json
|
||||
|
||||
class SaveGWinWrapSettings:
|
||||
def __init__(self):
|
||||
configFolder = os.path.expanduser('~') + "/.config/gwinwrap/"
|
||||
self.configFile = configFolder + "settings.ini"
|
||||
|
||||
if os.path.isdir(configFolder) == False:
|
||||
os.mkdir(configFolder)
|
||||
|
||||
if os.path.isfile(self.configFile) == False:
|
||||
open(self.configFile, 'a').close()
|
||||
|
||||
|
||||
def saveSettings(self, player, imgVwr):
|
||||
data = {}
|
||||
data['gwinwrap_settings'] = []
|
||||
|
||||
data['gwinwrap_settings'].append({
|
||||
'player': player,
|
||||
'imgvwr': imgVwr
|
||||
})
|
||||
|
||||
with open(self.configFile, 'w') as outfile:
|
||||
json.dump(data, outfile)
|
||||
|
||||
|
||||
|
||||
def retrieveSettings(self):
|
||||
returnData = []
|
||||
|
||||
with open(self.configFile) as infile:
|
||||
try:
|
||||
data = json.load(infile)
|
||||
for obj in data['gwinwrap_settings']:
|
||||
returnData = [obj['player'], obj['imgvwr']]
|
||||
except Exception as e:
|
||||
returnData = ['mplayer', 'xdg-open']
|
||||
|
||||
if returnData[0] == '':
|
||||
returnData[0] = 'mplayer'
|
||||
|
||||
if returnData[1] == '':
|
||||
returnData[1] = 'xdg-open'
|
||||
|
||||
return returnData
|
@ -2,7 +2,7 @@
|
||||
|
||||
import os
|
||||
|
||||
class SaveState:
|
||||
class SaveStateToXWinWarp:
|
||||
def __init__(self):
|
||||
self.fileWriter = None
|
||||
self.toSavePath = None
|
@ -1 +1,2 @@
|
||||
from utils.SaveState import SaveState
|
||||
from utils.SaveStateToXWinWarp import SaveStateToXWinWarp
|
||||
from utils.SaveGWinWrapSettings import SaveGWinWrapSettings\
|
||||
|
113
python/src/versions/0.0.1/GWinWrap/GWinWrap.py
Executable file → Normal file
@ -1,20 +1,17 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os, cairo, sys, gi, re, threading, subprocess
|
||||
import os, cairo, sys, gi, re, threading, subprocess, hashlib
|
||||
|
||||
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
|
||||
from gi.repository import GObject as gobject
|
||||
from gi.repository import GdkPixbuf
|
||||
from gi.repository import Gtk as gtk, Gdk as gdk, GObject as gobject, GdkPixbuf
|
||||
|
||||
from os import listdir
|
||||
from os.path import isfile, join
|
||||
from threading import Thread
|
||||
|
||||
from utils import SaveState
|
||||
from utils import SaveStateToXWinWarp, SaveGWinWrapSettings
|
||||
|
||||
gdk.threads_init()
|
||||
|
||||
@ -36,6 +33,13 @@ class GWinWrap:
|
||||
self.window.set_app_paintable(True)
|
||||
self.window.connect("draw", self.area_draw)
|
||||
|
||||
# bind css file
|
||||
cssProvider = gtk.CssProvider()
|
||||
cssProvider.load_from_path('resources/stylesheet.css')
|
||||
screen = gdk.Screen.get_default()
|
||||
styleContext = gtk.StyleContext()
|
||||
styleContext.add_provider_for_screen(screen, cssProvider, gtk.STYLE_PROVIDER_PRIORITY_USER)
|
||||
|
||||
# Add filter to allow only folders to be selected
|
||||
dialog = self.builder.get_object("selectedDirDialog")
|
||||
filefilter = self.builder.get_object("Folders")
|
||||
@ -44,7 +48,9 @@ class GWinWrap:
|
||||
# Get reference to remove and add it back...
|
||||
self.gridLabel = self.builder.get_object("gridLabel")
|
||||
|
||||
self.stateSaver = SaveState()
|
||||
self.stateSaver = SaveStateToXWinWarp()
|
||||
self.sttngsSver = SaveGWinWrapSettings()
|
||||
|
||||
self.focusedImg = gtk.Image()
|
||||
self.usrHome = os.path.expanduser('~')
|
||||
self.xScreenVal = None
|
||||
@ -70,6 +76,11 @@ class GWinWrap:
|
||||
for file in list:
|
||||
xscreenList.append((file,))
|
||||
|
||||
self.selectedImg = None # EventBox holder
|
||||
self.player = None
|
||||
self.imgVwr = None
|
||||
self.retrieveSettings()
|
||||
|
||||
self.window.show()
|
||||
|
||||
def area_draw(self, widget, cr):
|
||||
@ -86,19 +97,18 @@ class GWinWrap:
|
||||
Thread(target=self.newDir, args=(dir,)).start()
|
||||
|
||||
def newDir(self, dir):
|
||||
imageGrid = self.builder.get_object("imageGrid")
|
||||
dirPath = dir
|
||||
list = [f for f in listdir(dirPath) if isfile(join(dirPath, f))]
|
||||
files = []
|
||||
row = 0
|
||||
col = 0
|
||||
imageGrid = self.builder.get_object("imageGrid")
|
||||
dirPath = dir
|
||||
list = [f for f in listdir(dirPath) if isfile(join(dirPath, f))]
|
||||
files = []
|
||||
row = 0
|
||||
col = 0
|
||||
|
||||
for file in list:
|
||||
if file.lower().endswith(('.mkv', '.avi', '.flv', '.mov', '.m4v', '.mpg', '.wmv', '.mpeg', '.mp4', '.webm', '.png', '.jpg', '.jpeg', '.gif')):
|
||||
files.append(file)
|
||||
|
||||
|
||||
fractionTick = 1.0 / len(files)
|
||||
fractionTick = 1.0 / 1.0 if len(files) == 0 else len(files)
|
||||
tickCount = 0.0
|
||||
self.clear()
|
||||
imageGrid.remove_column(0)
|
||||
@ -111,16 +121,20 @@ class GWinWrap:
|
||||
thumbnl = gtk.Image()
|
||||
|
||||
if file.lower().endswith(('.mkv', '.avi', '.flv', '.mov', '.m4v', '.mpg', '.wmv', '.mpeg', '.mp4', '.webm')):
|
||||
self.generateThumbnail(fullPathFile)
|
||||
thumbnl = self.createGtkImage("/tmp/image.png", [310, 310])
|
||||
eveBox.connect("button_press_event", self.runMplayerProcess, (fullPathFile, file,))
|
||||
eveBox.connect("enter_notify_event", self.mouseOver, (fullPathFile, file))
|
||||
eveBox.connect("leave_notify_event", self.mouseOut, (fullPathFile, file))
|
||||
fileHash = hashlib.sha256(str.encode(fullPathFile)).hexdigest()
|
||||
hashImgpth = self.usrHome + "/.thumbnails/normal/" + fileHash + ".png"
|
||||
if os.path.isfile(hashImgpth) == False:
|
||||
self.generateThumbnail(fullPathFile, hashImgpth)
|
||||
|
||||
thumbnl = self.createGtkImage(hashImgpth, [310, 310])
|
||||
eveBox.connect("button_press_event", self.runMplayerProcess, (fullPathFile, file, eveBox,))
|
||||
eveBox.connect("enter_notify_event", self.mouseOver, ())
|
||||
eveBox.connect("leave_notify_event", self.mouseOut, ())
|
||||
elif file.lower().endswith(('.png', '.jpg', '.jpeg', '.gif')):
|
||||
thumbnl = self.createGtkImage(fullPathFile, [310, 310])
|
||||
eveBox.connect("button_press_event", self.runImageViewerProcess, (fullPathFile, file))
|
||||
eveBox.connect("enter_notify_event", self.mouseOver, (fullPathFile, file))
|
||||
eveBox.connect("leave_notify_event", self.mouseOut, (fullPathFile, file))
|
||||
eveBox.connect("button_press_event", self.runImageViewerProcess, (fullPathFile, file, eveBox,))
|
||||
eveBox.connect("enter_notify_event", self.mouseOver, ())
|
||||
eveBox.connect("leave_notify_event", self.mouseOut, ())
|
||||
else:
|
||||
print("Not a video or image file.")
|
||||
return
|
||||
@ -145,8 +159,8 @@ class GWinWrap:
|
||||
def addToGrid(self, args):
|
||||
args[0].attach(args[1], args[2], args[3], 1, 1)
|
||||
|
||||
def generateThumbnail(self, fullPathFile):
|
||||
subprocess.call(["ffmpegthumbnailer", "-t", "65%", "-s", "300", "-c", "jpg", "-i", fullPathFile, "-o", "/tmp/image.png"])
|
||||
def generateThumbnail(self, fullPathFile, hashImgpth):
|
||||
subprocess.call(["ffmpegthumbnailer", "-t", "65%", "-s", "300", "-c", "jpg", "-i", fullPathFile, "-o", hashImgpth])
|
||||
|
||||
def createGtkImage(self, path, wxh):
|
||||
try:
|
||||
@ -158,17 +172,26 @@ class GWinWrap:
|
||||
return gtk.Image.new_from_pixbuf(pixbuf)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
return gtk.Image()
|
||||
|
||||
def runMplayerProcess(self, widget, eve, params):
|
||||
self.setSelected(params[2])
|
||||
video = params[0] #.replace(" ", "\\ ")
|
||||
|
||||
if eve.type == gdk.EventType.DOUBLE_BUTTON_PRESS:
|
||||
subprocess.call(["mplayer", "-really-quiet", "-ao", "null", "-loop", "0", params[0]])
|
||||
subprocess.call([self.player, video, "-really-quiet", "-ao", "null", "-loop", "0"])
|
||||
|
||||
self.toSavePath = params[0]
|
||||
self.applyType = 1
|
||||
self.helpLabel.set_markup("<span foreground=\"#e0cc64\">" + params[1] + "</span>")
|
||||
|
||||
def openMainImageViewer(self, widget):
|
||||
subprocess.call([self.imgVwr, self.toSavePath])
|
||||
|
||||
def runImageViewerProcess(self, widget, eve, params):
|
||||
self.setSelected(params[2])
|
||||
|
||||
if eve.type == gdk.EventType.DOUBLE_BUTTON_PRESS:
|
||||
previewWindow = self.builder.get_object("previewWindow")
|
||||
previewImg = self.builder.get_object("previewImg")
|
||||
@ -180,22 +203,25 @@ class GWinWrap:
|
||||
self.applyType = 2
|
||||
self.helpLabel.set_markup("<span foreground=\"#e0cc64\">" + params[1] + "</span>")
|
||||
|
||||
def openMainImageViewer(self, widget):
|
||||
subprocess.call(["xdg-open", self.toSavePath])
|
||||
def setSelected(self, eveBox):
|
||||
if self.selectedImg:
|
||||
col = gdk.RGBA(0.0, 0.0, 0.0, 0.0)
|
||||
self.selectedImg.override_background_color(gtk.StateType.NORMAL, col)
|
||||
|
||||
col = gdk.RGBA(0.9, 0.7, 0.4, 0.74)
|
||||
eveBox.override_background_color(gtk.StateType.NORMAL, col)
|
||||
self.selectedImg = eveBox
|
||||
|
||||
def closePopup(self, widget):
|
||||
previewWindow = self.builder.get_object("previewWindow")
|
||||
previewWindow.popdown()
|
||||
self.builder.get_object("previewWindow").popdown()
|
||||
|
||||
def mouseOver(self, widget, eve, args):
|
||||
pass
|
||||
# hand_cursor = gdk.Cursor(gdk.CursorType.GDK_HAND2)
|
||||
# self.window.get_window().set_cursor(hand_cursor)
|
||||
hand_cursor = gdk.Cursor(gdk.CursorType.HAND2)
|
||||
self.window.get_window().set_cursor(hand_cursor)
|
||||
|
||||
def mouseOut(self, widget, eve, args):
|
||||
pass
|
||||
# watch_cursor = gdk.Cursor(gdk.CursorType.GDK_LEFT_PTR)
|
||||
# self.window.get_window().set_cursor(watch_cursor)
|
||||
watch_cursor = gdk.Cursor(gdk.CursorType.LEFT_PTR)
|
||||
self.window.get_window().set_cursor(watch_cursor)
|
||||
|
||||
def toggleXscreenUsageField(self, widget, data=None):
|
||||
useXscreenSaver = self.builder.get_object("useXScrnList")
|
||||
@ -204,6 +230,21 @@ class GWinWrap:
|
||||
else:
|
||||
self.builder.get_object("xScreenSvrList").set_sensitive(False)
|
||||
|
||||
def popSttingsWindow(self, widget):
|
||||
self.builder.get_object("settingsWindow").popup()
|
||||
|
||||
def saveToSettingsFile(self, widget):
|
||||
self.player = self.builder.get_object("customVideoPlyr").get_text().strip()
|
||||
self.imgVwr = self.builder.get_object("customImgVwr").get_text().strip()
|
||||
self.sttngsSver.saveSettings(self.player, self.imgVwr)
|
||||
|
||||
def retrieveSettings(self):
|
||||
data = self.sttngsSver.retrieveSettings()
|
||||
self.player = data[0]
|
||||
self.imgVwr = data[1]
|
||||
self.builder.get_object("customVideoPlyr").set_text(self.player)
|
||||
self.builder.get_object("customImgVwr").set_text(self.imgVwr)
|
||||
|
||||
def saveToFile(self, widget, data=None):
|
||||
saveLoc = self.builder.get_object("saveLoc").get_active_text()
|
||||
useXscreenSaver = self.builder.get_object("useXScrnList").get_active()
|
||||
|
@ -37,12 +37,25 @@
|
||||
<property name="stock">gtk-jump-to</property>
|
||||
<property name="icon_size">3</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="saveImag">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-save</property>
|
||||
<property name="icon_size">3</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="saveImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-save</property>
|
||||
<property name="icon_size">3</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="settingsImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="tooltip_text" translatable="yes">Settings....</property>
|
||||
<property name="stock">gtk-properties</property>
|
||||
<property name="icon_size">3</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="startImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
@ -63,7 +76,7 @@
|
||||
<property name="window_position">center</property>
|
||||
<property name="default_width">950</property>
|
||||
<property name="default_height">600</property>
|
||||
<property name="icon">GWinWrap.png</property>
|
||||
<property name="icon">icons/GWinWrap.png</property>
|
||||
<property name="gravity">center</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
@ -98,22 +111,6 @@
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton">
|
||||
<property name="label" translatable="yes">Clear</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="image">clearImage</property>
|
||||
<property name="always_show_image">True</property>
|
||||
<signal name="clicked" handler="clearSelection" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFileChooserButton" id="selectedDirDialog">
|
||||
<property name="visible">True</property>
|
||||
@ -127,6 +124,21 @@
|
||||
<property name="title" translatable="yes">Dream Scene / Image Dir</property>
|
||||
<signal name="file-set" handler="setNewDir" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="image">settingsImage</property>
|
||||
<property name="always_show_image">True</property>
|
||||
<signal name="clicked" handler="popSttingsWindow" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
@ -140,6 +152,18 @@
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkProgressBar" id="loadProgress">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="show_text">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
<property name="visible">True</property>
|
||||
@ -182,19 +206,23 @@
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkProgressBar" id="loadProgress">
|
||||
<object class="GtkButton">
|
||||
<property name="label" translatable="yes">Clear</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="show_text">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="image">clearImage</property>
|
||||
<property name="always_show_image">True</property>
|
||||
<signal name="clicked" handler="clearSelection" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
@ -487,7 +515,7 @@
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton">
|
||||
<property name="label" translatable="yes">Start</property>
|
||||
<property name="label" translatable="yes">(Re)Start</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
@ -633,6 +661,7 @@
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-missing-image</property>
|
||||
<property name="icon_size">6</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
@ -647,4 +676,108 @@
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkPopover" id="settingsWindow">
|
||||
<property name="width_request">250</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="relative_to">button1</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="pixbuf">icons/player.png</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="customVideoPlyr">
|
||||
<property name="width_request">330</property>
|
||||
<property name="height_request">26</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Set Custom Video Player</property>
|
||||
<property name="placeholder_text" translatable="yes">Set Custom Video Player</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</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="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="pixbuf">icons/picture.png</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="customImgVwr">
|
||||
<property name="width_request">330</property>
|
||||
<property name="height_request">26</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Set Custom Image Viewer</property>
|
||||
<property name="placeholder_text" translatable="yes">Set Custom Image Viewer</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</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">
|
||||
<property name="label" translatable="yes">Save</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="image">saveImag</property>
|
||||
<property name="always_show_image">True</property>
|
||||
<signal name="clicked" handler="saveToSettingsFile" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.1 KiB |
BIN
python/src/versions/0.0.1/GWinWrap/resources/icons/picture.png
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
python/src/versions/0.0.1/GWinWrap/resources/icons/player.png
Normal file
After Width: | Height: | Size: 6.4 KiB |
@ -0,0 +1,3 @@
|
||||
window {
|
||||
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os, json
|
||||
|
||||
class SaveGWinWrapSettings:
|
||||
def __init__(self):
|
||||
configFolder = os.path.expanduser('~') + "/.config/gwinwrap/"
|
||||
self.configFile = configFolder + "settings.ini"
|
||||
|
||||
if os.path.isdir(configFolder) == False:
|
||||
os.mkdir(configFolder)
|
||||
|
||||
if os.path.isfile(self.configFile) == False:
|
||||
open(self.configFile, 'a').close()
|
||||
|
||||
|
||||
def saveSettings(self, player, imgVwr):
|
||||
data = {}
|
||||
data['gwinwrap_settings'] = []
|
||||
|
||||
data['gwinwrap_settings'].append({
|
||||
'player': player,
|
||||
'imgvwr': imgVwr
|
||||
})
|
||||
|
||||
with open(self.configFile, 'w') as outfile:
|
||||
json.dump(data, outfile)
|
||||
|
||||
|
||||
|
||||
def retrieveSettings(self):
|
||||
returnData = []
|
||||
|
||||
with open(self.configFile) as infile:
|
||||
try:
|
||||
data = json.load(infile)
|
||||
for obj in data['gwinwrap_settings']:
|
||||
returnData = [obj['player'], obj['imgvwr']]
|
||||
except Exception as e:
|
||||
returnData = ['mplayer', 'xdg-open']
|
||||
|
||||
if returnData[0] == '':
|
||||
returnData[0] = 'mplayer'
|
||||
|
||||
if returnData[1] == '':
|
||||
returnData[1] = 'xdg-open'
|
||||
|
||||
return returnData
|
@ -2,7 +2,7 @@
|
||||
|
||||
import os
|
||||
|
||||
class SaveState:
|
||||
class SaveStateToXWinWarp:
|
||||
def __init__(self):
|
||||
self.fileWriter = None
|
||||
self.toSavePath = None
|
@ -1 +1,2 @@
|
||||
from utils.SaveState import SaveState
|
||||
from utils.SaveStateToXWinWarp import SaveStateToXWinWarp
|
||||
from utils.SaveGWinWrapSettings import SaveGWinWrapSettings\
|
||||
|