Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
143 changes: 83 additions & 60 deletions src/deepinScrot.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,99 +30,122 @@
from constant import DEFAULT_FILENAME
saveFiletype = "png"

def openFileDialog(fullscreen=True, filetype='png'):

def saveToFile(fullscreen=True, fileName=None):
'''Save file to file.'''
pixbuf = getScrotPixbuf(fullscreen)
dialog = gtk.FileChooserDialog(
"Save..",
None,
gtk.FILE_CHOOSER_ACTION_SAVE,
(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT))


dialog.set_default_response(gtk.RESPONSE_ACCEPT)
dialog.set_position(gtk.WIN_POS_CENTER)
dialog.set_local_only(True)
if fileName is None:
dialog = gtk.FileChooserDialog(
"Save..",
None,
gtk.FILE_CHOOSER_ACTION_SAVE,
(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT))



dialog.set_current_folder(os.environ['HOME'])
dialog.set_current_name("%s%s.%s" % (DEFAULT_FILENAME, getFormatTime(), saveFiletype))


dialog.set_default_response(gtk.RESPONSE_ACCEPT)
dialog.set_position(gtk.WIN_POS_CENTER)
dialog.set_local_only(True)


optionMenu = gtk.OptionMenu()
optionMenu.set_size_request(155, -1)
menu = gtk.Menu()
menu.set_size_request(155, -1)

pngItem = makeMenuItem('PNG (*.png)',
lambda item, data: setSaveFiletype(dialog, 'png'))

jpgItem = makeMenuItem('JPEG (*.jpeg)',
lambda item, data: setSaveFiletype(dialog, 'jpeg'))

bmpItem = makeMenuItem('BMP (*.bmp)',
lambda item, data: setSaveFiletype(dialog, 'bmp'))




menu.append(pngItem)
menu.append(jpgItem)
menu.append(bmpItem)
optionMenu.set_menu(menu)


hbox = gtk.HBox()
hbox.pack_end(optionMenu, False, False)
dialog.vbox.pack_start(hbox, False, False)
hbox.show_all()

response = dialog.run()
dialog.set_current_folder(os.environ['HOME'])
dialog.set_current_name("%s%s.%s" % (DEFAULT_FILENAME, getFormatTime(), saveFiletype))

if response == gtk.RESPONSE_ACCEPT:
filename = dialog.get_filename()
pixbuf.save(filename, filetype)
print "Save snapshot to %s" % (filename)
elif response == gtk.RESPONSE_REJECT:
optionMenu = gtk.OptionMenu()
optionMenu.set_size_request(155, -1)
menu = gtk.Menu()
menu.set_size_request(155, -1)

pngItem = makeMenuItem('PNG (*.png)',
lambda item, data: setSaveFiletype(dialog, 'png'))

jpgItem = makeMenuItem('JPEG (*.jpeg)',
lambda item, data: setSaveFiletype(dialog, 'jpeg'))

bmpItem = makeMenuItem('BMP (*.bmp)',
lambda item, data: setSaveFiletype(dialog, 'bmp'))

menu.append(pngItem)
menu.append(jpgItem)
menu.append(bmpItem)
optionMenu.set_menu(menu)

hbox = gtk.HBox()
hbox.pack_end(optionMenu, False, False)
dialog.vbox.pack_start(hbox, False, False)
hbox.show_all()

response = dialog.run()

if response == gtk.RESPONSE_ACCEPT:
fileName = dialog.get_filename()
dialog.destroy()
if fileName is None:
print 'Closed, no files selected'
dialog.destroy()
else:
pixbuf.save(fileName, saveFiletype)
print "Save snapshot to %s" % (fileName)


def setSaveFiletype(widget, filetype):
widget.set_current_name("%s%s.%s" % (DEFAULT_FILENAME, getFormatTime(), filetype))
saveFiletype =filetype


def getFileNameFileType(fileName):
basename = os.path.basename(fileName).split(".")
if len(basename)>1:
fileType = basename[-1]
else:
fileType = None
if fileType.lower() in ("png","jepg","bmp"):
fileName = os.path.expanduser(fileName)
fileName = os.path.abspath(fileName)
dirName = os.path.dirname(fileName)
if os.path.isdir(dirName):
return (fileName,fileType)
else:
print dirName,"do not exist or not a directory"
return (None,None)
else:
print "The only supported file types are png, jepg and bmp"
return (None,None)



def processArguments():
'''init processArguments '''
parser = OptionParser(usage="Usage: %prog [options] [arg]", version="%prog v1.0")
parser.add_option("-f", "--full", action="store_true", dest="fullscreen", help="Taking the fullscreen shot")
parser.add_option("-w", "--window", action="store_true", dest="window", help="Taking the currently focused window")
parser.add_option("-d", "--delay", dest="delay", type="int", help="wait NUM seconds before taking a shot", metavar="NUM")

parser.add_option("-o", "--outfile", dest="outfile", type="str", help="Save the snapshot to a file, file type png,jepg and bmp are supported")
(options, args) = parser.parse_args()
#print parser.parse_args()
(fileName,saveFileType) = (None,"png")
if options.outfile:
(fileName,saveFileType) = getFileNameFileType(options.outfile)
if fileName is None:
sys.exit(-1)
if options.fullscreen and options.window:
parser.error("options -f and -w are mutually exclusive")
elif options.fullscreen:
if options.delay:
countdownWindow(options.delay)
openFileDialog()
saveToFile(True,fileName)
# openFileDialog()
else:
openFileDialog()
saveToFile(True,fileName)
elif options.window:
if options.delay:
countdownWindow(options.delay)
openFileDialog(False)
saveToFile(False,fileName)
else:
openFileDialog(False)
saveToFile(False,fileName)
elif options.fullscreen and options.window or options.delay:
countdownWindow(options.delay)
MainScrot()
MainScrot(fileName,saveFileType)
else:
MainScrot()
MainScrot(fileName,saveFileType)



Expand Down
32 changes: 27 additions & 5 deletions src/mainscrot.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,12 @@
class MainScrot:
'''Main scrot.'''

def __init__(self):
def __init__(self,saveFileName=None, saveFiletype="png"):
'''Init Main scrot.'''

# The file that saves the path of last saved file
self.dataFileName = os.path.expanduser("~/.deepin-scrot.tmp")

# Init.
self.action = ACTION_WINDOW
self.width = self.height = 0
Expand All @@ -68,7 +71,8 @@ def __init__(self):
self.showColorbarFlag = False
self.showTextWindowFlag = False
self.textDragOffsetX = self.textDragOffsetY = 0
self.saveFiletype = 'png'
self.saveFileName = saveFileName
self.saveFiletype = saveFiletype

self.toolbarOffsetX = 10
self.toolbarOffsetY = 10
Expand Down Expand Up @@ -436,7 +440,7 @@ def initToolbar(self):
self.actionCancelButton.connect("button-press-event", lambda w, e: self.destroy(self.window))

self.actionFinishButton = self.createOtherButton("finish",__("Tip finish"))
self.actionFinishButton.connect("button-press-event", lambda w, e: self.saveSnapshot())
self.actionFinishButton.connect("button-press-event", lambda w, e: self.saveSnapshot(self.saveFileName,self.saveFiletype))


def setOtherInactive(self, button):
Expand Down Expand Up @@ -991,7 +995,7 @@ def doubleClickRect(self, widget, event):
self.textModifyFlag = True

if isDoubleClick(event) and self.action == ACTION_SELECT and self.x < ex < self.x + self.rectWidth and self.y < ey < self.y + self.rectHeight:
self.saveSnapshot()
self.saveSnapshot(self.saveFileName,self.saveFiletype)
self.buttonRelease(widget, event)


Expand Down Expand Up @@ -1023,7 +1027,7 @@ def saveSnapshotToFile(self):
dialog.set_default_response(gtk.RESPONSE_ACCEPT)
dialog.set_position(gtk.WIN_POS_MOUSE)
dialog.set_local_only(True)
dialog.set_current_folder(os.environ['HOME'])
dialog.set_current_folder(self.getDefaultTargetPath())
dialog.set_current_name("%s%s.%s" % (DEFAULT_FILENAME, getFormatTime(), self.saveFiletype))

optionMenu = gtk.OptionMenu()
Expand Down Expand Up @@ -1063,6 +1067,7 @@ def saveSnapshotToFile(self):
if response == gtk.RESPONSE_ACCEPT:
filename = dialog.get_filename()
self.saveSnapshot(filename, self.saveFiletype)
self.setDefaultTargetPath(os.path.dirname(filename))
print "Save snapshot to %s" % (filename)
elif response == gtk.RESPONSE_REJECT:
self.adjustToolbar()
Expand All @@ -1073,6 +1078,23 @@ def saveSnapshotToFile(self):
print 'Closed, no files selected'
dialog.destroy()

def setDefaultTargetPath(self,path):
with open(self.dataFileName,"w") as fd:
fd.write(path)

def getDefaultTargetPath(self,):
try:
with open(self.dataFileName) as fd:
defaultPath = fd.readline()
except IOError:
return os.environ['HOME']
if os.path.isdir(defaultPath):
return defaultPath
else:
return os.environ['HOME']




def setSaveFiletype(self, dialog, filetype):
''' save filetype '''
Expand Down