plugins/IrfanView/__init__.py
# -*- coding: utf-8 -*-
version="0.2.5"
# plugins/IrfanView/__init__.py
#
# Copyright (C) 2007 Pako <lubos.ruckl@quick.cz>
#
# This file is a plugin for EventGhost.
# Copyright © 2005-2020 EventGhost Project <http://www.eventghost.net/>
#
# EventGhost is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 2 of the License, or (at your option)
# any later version.
#
# EventGhost is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along
# with EventGhost. If not, see <http://www.gnu.org/licenses/>.
#
# Changelog (in reverse chronological order):
# -------------------------------------------
# 0.2.5 by Pako 2011-04-28 13:31 UTC+1
# - Now can be file i_view32.ini also in RoamingAppData+"\\IrfanView\\"
# - Added actions Scroll right and Scroll left
eg.RegisterPlugin(
name = "IrfanView",
author = "Pako",
version = version,
kind = "program",
guid = "{9593B4E9-5089-4C1F-BCE5-4A0B07F63DEE}",
description = (
'Adds actions to control <a href="http://www.irfanview.com/">'
'IrfanView</a>.'
),
createMacrosOnAdd = True,
url = "http://www.eventghost.net/forum/viewtopic.php?t=579",
icon = (
"R0lGODlhEAAQAPcAAAQCBISChIQCBMTCxPwCBPz+/AAAAAAAAHoDFR0AAAAAAAAAAAAEFQ"
"AAABUAAAAAAA0CDQAAAAAAAAAAAAAADQIAAAAAAAAAAAAABAEADwAAEAAABygArukABBIA"
"hQAAA+kAF+UAAIEAAHwAAAABAQAAAAEAAAAAAFYaGQAAAAAAAAAAADAAEegAABIAAAAAAH"
"MA0QAAOQAAJQAAW1AVhOkAABIAAAAAABgViO4AFpAAKHwAW3ANFQUAAJEAAHwAAP8NG/8A"
"AP8AAP8AAG0ElQUPOZEQJXwHW4WuCOcEP4GFOHwDAAAXpgAAExUAEgAAAFgB+AMAPgAAOA"
"AAAPAZ274AGhgAJQAAW8gRDC4A9xsAEgAAAAABIAAAIAAARgAAAH4HhAAAAAAAAMAAAAAI"
"pgAAEwAAEgAAAP8JhP8AAP8AAP8AAP8BAP8AAP8AAP8CAAABGwAAAAAAHwAAAAAwBADqAA"
"ASAAAAAADQ4gA8BBUlAABbAGDwYOk/nhI4gAAAfNIbQOYAXIEAGHwAAMgfAC4AABsAAAAA"
"AErwB+PqAIESAHwAAKBGAHfQAFAmAABbAMjwAC4/UAE4GAAAAGsFAAAAAAAAAAAAAJxrAO"
"hZABIAAAAAAAB4AADqAAASAAAAAAiFAPwrABKDAAB8ABgAaO4AnpAAgHwAfHAA/wUA/5EA"
"/3wA//8AYP8Anv8AgP8AfG0pKgW3AJGSAHx8AEpAKvRcAIAYAHwAAAA0WABk8RWDEgB8AA"
"D//wD//wD//wD//8gAAC4AABsAAAAAAABcpAHq6wASEgAAAAA09gBkOACDTAB8AFcIhPT8"
"64ASEnwAAIgYd+ruEBKQTwB8AMgAuC636xuSEgB8AKD/NAD/ZAD/gwD/fB9AWgBc7AAYEg"
"AAABE01ABk/wCD/wB8fwSgMADr7AASEgAAAAPnQABkXACDGAB8AACINABkZACDgwB8fAAB"
"QAAAXAAAGAAAAAQxawAAWQAAAAAAAAMBAAAAAAAAAAAAAAAajQAA4gAARwAAACH5BAEAAA"
"UALAAAAAAQABAABwhqAAsIFDiAYICBAxIOLEDgIIGHBQtElCiwocSHEhUKDNAQQICCFiNO"
"FBAAAMSGGhcyfMiSQMGJCFuyVFng4EqZDz9+xMnzZM+cAyx+lMhRJkyKII3SfBkUY9CiFB"
"diHMjx5cKmNq/CxEozIAA7"
),
)
class Text:
filemask = "i_view32.exe|i_view32.exe|All-Files (*.*)|*.*"
label = "Path to i_view32.exe:"
text1 = "Couldn't find IrfanView window !"
grpName1 = "File"
grpName2 = "Edit"
grpName3 = "Picture"
grpName4 = "Settings"
grpName5 = "View"
grpName6 = "Other"
grpDescription1 = "Adds File menu to control IrfanView."
grpDescription2 = "Adds Edit menu to control IrfanView."
grpDescription3 = "Adds Picture menu to control IrfanView."
grpDescription4 = "Adds Settings menu to control IrfanView."
grpDescription5 = "Adds View menu to control IrfanView."
grpDescription6 = "Adds other actions to control IrfanView."
err ="Couldn't find file i_view32.exe !"
class RunDefault:
text2="Couldn't find file i_view32.exe !"
import wx
import os
from ConfigParser import SafeConfigParser
#from shutil import copyfile
import _winreg
import win32api
import locale
from eg.WinApi.Utils import CloseHwnd
myEncoding = locale.getdefaultlocale()[1]
Actions =((#Tuple 0 - most important actions
("OpenDialog","Show open dialog","Show open dialog.",u'{O}'),
("ShowNextPgOrFile","Show next page OR file","Show next page in a multipage image OR load next file in directory.",u'{Ctrl+PgDown}'),
("ShowPrevPgOrFile","Show previous page OR file","Show previous page in a multipage image OR load previous file in directory.",u'{Ctrl+PgUp}'),
("ScrollRight","Scroll right","Scroll image right OR next image in directory.",u'{Right}'),
("ScrollLeft","Scroll left","Scroll image left OR previous image in directory.",u'{Left}'),
("LoadFirstFile","First file in directory","Load first file in the directory.",u'{Ctrl+Home}'),
("LoadLastFile","Last file in directory","Load last file in the directory.",u'{Ctrl+End}'),
("CloseActualWindow","Close actual window","Close actual window (main window, slideshow, full screen,thumbnails or a dialog).",u'{Esc}'),
("ToggleStatusBar","Show/hide status bar","Show/hide status bar.",u'{Alt+Shift+S}'),
("ToggleToolbar","Show/hide toolbar","Show/hide toolbar.",u'{Alt+Shift+T}'),
("ToggleMenuBar","Show/hide menu bar","Show/hide menu bar.",u'{Alt+Shift+M}'),
("ToggleCaption","Show/hide caption","Show/hide caption.",u'{Alt+Shift+C}'),
("ToggleFit","Fit to desktop/Fit to image","Switch (toggle) between 'Fit images to desktop' and 'Fit window to image'.",u'{F}'),
("ZoomIn","Zoom In","Zoom In.",u'{Add}'),
("ZoomOut","Zoom Out","Zoom Out.",u'{Subtract}'),
("OriginalSize","Original size","Original size (no zoom).",u'{Ctrl+H}'),
("FullScreen","Full Screen","Full Screen.",u'{Enter}'),
("FullScreenMode1","Full screen mode 1:1","Full screen mode: Show images/movies with the original size (1:1).",u'{1}'),
("FullScreenMode2","Large fit to full screen","Full screen mode: Fit to screen only large images.",u'{2}'),
("FullScreenMode3","All fit to full screen","Full screen mode: Fit to screen all images/movies.",u'{3}'),
("FullScreenMode4","All stretch to full screen","Full screen mode: Stretch all images/movies to screen.",u'{4}'),
("StartDirSlideshow","Start directory slideshow","Start slideshow with current directory files.",u'{Ctrl+W}'),
("ToggleAutSlideshow1","Start/stop automatic slideshow","Start/stop automatic viewing (slideshow in window).",u'{Shift+A}'),
("ToggleAutSlideshow2","Pause/Resume automatic slideshow","Pause an automatic slideshow. Press this key again to resume the slideshow.",u'{Pause}'),
("MinimizeWindow","Minimize IrfanView window","Minimize IrfanView window - Boss key ;-).",u'{M}'),
),(#Tuple 1 - File menu
#("OpenDialog","Show Open dialog","Show Open dialog.",u'{O}'),
("ReopenFile","Reopen file","Reopen file.",u'{Shift+R}'),
("OpenInExternal","Open in external","Open in external viewer/editor.",u'{Shift+E}'),
("Thumbnails","Thumbnails","Thumbnails.",u'{T}'),
("SlideshowDialog","Show Slideshow dialog","Show Slideshow dialog.",u'{W}'),
("BatchConversionRename","Batch Conversion/Rename","Batch Conversion/Rename.",u'{B}'),
("RenameFile","Rename file","Rename file.",u'{F2}'),
("MoveFile","Move file","Move file.",u'{F7}'),
("CopyFile","Copy file","Copy file.",u'{F8}'),
("DeleteFile","Delete file","Delete file.",u'{Del}'),
("SaveDialog","Show Save dialog","Show Save dialog.",u'{Ctrl+S}'),
("SaveAs",'Show "Save as" dialog','Show "Save as" dialog.',u'{S}'),
("PrintDialog","Show Print dialog","Show Print dialog.",u'{Ctrl+P}'),
("DirectPrint","Direct print","Print image, hide print dialog (direct print).",u'{Ctrl+Alt+P}'),
("AcquireBatchScanning","Acquire/Batch Scanning","Acquire/Batch Scanning.",u'{Ctrl+Shift+A}'),
#("CloseActualWindow","Close actual window","Close actual window (main window, slideshow, full screen, thumbnails or a dialog).",u'{Esc}'),
("SearchFiles","Search files","Search files.",u'{Ctrl+F}'),
),(#Tuple 2 - Edit menu
("EditUndo","Edit - Undo","Edit - Undo.",u'{Ctrl+Z}'),
("CreateSelection","Create custom selection","Create custom selection.",u'{Shift+C}'),
("InsertText","Insert text into selection","Edit - Insert text into selection.",u'{Ctrl+T}'),
("CutSelectionRectangle","Cut selection rectangle","Cut selection rectangle.",u'{Ctrl+X}'),
("CropSelectionRectangle","Crop selection rectangle","Crop selection rectangle.",u'{Ctrl+Y}'),
("CopyToClipboard","Copy image to clipboard","Copy image to clipboard.",u'{Ctrl+C}'),
# ("PasteFromClipboard","Paste image from clipboard","Paste image from clipboard.",u'{Ins}'),
("PasteFromClipboard","Paste from clipboard","Paste image from clipboard.",u'{Ctrl+V}'),
("EditDelete","Delete (Clear display) ","Delete - clear display.",u'{D}'),
),(#Tuple 3 - Picture menu
("ShowInformation","Show image information","Show image information.",u'{I}'),
("RotateLeft","Rotate left","Rotate left.",u'{L}'),
("RotateRight","Rotate right","Rotate right.",u'{R}'),
("RotateAngle","User/Fine rotation","Rotate by angle.",u'{Ctrl+U}'),
("VerticalFlip","Vertical flip","Vertical flip.",u'{V}'),
("HorizontalFlip","Horizontal flip","Horizontal flip.",u'{H}'),
("ResampleDialog","Show Resample dialog","Show Resample dialog.",u'{Ctrl+R}'),
("EnhanceColors","Enhance colors","Enhance colors.",u'{Shift+G}'),
("AutoColorCorrection","Auto color correction","Auto color correction.",u'{Shift+U}'),
("Sharpen","Sharpen","Sharpen.",u'{Shift+S}'),
("RedEyeReduction","Red eye reduction","Red eye reduction.",u'{Shift+Y}'),
("EffectsSetup","Effects setup","Effects setup.",u'{Ctrl+E}'),
("AdobeFiltersDialog","Adobe 8BF filters dialog","Adobe 8BF filters dialog.",u'{Ctrl+K}'),
("FilterFactoryDialog","Filter Factory dialog","Filter Factory dialog.",u'{K}'),
("RotationLeft","Lossless JPG rotation Left","Lossless JPG rotation - to left.",u'{Ctrl+Shift+L}'),
("RotationRight","Lossless JPG rotation right","Lossless JPG rotation - to right.",u'{Ctrl+Shift+R}'),
),(#Tuple 4 - Settings menu
("PropertiesDialog","Show Properties dialog","Show Properties dialog.",u'{P}'),
("StopAnimation","Stop animation","Stop GIF or ANI animation.",u'{G}'),
("ShowCommentDialog","Show Comment dialog JPGs","Show Comment dialog for JPGs.",u'{Ctrl+Shift+M}'),
("JpgLosslessOperations","JPG lossless operations","JPG lossless operations.",u'{Shift+J}'),
("CaptureDialog","Show Capture dialog","Show Capture dialog.",u'{C}'),
#("MinimizeWindow","Minimize IrfanView window","Minimize IrfanView window - Boss key ;-).",u'{M}'),
("WallpaperCentered","Wallpaper centered","Set as wallpaper - centered.",u'{Ctrl+Shift+C}'),
("WallpaperTiled","Wallpaper tiled","Set as wallpaper - tiled.",u'{Ctrl+Shift+T}'),
("WallpaperStretched","Wallpaper stretched","Set as wallpaper - stretched.",u'{Ctrl+Shift+S}'),
("PreviousWallpaper","Previous wallpaper","Set as wallpaper - previous wallpaper.",u'{Ctrl+Shift+P}'),
),(#Tuple 5 - View menu
#("ToggleStatusBar","Show/hide status bar","Show/hide status bar.",u'{Alt+Shift+S}'),
#("ToggleToolbar","Show/hide toolbar","Show/hide toolbar.",u'{Alt+Shift+T}'),
#("ToggleMenuBar","Show/hide menu bar","Show/hide menu bar.",u'{Alt+Shift+M}'),
#("ToggleCaption","Show/hide caption","Show/hide caption.",u'{Alt+Shift+C}'),
#("ToggleFit","Fit to desktop/Fit to image","Switch (toggle) between 'Fit images to desktop' and 'Fit window to image'.",u'{F}'),
#("FullScreen","Full Screen","Full Screen.",u'{Enter}'),
#("FullScreenMode1","Full screen mode 1:1","Full screen mode: Show images/movies with the original size (1:1).",u'{1}'),
#("FullScreenMode2","Large fit to full screen","Full screen mode: Fit to screen: large images only.",u'{2}'),
#("FullScreenMode3","All fit to full screen","Full screen mode: Fit to screen: all images/movies.",u'{3}'),
#("FullScreenMode4","All stretch to full screen","Full screen mode: Stretch all images/movies to screen.",u'{4}'),
("LoadNextFile","Next file in directory","Load next file in directory.",u'{Space}'),
("LoadPrevFile","Previous file in directory","Load previous file in directory.",u'{Backspace}'),
#("LoadFirstFile","Load first file","Load first file in the directory.",u'{Ctrl+Home}'),
#("LoadLastFile","Load last file","Load last file in the directory.",u'{Ctrl+End}'),
("OpenRandomImage","Open random image","Open random image from the directory.",u'{Ctrl+M}'),
("Refresh","Refresh","Refresh (display and directory list).",u'{F5}'),
#("ToggleAutSlideshow1","Start/stop automatic slideshow","Start/stop automatic viewing (slideshow in window).",u'{Shift+A}'),
#("ZoomIn","Zoom In","Zoom In.",u'{Add}'),
#("ZoomOut","Zoom Out","Zoom Out.",u'{Subtract}'),
("ToggleLockZoom","Lock/unlock zoom","Lock/unlock zoom (also in full screen mode).",u'{Shift+L}'),
#("OriginalSize","Original size","Original size (no zoom).",u'{Ctrl+H}'),
("ShowInHexViewer","Show in HEX viewer","Show image in HEX viewer.",u'{F3}'),
("EditMultipageTif","Edit multipage TIF","Edit multipage TIF.",u'{Ctrl+Q}'),
#("ShowNextPgOrFile","Show next page OR file","Show next page in a multipage image OR load next file in directory.",u'{Ctrl+PgDown}'),
#("ShowPrevPgOrFile","Show previous page OR file","Show previous page in a multipage image OR load previous file in directory.",u'{Ctrl+PgUp}'),
("ScrollImageUp","Scroll image up","Scroll image up.",u'{Up}'),
("ScrollImageDown","Scroll image down","Scroll image down.",u'{Down}'),
("ScrollRightOrNext","Scroll right OR next image","Scroll image right OR next image in directory.",u'{Right}'),
("ScrollLeftOrPrevious","Scroll left OR previous","Scroll image left OR previous image in directory.",u'{Left}'),
("ScrollUpOrPrevious","Scroll up OR previous file","Load previous file in directory OR scroll image up.",u'{PgUp}'),
("ScrollDownOrNext","Scroll down OR next file","Load next file in directory OR scroll image down.",u'{PgDown}'),
("ScrollToBeginOrFirstFile","Scroll to begin OR load first file","Scroll to begin (horizontal scroll) OR load first file in directory.",u'{Home}'),
("ScrollToEndOrLastFile","Scroll to end OR load last file","Scroll to end (horizontal scroll) OR load last file in directory.",u'{End}'),
),(#Tuple 6 - other actions
#("ToggleAutSlideshow2","Pause/Resume automatic slideshow","Pause an automatic slideshow. Press this key again to resume the slideshow.",u'{Pause}'),
("AppendToSlideshow","Append to current slideshow","Append current file to current slideshow.",u'{F4}'),
("ToggleSlideshow","Fullscreen/Slideshow text display","Toggle fullscreen/slideshow text display.",u'{N}'),
#("StartDirSlideshow","Start directory slideshow","Start slideshow with current directory files.",u'{Ctrl+W}'),
("ShowExifDialog","Show EXIF dialog","Show EXIF dialog for JPGs with available EXIF data.",u'{E}'),
("ControlSwitchThumb","Control switch in thumbnail window","Control switch in the thumbnail window.",u'{Ctrl+Tab}'),
("SwitchMainThumbnail","Switch main/thumbnail window","Switch between main and thumbnail window (if visible).",u'{Tab}'),
("SelectAllThumb","Select all thumbnails","Select all thumbnails (thumbnail window).",u'{Ctrl+A}'),
("OpenBrowseDialog",'Show "Browse-Subfolders" dialog.','Show "Browse-Subfolders" dialog.',u'{Ctrl+B}'),
("ShowIptcDialog","Show IPTC dialog","Show IPTC dialog for JPGs.",u'{Ctrl+I}'),
("SendByMail","Send image by email","Send image by email.",u'{Shift+M}'),
("CopyFilename","Copy filename to clipboard","Copy current filename to clipboard.",u'{Shift+P}'),
("JumpIntoToolbar","Jump into toolbar edit field","Jump into the toolbar edit field.",u'{Shift+T}'),
("Help","Help","Help.",u'{F1}'),
("AboutIrfanView",'Show "About IrfanView" dialog','Show "About IrfanView" dialog.',u'{A}'),
))
FindIrfanView = eg.WindowMatcher(
u'i_view32.exe', None, u'IrfanView', None, None, 1, False, 0.0, 0
)
class IrfanView(eg.PluginClass):
text=Text
IrfanViewPath = None
def OpenHelpPage(self,html_page):
try:
head, tail = os.path.split(self.IrfanViewPath)
return win32api.ShellExecute(
0,
None,
"hh.exe",
('mk:@MSITStore:'+head+'\i_view32.chm::/'\
+html_page).encode(myEncoding),
os.environ['SYSTEMROOT'],
1
)
except:
self.PrintError(self.text.err)
def __init__(self):
self.AddAction(RunDefault)
self.AddAction(RunCommandLine)
self.AddAction(RunSlideshow)
self.AddAction(RunWithOptions)
self.AddAction(Exit)
IrfanViewPath = ""
i=0
for grpTuple in Actions:
if i>0:
group=eval (
"self.AddGroup(self.text.grpName"+str(i)\
+", self.text.grpDescription"+str(i)+")"
)
for tmpClassName, tmpName, tmpDescription, tmpHotKey in grpTuple:
class tmpActionClass(eg.ActionClass):
name = tmpName
description = tmpDescription
hotKey = tmpHotKey
def __call__(self):
hwnds = FindIrfanView()
if len(hwnds) != 0:
eg.SendKeys(hwnds[0], self.hotKey, False)
else:
self.PrintError(self.plugin.text.text1)
return
tmpActionClass.__name__ = tmpClassName
if i>0:
group.AddAction(tmpActionClass)
else:
self.AddAction(tmpActionClass)
i+=1
def __start__(self, IrfanViewPath=None):
self.IrfanViewPath = IrfanViewPath
def Configure(self, IrfanViewPath=None):
if IrfanViewPath is None:
IrfanViewPath = self.GetIrfanViewPath()
if IrfanViewPath is None:
IrfanViewPath = os.path.join(
eg.folderPath.ProgramFiles,
"IrfanView",
"i_view32.exe"
)
panel = eg.ConfigPanel(self)
filepathCtrl = eg.FileBrowseButton(
panel,
size=(320,-1),
initialValue=IrfanViewPath,
startDirectory=eg.folderPath.ProgramFiles,
fileMask = self.text.filemask,
buttonText=eg.text.General.browse
)
panel.sizer.Add((5, 20))
panel.AddLabel(self.text.label)
panel.AddCtrl(filepathCtrl)
while panel.Affirmed():
panel.SetResult(filepathCtrl.GetValue())
def GetIrfanViewPath(self):
"""
Get the path of IrfanView's install-dir through querying the
Windows registry.
"""
try:
iv_reg = _winreg.OpenKey(
_winreg.HKEY_CLASSES_ROOT,
"\\Applications\\i_view32.exe\\shell\\open\\command"
)
IrfanViewPath =_winreg.QueryValue(iv_reg, None)
_winreg.CloseKey(iv_reg)
IrfanViewPath=IrfanViewPath[:-5]
IrfanViewPath=IrfanViewPath[1:-1]
except WindowsError:
IrfanViewPath = None
return IrfanViewPath
class RunDefault(eg.ActionClass):
name = "Run default"
description = "Run IrfanView with its default settings."
def __call__(self):
try:
head, tail = os.path.split(self.plugin.IrfanViewPath)
return win32api.ShellExecute(
0,
None,
tail,
None,
head,
1
)
except:
self.PrintError(self.text.text2)
class RunCommandLine(eg.ActionClass):
name = "Run with command line"
description = "Run IrfanView with command line options."
class text:
err ="Couldn't find file i_view32.exe !"
cmdline="Enter command line options:"
label="Label for this action:"
help = "Help"
def __call__(self,label,cmdline):
try:
head, tail = os.path.split(self.plugin.IrfanViewPath)
return win32api.ShellExecute(
0,
None,
tail,
cmdline.encode(myEncoding),
head,
1
)
except:
self.PrintError(self.text.err)
def GetLabel(self,label,cmdline):
return "Run command line "+label
def Configure(self,label="",cmdline=""):
panel = eg.ConfigPanel(self)
mainSizer =wx.BoxSizer(wx.VERTICAL)
cmdlineLbl=wx.StaticText(panel, -1, self.text.cmdline)
cmdlineCtrl=wx.TextCtrl(panel,-1,cmdline)
cmdlineCtrl.SetMinSize((400,20))
hlpbtnCtrl = wx.Button(panel, -1, self.text.help)
def onBtnClick(event):
self.plugin.OpenHelpPage('hlp_command_line.htm')
event.Skip()
hlpbtnCtrl.Bind(wx.EVT_BUTTON, onBtnClick, hlpbtnCtrl)
labelLbl=wx.StaticText(panel, -1, self.text.label)
labelCtrl=wx.TextCtrl(panel,-1,label)
mainSizer.Add(cmdlineLbl,0,wx.TOP,20)
mainSizer.Add(cmdlineCtrl,0,wx.EXPAND)
mainSizer.Add(hlpbtnCtrl,0,wx.ALIGN_RIGHT|wx.TOP,8)
mainSizer.Add(labelLbl,0,wx.ALIGN_RIGHT|wx.TOP,50)
mainSizer.Add(labelCtrl,0,wx.ALIGN_RIGHT)
panel.sizer.Add(mainSizer)
while panel.Affirmed():
panel.SetResult(labelCtrl.GetValue(),cmdlineCtrl.GetValue())
class RunSlideshow(eg.ActionClass):
name = "Run slideshow"
description = "Run IrfanView and start slideshow."
defaults = {
"label_": "",
"width_": 800.0,
"high_": 600.0,
"delay_": 5.0,
"filepath_": eg.folderPath.Pictures,
"dirpath_": eg.folderPath.Pictures,
"mode_": 1,
"source_": 0,
"fit_": 1,
"progress_": 0,
"loop_": False,
"noRepeat_": False,
"suppress_": True,
"displText_": True,
"soundLoop_": True,
"resample_": True,
"hideCursor_": True,
"alpha_": True,
"close_": True,
"mon_": 1,
"mask_": u"$D$F $X",
}
class text:
err ="Couldn't find file i_view32.exe !"
runslideshow = "Run slideshow "
radioboxmode = "Mode of slideshow"
modeFull = "Full screen"
modeWin = "Centered window"
radioboxsource = "Source of slideshow"
folder = "Folder"
txtFile = "Text file"
radioboxfit = "Fit mode"
mode1_1 = "Original size"
onlyBig = "Fit only big"
fitAll = "Fit all"
scratchAll = "Scratch all"
radioboxprogress = "Progress of pictures"
autoDelay = "Automatic after DELAY seconds"
autoKeyb = "Automatic after mouse/keyb input"
randomDelay = "Random after DELAY seconds"
randomKeyb = "Random after mouse/keyb input"
windowSize = "Window size [pixels]"
width = "Width:"
high = "Height:"
delay = "Delay [s]:"
label = "Label for this slideshow:"
loop = "Loop slideshow"
noRepeat = "No file repeat"
suppress = "Suppress errors during playing"
displtext = "Show text (filename ...)"
soundLoop = "Loop MP3 files (background music)"
resample = 'Use "Resample" function (slower)'
hideCursor = "Hide mouse cursor"
alpha = "Use Alpha blending between images"
close = "Close IrfanView after the last file"
filepath = "Path to text file:"
filemask = (
"Text files (*.txt)|*.txt|List files (*.lst)|*.lst"
"|All-Files (*.*)|*.*"
)
dirpath = "Path to folder:"
toolTipFile = 'Type filename or click browse to choose file'
browseTitle = "Selected folder:"
toolTipFolder = "Type directory name or browse to select"
monitor = "Monitor:"
lineOpt="Command line option:"
help = "Help"
mask = 'Mask for "Show text":'
def __call__(self, kwargs):
options = self.defaults.copy()
options.update(kwargs)
head, tail = os.path.split(self.plugin.IrfanViewPath)
cp = SafeConfigParser()
cp.optionxform = str #Case sensitive !
cp.read(head+"\\i_view32.ini")
if cp.has_option('Others','INI_Folder'):
INI_Folder = cp.get('Others','INI_Folder',True)
if INI_Folder == '%APPDATA%\\IrfanView':
INI_Folder = eg.folderPath.RoamingAppData+"\\IrfanView\\"
cp.read(INI_Folder+"\\i_view32.ini")
sec="Slideshow"
if not cp.has_section(sec):
cp.add_section(sec)
cp.set(sec, "WindowW", str(int(options["width_"])))
cp.set(sec, "WindowH", str(int(options["high_"])))
cp.set(sec, "AutoDelay", str(options["delay_"]))
cp.set(sec, "RandomDelay", str(options["delay_"]))
cp.set(sec, "PlayInWindow", str(options["mode_"]))
cp.set(sec, "Advancement", str(options["progress_"]+1))
cp.set(sec, "Loop", str(int(options["loop_"])))
cp.set(sec, "NoSameImageAgain", str(int(options["noRepeat_"])))
cp.set(sec, "SuppressErrors", str(int(options["suppress_"])))
cp.set(sec, "ShowFilename", str(int(options["displText_"])))
cp.set(sec, "LoopAudio", str(int(options["soundLoop_"])))
cp.set(sec, "HideCursor", str(int(options["hideCursor_"])))
cp.set(sec,"StopAndClose",str(int(options["close_"])))
if len(options["mask_"])>0:
cp.set(sec, "Text", options["mask_"])
sec="Viewing"
if not cp.has_section(sec):
cp.add_section(sec)
cp.set(sec, "ShowFullScreen", str(options["fit_"]))
cp.set(sec, "FSResample", str(int(options["resample_"])))
cp.set(sec, "FSAlpha", str(int(options["alpha_"])))
if cp.has_option('Others','INI_Folder'):
cp.remove_option('Others','INI_Folder')
fp = open(eg.folderPath.RoamingAppData+"\\EventGhost\\i_view32.ini",'wb')
cp.write(fp)
fp.close()
params='/slideshow="'+(options["filepath_"] if options["source_"] \
else options["dirpath_"])
params+='" /ini="'+eg.folderPath.RoamingAppData+'\\EventGhost\\" /monitor='\
+str(options["mon_"])
try:
return win32api.ShellExecute(
0,
None,
tail,
params.encode(myEncoding),
head,
1
)
except:
self.PrintError(self.text.err)
def GetLabel(self, kwargs):
options = self.defaults.copy()
options.update(kwargs)
return self.text.runslideshow+":"+options["label_"]
def Configure(self, kwargs={}):
options = self.defaults.copy()
options.update(kwargs)
panel = eg.ConfigPanel(self)
radioBoxMode = wx.RadioBox(
panel,
-1,
self.text.radioboxmode,
choices=[self.text.modeFull, self.text.modeWin],
style=wx.RA_SPECIFY_ROWS
)
radioBoxMode.SetSelection(options["mode_"])
radioBoxMode.SetMinSize((197,65))
radioBoxSource = wx.RadioBox(
panel,
-1,
self.text.radioboxsource,
choices=[self.text.folder, self.text.txtFile],
style=wx.RA_SPECIFY_ROWS
)
radioBoxSource.SetSelection(options["source_"])
radioBoxSource.SetMinSize((197,65))
radioBoxFit = wx.RadioBox(
panel,
-1,
self.text.radioboxfit,
choices=[
self.text.mode1_1,
self.text.onlyBig,
self.text.fitAll,
self.text.scratchAll
],
style=wx.RA_SPECIFY_ROWS
)
radioBoxFit.SetSelection(options["fit_"])
radioBoxFit.SetMinSize((197,100))
radioBoxProgress = wx.RadioBox(
panel,
-1,
self.text.radioboxprogress,
choices=[
self.text.autoDelay,
self.text.autoKeyb,
self.text.randomDelay,
self.text.randomKeyb
],
style=wx.RA_SPECIFY_ROWS
)
radioBoxProgress.SetSelection(options["progress_"])
widthLbl=wx.StaticText(panel, -1, self.text.width)
widthCtrl = eg.SpinNumCtrl(
panel,
-1,
options["width_"],
max=8000.0,
integerWidth= 4,
fractionWidth=0,
increment=10
)
highLbl=wx.StaticText(panel, -1, self.text.high)
highCtrl = eg.SpinNumCtrl(
panel,
-1,
options["high_"],
max=8000.0,
integerWidth= 4,
fractionWidth=0,
increment=10
)
delayLbl=wx.StaticText(panel, -1, self.text.delay)
delayCtrl = eg.SpinNumCtrl(
panel,
-1,
options["delay_"],
max=99999.0,
integerWidth= 5,
fractionWidth=1,
increment=0.1
)
loopCtrl = wx.CheckBox(panel, -1, self.text.loop)
loopCtrl.SetMinSize((205,15))
loopCtrl.SetValue(options["loop_"])
noRepeatCtrl = wx.CheckBox(panel, -1, self.text.noRepeat)
noRepeatCtrl.SetValue(options["noRepeat_"])
suppressCtrl = wx.CheckBox(panel, -1, self.text.suppress)
suppressCtrl.SetValue(options["suppress_"])
displTextCtrl = wx.CheckBox(panel, -1, self.text.displtext)
displTextCtrl.SetValue(options["displText_"])
soundLoopCtrl = wx.CheckBox(panel, -1, self.text.soundLoop)
soundLoopCtrl.SetValue(options["soundLoop_"])
resampleCtrl = wx.CheckBox(panel, -1, self.text.resample)
resampleCtrl.SetValue(options["resample_"])
hideCursorCtrl = wx.CheckBox(panel, -1, self.text.hideCursor)
hideCursorCtrl.SetValue(options["hideCursor_"])
alphaCtrl = wx.CheckBox(panel, -1, self.text.alpha)
alphaCtrl.SetValue(options["alpha_"])
closeCtrl = wx.CheckBox(panel, -1, self.text.close)
closeCtrl.SetValue(options["close_"])
#
monLbl=wx.StaticText(panel, -1, self.text.monitor)
monLbl.Enable(False)
monCtrl = eg.SpinIntCtrl(
panel,
-1,
options["mon_"],
max=99,
)
monCtrl.Enable(False)
labelLbl=wx.StaticText(panel, -1, self.text.label)
labelCtrl=wx.TextCtrl(panel,-1,options["label_"])
#
#lineOptLbl=wx.StaticText(dialog, -1, self.text.lineOpt)
#lineOptCtrl=wx.TextCtrl(dialog,-1,arrayValue[21])
#lineOptCtrl.SetMinSize((333,20))
#hlpbtnCommandCtrl = wx.Button(dialog, -1, self.text.help)
maskLbl=wx.StaticText(panel, -1, self.text.mask)
maskCtrl=wx.TextCtrl(panel,-1,options["mask_"])
hlpbtnPatternCtrl = wx.Button(panel, -1, self.text.help)
#Sizers
monSizer=wx.BoxSizer(wx.VERTICAL)
monSizer.Add(monLbl,0,wx.TOP,5)
monSizer.Add(monCtrl,0,wx.TOP,2)
#
dummySizer1 = wx.BoxSizer(wx.VERTICAL)
dummySizer1.Add((1,1))
#
LblSizer=wx.BoxSizer(wx.VERTICAL)
LblSizer.Add(labelLbl,0,wx.TOP|wx.RIGHT,5)
LblSizer.Add(labelCtrl,0,wx.TOP,2)
#
monLblSizer = wx.BoxSizer(wx.HORIZONTAL)
monLblSizer.Add(monSizer,0)
monLblSizer.Add(dummySizer1,wx.EXPAND)
monLblSizer.Add(LblSizer,0,wx.ALIGN_RIGHT)
#
#lineOptSizer = wx.FlexGridSizer(2,2,hgap=5,vgap=1)
#lineOptSizer.Add(lineOptLbl,0)
#lineOptSizer.Add((1,1))
#lineOptSizer.Add(lineOptCtrl,0)
#lineOptSizer.Add(hlpbtnCommandCtrl,0,wx.TOP,-2)
#
maskSizer=wx.FlexGridSizer(2,2,hgap=1,vgap=1)
maskSizer.Add(maskLbl,0,wx.RIGHT|wx.ALIGN_BOTTOM)
maskSizer.Add((1,1))
maskSizer.Add(maskCtrl,0,wx.RIGHT|wx.TOP,1)
maskSizer.Add(hlpbtnPatternCtrl,0,wx.TOP)
#
maskMonLblSizer=wx.GridSizer(1,2)
maskMonLblSizer.Add(maskSizer,0,wx.TOP,5)
maskMonLblSizer.Add(monLblSizer,0,wx.EXPAND)
#
delaySizer= wx.FlexGridSizer(2,1,vgap=1)
delaySizer.Add(delayLbl, 0,wx.LEFT,30)
delaySizer.Add(delayCtrl, 0,wx.LEFT,30)
#
windowSizer = wx.FlexGridSizer(rows=2, cols=2, hgap=30, vgap=2)
windowSizer.Add(widthLbl, 0,wx.LEFT,10)
windowSizer.Add(highLbl, 0)
windowSizer.Add(widthCtrl, 0,wx.LEFT,10)
windowSizer.Add(highCtrl, 0)
box = wx.StaticBox(panel,-1,self.text.windowSize)
boxSizer = wx.StaticBoxSizer(box,wx.HORIZONTAL)
boxSizer.Add(windowSizer,0)
#
radioSizer = wx.FlexGridSizer(rows=3, cols=2, hgap=10, vgap=10)
radioSizer.Add(radioBoxMode, 0)
radioSizer.Add(radioBoxSource, 0,wx.EXPAND)
radioSizer.Add(radioBoxFit, 0)
radioSizer.Add(radioBoxProgress, 0,wx.EXPAND)
radioSizer.Add(boxSizer,0,wx.EXPAND)
radioSizer.Add(delaySizer,0,wx.TOP,17)
#
checkBoxSizer = wx.FlexGridSizer(rows=4, cols=2, hgap=8,vgap=6)
checkBoxSizer.Add(loopCtrl, 0)
checkBoxSizer.Add(noRepeatCtrl, 0)
checkBoxSizer.Add(suppressCtrl, 0)
checkBoxSizer.Add(displTextCtrl, 0)
checkBoxSizer.Add(soundLoopCtrl, 0)
checkBoxSizer.Add(resampleCtrl, 0)
checkBoxSizer.Add(hideCursorCtrl, 0)
checkBoxSizer.Add(alphaCtrl, 0)
checkBoxSizer.Add((1,1))
checkBoxSizer.Add(closeCtrl, 0)
#
dynSizer = wx.BoxSizer(wx.VERTICAL)
mainSizer =wx.BoxSizer(wx.VERTICAL)
mainSizer.Add(radioSizer, 0,wx.EXPAND)
mainSizer.Add(checkBoxSizer,0,wx.TOP,10)
mainSizer.Add(maskMonLblSizer,0,wx.EXPAND|wx.TOP,8)
#mainSizer.Add(lineOptSizer,0,wx.TOP,8)
mainSizer.Add(dynSizer,0)
panel.sizer.Add(mainSizer)
#
def onSourceChange(event=None):
dynSizer.Clear(True)
if radioBoxSource.GetSelection():
filepathLbl=wx.StaticText(panel, -1, self.text.filepath)
filepathCtrl = eg.FileBrowseButton(
panel,
size=(370,-1),
initialValue=options["filepath_"],
startDirectory=eg.folderPath.ProgramFiles,
fileMask = self.text.filemask,
buttonText=eg.text.General.browse,
toolTip=self.text.toolTipFile
)
filepathCtrl.SetValue(options["filepath_"])
dynSizer.Add(filepathLbl,0,wx.TOP,8)
dynSizer.Add(filepathCtrl,0)
else:
dirpathLbl=wx.StaticText(panel, -1, self.text.dirpath)
dirpathCtrl = eg.DirBrowseButton(
panel,
-1,
size=(370,-1),
startDirectory=options["dirpath_"],
labelText="",
buttonText=eg.text.General.browse,
dialogTitle=self.text.browseTitle,
toolTip=self.text.toolTipFolder
)
dirpathCtrl.SetValue(options["dirpath_"])
dynSizer.Add(dirpathLbl,0,wx.TOP,8)
dynSizer.Add(dirpathCtrl,0)
mainSizer.Layout()
if event:
event.Skip()
radioBoxSource.Bind(wx.EVT_RADIOBOX, onSourceChange)
onSourceChange()
#def onBtnCommandClick(event):
# self.plugin.OpenHelpPage('hlp_command_line.htm')
# event.Skip()
#hlpbtnCommandCtrl.Bind(wx.EVT_BUTTON, onBtnCommandClick, hlpbtnCommandCtrl)
def onProgressChange(event=None):
noRepeatCtrl.Enable(radioBoxProgress.GetSelection()>1)
delayCtrl.Enable((radioBoxProgress.GetSelection()+1)%2)
delayLbl.Enable((radioBoxProgress.GetSelection()+1)%2)
if event:
event.Skip()
radioBoxProgress.Bind(wx.EVT_RADIOBOX, onProgressChange)
onProgressChange()
def onModeChange(event=None):
widthCtrl.Enable(radioBoxMode.GetSelection())
highCtrl.Enable(radioBoxMode.GetSelection())
widthLbl.Enable(radioBoxMode.GetSelection())
highLbl.Enable(radioBoxMode.GetSelection())
if event:
event.Skip()
radioBoxMode.Bind(wx.EVT_RADIOBOX, onModeChange)
onModeChange()
def onCloseChange(event=None):
loopCtrl.Enable(not closeCtrl.GetValue())
if event:
event.Skip()
closeCtrl.Bind(wx.EVT_CHECKBOX, onCloseChange)
onCloseChange()
def onBtnPatternClick(event):
self.plugin.OpenHelpPage('hlp_text_patternoptions.htm')
event.Skip()
hlpbtnPatternCtrl.Bind(
wx.EVT_BUTTON,
onBtnPatternClick,
hlpbtnPatternCtrl
)
def onShowTextChange(event=None):
maskLbl.Enable(displTextCtrl.GetValue())
maskCtrl.Enable(displTextCtrl.GetValue())
hlpbtnPatternCtrl.Enable(displTextCtrl.GetValue())
if event:
event.Skip()
displTextCtrl.Bind(wx.EVT_CHECKBOX, onShowTextChange)
onShowTextChange()
while panel.Affirmed():
#kwargs = {}
kwargs["label_"]=labelCtrl.GetValue()
kwargs["width_"]=widthCtrl.GetValue()
kwargs["high_"]=highCtrl.GetValue()
kwargs["delay_"]=delayCtrl.GetValue()
if radioBoxSource.GetSelection():
kwargs["filepath_"]=\
dynSizer.GetChildren()[1].GetWindow().GetValue()
else:
kwargs["dirpath_"]=\
dynSizer.GetChildren()[1].GetWindow().GetValue()
kwargs["mode_"]=radioBoxMode.GetSelection()
kwargs["source_"]=radioBoxSource.GetSelection()
kwargs["fit_"]=radioBoxFit.GetSelection()
kwargs["progress_"]=radioBoxProgress.GetSelection()
kwargs["loop_"]=loopCtrl.GetValue()
kwargs["noRepeat_"]=noRepeatCtrl.GetValue()
kwargs["suppress_"]=suppressCtrl.GetValue()
kwargs["displText_"]=displTextCtrl.GetValue()
kwargs["soundLoop_"]=soundLoopCtrl.GetValue()
kwargs["resample_"]=resampleCtrl.GetValue()
kwargs["hideCursor_"]=hideCursorCtrl.GetValue()
kwargs["alpha_"]=alphaCtrl.GetValue()
kwargs["close_"]=closeCtrl.GetValue()
kwargs["mon_"]=monCtrl.GetValue()
kwargs["mask_"]=maskCtrl.GetValue()
#kwargs["lineOpt_"]=lineOptCtrl.GetValue()
panel.SetResult(kwargs)
class RunWithOptions(eg.ActionClass):
name = "Run with options"
description = "Run IrfanView with options."
defaults = {
"label_": "",
"filepath_": eg.folderPath.Pictures,
"resample_": True,
"alpha_": True,
"hide_": True,
"displ_": True,
"resample2_": True,
"center_": True,
"caption_": True,
"menuBar_": True,
"toolBar_": True,
"statusBar_": True,
"fullOrWin_": 0,
"winMode_": 2,
"fullMode_": 1,
"xCoord_": 50,
"yCoord_": 50,
"width_": 800,
"high_": 600,
"mon_": 1,
"lineOpt_": "",
"mask_": u"$D$F $X"
}
class text:
err ="Couldn't find file i_view32.exe !"
runwithoption = "Run with option "
radioboxmode = "Starting mode"
modeWin = "Window"
modeFull = "Full screen"
radioboxwinmode = "Window mode"
winMode1 = "Fit window to image 1:1"
winMode2 = "Fit images to window"
winMode3 = "Fit only big images to window"
winMode4 = "Fit images to desktop"
winMode5 = "Fit only big images to desktop"
winMode6 = "Do not fit anything"
winMode7 = "Fit images to desktop width"
winMode8 = "Fit images to desktop height"
radiofullmode = "Full screen mode"
mode1_1 = "Original size"
onlyBig = "Fit only big"
fitAll = "Fit all"
scratchAll = "Scratch all"
windowHide = "Hide Window elements (checked=hide)"
caption = "Caption"
menuBar = "Menu bar"
toolBar = "Tool bar"
statusLine = "Status bar"
windowOption = "Window options"
resample2 = "Resample"
centerImage = "Center image in window"
posAndSize = "Start position and size of window"
xCoord = "X coordinate:"
yCoord = "Y coordinate:"
width = "Width:"
high = "Height:"
monitor = "Monitor:"
label = "Label for this action:"
displtext = "Show text (filename ...)"
fsOptions = "Full screen options"
resample = 'Use "Resample" function (slower)'
hideCursor = "Hide mouse cursor"
alpha = "Use Alpha blending between images"
filepath = "Path to file:"
filemask = (
"JPG files (*.jpg)|*.jpg"
"|BMP files (*.bmp)|*.bmp"
"|PNG files (*.png)|*.png"
"|All-Files (*.*)|*.*"
)
toolTipFile = 'Type filename or click browse to choose file'
lineOpt="Another options enter like command line:"
mask = 'Mask for "Show text":'
help = "Help"
def __call__(self, kwargs):
options = self.defaults.copy()
options.update(kwargs)
head, tail = os.path.split(self.plugin.IrfanViewPath)
cp = SafeConfigParser()
cp.optionxform = str #Case sensitive !
cp.read(head+"\\i_view32.ini")
if cp.has_option('Others','INI_Folder'):
INI_Folder = cp.get('Others','INI_Folder',True)
if INI_Folder == '%APPDATA%\\IrfanView':
INI_Folder = eg.folderPath.RoamingAppData+"\\IrfanView\\"
cp.read(INI_Folder+"\\i_view32.ini")
sec="WinPosition"
if not cp.has_section(sec):
cp.add_section(sec)
cp.set(sec, "Width", str(options["width_"]))
cp.set(sec, "Height", str(options["high_"]))
fp = open(head+"\\i_view32.ini",'wb')
cp.write(fp)
fp.close()
sec="Viewing"
if not cp.has_section(sec):
cp.add_section(sec)
cp.set(sec, "FSResample", str(int(options["resample_"])))
cp.set(sec, "FSAlpha", str(int(options["alpha_"])))
cp.set(sec, "HideCursor", str(int(options["hide_"])))
cp.set(sec, "ShowFullScreenName", str(int(options["displ_"])))
cp.set(sec, "UseResample", str(int(options["resample2_"])))
cp.set(sec, "Centered", str(int(options["center_"])))
cp.set(sec, "FullScreen", str(options["fullOrWin_"]))
cp.set(sec, "FitWindowOption", str(options["winMode_"]+1))
cp.set(sec, "ShowFullScreen", str(options["fullMode_"]))
if len(options["mask_"])>0:
cp.set(sec, "FullText", options["mask_"])
if cp.has_option('Others','INI_Folder'):
cp.remove_option('Others','INI_Folder')
fp = open(eg.folderPath.RoamingAppData+"\\EventGhost\\i_view32.ini",'wb')
cp.write(fp)
fp.close()
params=options["filepath_"]+' /hide='+str(8*options["caption_"]\
+4*options["menuBar_"]+2*options["statusBar_"]+options["toolBar_"])
params+=' /ini="'+eg.folderPath.RoamingAppData+'\\EventGhost\\" /pos=('\
+str(options["xCoord_"])+','+str(options["yCoord_"])+')'
if len(options["lineOpt_"])>0:
params+=' '+options["lineOpt_"]
#params+=' /monitor='+str(options["mon_"])
try:
return win32api.ShellExecute(
0,
None,
tail,
params.encode(myEncoding),
head,
1
)
except:
self.PrintError(self.text.err)
def GetLabel(self, kwargs):
options = self.defaults.copy()
options.update(kwargs)
return self.text.runwithoption+":"+options["label_"]
def Configure(self, kwargs={}):
options = self.defaults.copy()
options.update(kwargs)
panel = eg.ConfigPanel(self)
radioBoxfullOrWin = wx.RadioBox(
panel,
-1,
self.text.radioboxmode,
choices=[self.text.modeWin, self.text.modeFull],
style=wx.RA_SPECIFY_ROWS
)
radioBoxfullOrWin.SetSelection(options["fullOrWin_"])
radioBoxWinMode = wx.RadioBox(
panel,
-1,
self.text.radioboxwinmode,
choices=[
self.text.winMode1,
self.text.winMode2,
self.text.winMode3,
self.text.winMode4,
self.text.winMode5,
self.text.winMode6,
self.text.winMode7,
self.text.winMode8
],
style=wx.RA_SPECIFY_ROWS
)
radioBoxWinMode.SetSelection(options["winMode_"])
radioBoxFullMode = wx.RadioBox(
panel,
-1,
self.text.radiofullmode,
choices=[
self.text.mode1_1,
self.text.onlyBig,
self.text.fitAll,
self.text.scratchAll
],
style=wx.RA_SPECIFY_ROWS
)
radioBoxFullMode.SetSelection(options["fullMode_"])
resampleCtrl = wx.CheckBox(panel, -1, self.text.resample)
resampleCtrl.SetValue(options["resample_"])
alphaCtrl = wx.CheckBox(panel, -1, self.text.alpha)
alphaCtrl.SetValue(options["alpha_"])
hideCursorCtrl = wx.CheckBox(panel, -1, self.text.hideCursor)
hideCursorCtrl.SetValue(options["hide_"])
displTextCtrl = wx.CheckBox(panel, -1, self.text.displtext)
displTextCtrl.SetValue(options["displ_"])
captionCtrl = wx.CheckBox(panel, -1, self.text.caption)
captionCtrl.SetValue(options["caption_"])
menuBarCtrl = wx.CheckBox(panel, -1, self.text.menuBar)
menuBarCtrl.SetValue(options["menuBar_"])
toolBarCtrl = wx.CheckBox(panel, -1, self.text.toolBar)
toolBarCtrl.SetValue(options["toolBar_"])
statusLineCtrl = wx.CheckBox(panel, -1, self.text.statusLine)
statusLineCtrl.SetValue(options["statusBar_"])
resample2Ctrl = wx.CheckBox(panel, -1, self.text.resample2)
resample2Ctrl.SetValue(options["resample2_"])
centerImageCtrl = wx.CheckBox(panel, -1, self.text.centerImage)
centerImageCtrl.SetValue(options["center_"])
maskLbl=wx.StaticText(panel, -1, self.text.mask)
maskCtrl=wx.TextCtrl(panel,-1,options["mask_"])
hlpbtnPatternCtrl = wx.Button(panel, -1, self.text.help)
labelLbl=wx.StaticText(panel, -1, self.text.label)
labelCtrl=wx.TextCtrl(panel,-1,options["label_"])
monLbl=wx.StaticText(panel, -1, self.text.monitor)
monLbl.Enable(False)
monCtrl = eg.SpinIntCtrl(
panel,
-1,
options["mon_"],
max=99,
)
monCtrl.Enable(False)
xCoordLbl=wx.StaticText(panel, -1, self.text.xCoord)
xCoordCtrl = eg.SpinIntCtrl(
panel,
-1,
options["xCoord_"],
max=8000,
)
yCoordLbl=wx.StaticText(panel, -1, self.text.yCoord)
yCoordCtrl = eg.SpinIntCtrl(
panel,
-1,
options["yCoord_"],
max=8000,
)
widthLbl=wx.StaticText(panel, -1, self.text.width)
widthCtrl = eg.SpinIntCtrl(
panel,
-1,
options["width_"],
max=8000,
)
highLbl=wx.StaticText(panel, -1, self.text.high)
highCtrl = eg.SpinIntCtrl(
panel,
-1,
options["high_"],
max=8000,
)
lineOptLbl=wx.StaticText(panel, -1, self.text.lineOpt)
lineOptCtrl=wx.TextCtrl(panel,-1,options["lineOpt_"])
lineOptCtrl.SetMinSize((333,20))
hlpbtnCommandCtrl = wx.Button(panel, -1, self.text.help)
filepathLbl=wx.StaticText(panel, -1, self.text.filepath)
filepathCtrl = eg.FileBrowseButton(
panel,
size=(370,-1),
initialValue=options["filepath_"],
startDirectory=eg.folderPath.ProgramFiles,
fileMask = self.text.filemask,
buttonText=eg.text.General.browse,
toolTip=self.text.toolTipFile
)
filepathCtrl.SetValue(options["filepath_"])
#Sizers
posAndSizeSizer = wx.FlexGridSizer(4,2,hgap=40,vgap=1)
posAndSizeSizer.Add(xCoordLbl,0,wx.TOP,0)
posAndSizeSizer.Add(yCoordLbl,0,wx.TOP,0)
posAndSizeSizer.Add(xCoordCtrl,0,wx.TOP,0)
posAndSizeSizer.Add(yCoordCtrl,0,wx.TOP,0)
posAndSizeSizer.Add(widthLbl,0,wx.TOP,5)
posAndSizeSizer.Add(highLbl,0,wx.TOP,5)
posAndSizeSizer.Add(widthCtrl,0,wx.TOP,0)
posAndSizeSizer.Add(highCtrl,0,wx.TOP,0)
#
box4 = wx.StaticBox(panel,-1,self.text.posAndSize)
boxSizer4 = wx.StaticBoxSizer(box4,wx.HORIZONTAL)
boxSizer4.Add((10,1),0)
boxSizer4.Add(posAndSizeSizer,0,wx.EXPAND)
#
maskSizer=wx.FlexGridSizer(2,2,hgap=1,vgap=1)
maskSizer.Add(maskLbl,0,wx.RIGHT|wx.ALIGN_BOTTOM)
maskSizer.Add((1,1))
maskSizer.Add(maskCtrl,0,wx.RIGHT|wx.TOP,2)
maskSizer.Add(hlpbtnPatternCtrl,0,wx.TOP,1)
#
leftSizer = wx.BoxSizer(wx.VERTICAL)
leftSizer.Add(radioBoxfullOrWin,0,wx.EXPAND)
leftSizer.Add(radioBoxWinMode,0,wx.EXPAND|wx.TOP,9)
leftSizer.Add(boxSizer4,0,wx.EXPAND|wx.TOP,9)
leftSizer.Add(maskSizer,0,wx.EXPAND|wx.TOP,12)
#
box1 = wx.StaticBox(panel,-1,self.text.fsOptions)
boxSizer1 = wx.StaticBoxSizer(box1,wx.VERTICAL)
boxSizer1.Add(resampleCtrl, 0,wx.ALL,2)
boxSizer1.Add(alphaCtrl, 0,wx.ALL,2)
boxSizer1.Add(hideCursorCtrl, 0,wx.ALL,2)
boxSizer1.Add(displTextCtrl, 0,wx.ALL,2)
#
box2 = wx.StaticBox(panel,-1,self.text.windowHide)
boxSizer2 = wx.StaticBoxSizer(box2,wx.VERTICAL)
boxSizer2.Add(captionCtrl, 0,wx.ALL,2)
boxSizer2.Add(menuBarCtrl, 0,wx.ALL,2)
boxSizer2.Add(toolBarCtrl, 0,wx.ALL,2)
boxSizer2.Add(statusLineCtrl, 0,wx.ALL,2)
#
box3 = wx.StaticBox(panel,-1,self.text.windowOption)
boxSizer3 = wx.StaticBoxSizer(box3,wx.VERTICAL)
boxSizer3.Add(resample2Ctrl, 0,wx.ALL,2)
boxSizer3.Add(centerImageCtrl, 0,wx.ALL,2)
#
monSizer=wx.BoxSizer(wx.VERTICAL)
monSizer.Add(monLbl,0,wx.TOP,5)
monSizer.Add(monCtrl,0,wx.TOP,2)
dummySizer1 = wx.BoxSizer(wx.VERTICAL)
dummySizer1.Add((1,1))
LblSizer=wx.BoxSizer(wx.VERTICAL)
LblSizer.Add(labelLbl,0,wx.TOP|wx.RIGHT,5)
LblSizer.Add(labelCtrl,0,wx.TOP,2)
monLblSizer = wx.BoxSizer(wx.HORIZONTAL)
monLblSizer.Add(monSizer,0)
monLblSizer.Add(dummySizer1,wx.EXPAND)
monLblSizer.Add(LblSizer,0,wx.ALIGN_RIGHT)
#
rightSizer = wx.BoxSizer(wx.VERTICAL)
rightSizer.Add(radioBoxFullMode,0,wx.EXPAND)
rightSizer.Add(boxSizer1,0,wx.EXPAND|wx.TOP,7)
rightSizer.Add(boxSizer3,0,wx.EXPAND|wx.TOP,7)
rightSizer.Add(boxSizer2,0,wx.EXPAND|wx.TOP,7)
rightSizer.Add(monLblSizer,0,wx.EXPAND|wx.TOP,7)
#
cmdlineSizer = wx.FlexGridSizer(4,2,hgap=5,vgap=1)
cmdlineSizer.Add(lineOptLbl,0,wx.TOP,0)
cmdlineSizer.Add((1,1))
cmdlineSizer.Add(lineOptCtrl,0,wx.TOP,1)
cmdlineSizer.Add(hlpbtnCommandCtrl,0,wx.TOP,-1)
#
bottomSizer = wx.BoxSizer(wx.VERTICAL)
bottomSizer.Add(cmdlineSizer,0,wx.TOP,8)
bottomSizer.Add(filepathLbl,0,wx.TOP,8)
bottomSizer.Add(filepathCtrl,0,wx.TOP,1)
#
leftrightSizer = wx.BoxSizer(wx.HORIZONTAL)
leftrightSizer.Add(leftSizer,1)
leftrightSizer.Add((5,1))
leftrightSizer.Add(rightSizer,1)
mainSizer = wx.BoxSizer(wx.VERTICAL)
mainSizer.Add(leftrightSizer,0)
mainSizer.Add(bottomSizer,0)
panel.sizer.Add(mainSizer)
def onBtnPatternClick(event):
self.plugin.OpenHelpPage('hlp_text_patternoptions.htm')
event.Skip()
hlpbtnPatternCtrl.Bind(
wx.EVT_BUTTON,
onBtnPatternClick,
hlpbtnPatternCtrl
)
def onBtnCommandClick(event):
self.plugin.OpenHelpPage('hlp_command_line.htm')
event.Skip()
hlpbtnCommandCtrl.Bind(
wx.EVT_BUTTON,
onBtnCommandClick,
hlpbtnCommandCtrl
)
def onModeChange(event=None):
widthCtrl.Enable(radioBoxWinMode.GetSelection() in [1,2,5])
highCtrl.Enable(radioBoxWinMode.GetSelection() in [1,2,5])
widthLbl.Enable(radioBoxWinMode.GetSelection() in [1,2,5])
highLbl.Enable(radioBoxWinMode.GetSelection() in [1,2,5])
xCoordCtrl.Enable(radioBoxWinMode.GetSelection() in [1,2,5])
yCoordCtrl.Enable(radioBoxWinMode.GetSelection() in [1,2,5])
xCoordLbl.Enable(radioBoxWinMode.GetSelection() in [1,2,5])
yCoordLbl.Enable(radioBoxWinMode.GetSelection() in [1,2,5])
if event:
event.Skip()
radioBoxWinMode.Bind(wx.EVT_RADIOBOX, onModeChange)
onModeChange()
def onShowTextChange(event=None):
maskLbl.Enable(displTextCtrl.GetValue())
maskCtrl.Enable(displTextCtrl.GetValue())
hlpbtnPatternCtrl.Enable(displTextCtrl.GetValue())
if event:
event.Skip()
displTextCtrl.Bind(wx.EVT_CHECKBOX, onShowTextChange)
onShowTextChange()
while panel.Affirmed():
#kwargs = {}
kwargs["label_"]=labelCtrl.GetValue()
kwargs["filepath_"]=filepathCtrl.GetValue()
kwargs["resample_"]=resampleCtrl.GetValue()
kwargs["alpha_"]=alphaCtrl.GetValue()
kwargs["hide_"]=hideCursorCtrl.GetValue()
kwargs["displ_"]=displTextCtrl.GetValue()
kwargs["resample2_"]=resample2Ctrl.GetValue()
kwargs["center_"]=centerImageCtrl.GetValue()
kwargs["caption_"]=captionCtrl.GetValue()
kwargs["menuBar_"]=menuBarCtrl.GetValue()
kwargs["toolBar_"]=toolBarCtrl.GetValue()
kwargs["statusBar_"]=statusLineCtrl.GetValue()
kwargs["fullOrWin_"]=radioBoxfullOrWin.GetSelection()
kwargs["winMode_"]=radioBoxWinMode.GetSelection()
kwargs["fullMode_"]=radioBoxFullMode.GetSelection()
kwargs["xCoord_"]=xCoordCtrl.GetValue()
kwargs["yCoord_"]=yCoordCtrl.GetValue()
kwargs["width_"]=widthCtrl.GetValue()
kwargs["high_"]=highCtrl.GetValue()
kwargs["mon_"]=monCtrl.GetValue()
kwargs["lineOpt_"]=lineOptCtrl.GetValue()
kwargs["mask_"]=maskCtrl.GetValue()
panel.SetResult(kwargs)
class Exit(eg.ActionClass):
name = "Exit"
description = "Exit."
def __call__(self):
hwnds = FindIrfanView()
if len(hwnds) != 0:
CloseHwnd(hwnds[0])
else:
self.PrintError(self.plugin.text.text1)
return