Tomb/extras/qt/tombqt/open.py
Jaromil 3eb93acc18 Directory reorganization
This commit re-organizes all the source distribution contents to
present users with the simple script, while moving the rest in extras.
Also autoconf/automake scripts were removed, back to minimalism.

The rationale of this change is that Tomb really only consists of a
script and users with no extra needs should just be presented with
it with no need for anything else. Any other thing on top of the Tomb
script is an extra and can be even distributed separately or integrated
in distributions.
2013-05-18 17:29:37 +02:00

110 lines
3.8 KiB
Python

import sys
from PyQt4 import QtCore, QtGui
from ui_open_tombfile import Ui_tombfile
from ui_open_keymethod import Ui_keymethod
from ui_open_success import Ui_success
from tomblib.tomb import Tomb
from tomblib.undertaker import Undertaker
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class TombfilePage(QtGui.QWizardPage):
def __init__(self, *args, **kwargs):
QtGui.QWizardPage.__init__(self, *args)
self.ui = Ui_tombfile()
self.ui.setupUi(self)
if 'tombfile' in kwargs and kwargs['tombfile'] is not None:
self.ui.tomb_line.setText(kwargs['tombfile'])
self.ui.tomb_browse.clicked.connect(self.on_tomb_location_clicked)
def on_tomb_location_clicked(self, *args, **kwargs):
filename = QtGui.QFileDialog.getOpenFileName(self, 'Select Tomb',
filter="Tomb (*.tomb)")
self.ui.tomb_line.setText(filename)
class MethodPage(QtGui.QWizardPage):
def __init__(self, *args, **kwargs):
QtGui.QWizardPage.__init__(self, *args, **kwargs)
self.ui = Ui_keymethod()
self.ui.setupUi(self)
self.group = group = QtGui.QButtonGroup()
for radio in self.children():
if type(radio) == QtGui.QRadioButton:
group.addButton(radio)
def initializePage(self):
self.found = Undertaker.check( str('near://' + self.wizard().get_tombfile()) ) or []
box = self.ui.radio_layout
for key in self.found:
radio = QtGui.QRadioButton('Automatically found: ' + key, parent=self)
radio.setChecked(True)
radio.setProperty('path', key)
box.insertWidget(0, radio)
self.group.addButton(radio)
def nextId(self):
'''Virtual method reimplemented to decide next page'''
if self.ui.fs.isChecked():
keyfile = QtGui.QFileDialog.getOpenFileName(self.wizard(), 'Key file',
filter="Tomb keys (*.tomb.key);;Buried keys (*.jpeg)")
if keyfile:
#TODO: check if this really is a success :)
if Tomb.open(self.wizard().get_tombfile(), keyfile): #bugs when wrong password
return TombOpenWizard.SUCCESS_PAGE
#else: #TODO: should alert the user that we failed
return TombOpenWizard.METHOD_PAGE
if self.ui.usb.isChecked():
return TombOpenWizard.USB_PAGE
print self.group.checkedButton().property('path').toPyObject()
return TombOpenWizard.SUCCESS_PAGE
class SuccessPage(QtGui.QWizardPage):
def __init__(self, *args, **kwargs):
QtGui.QWizardPage.__init__(self, *args, **kwargs)
self.ui = Ui_success()
self.ui.setupUi(self)
class TombOpenWizard(QtGui.QWizard):
TOMBFILE_PAGE=1
METHOD_PAGE=2
SUCCESS_PAGE=99
USB_PAGE=20
def __init__(self, *args, **kwargs):
QtGui.QWizard.__init__(self, *args)
self.setPage(TombOpenWizard.TOMBFILE_PAGE,
TombfilePage(self, tombfile = kwargs['tombfile']
if 'tombfile' in kwargs else None))
self.setPage(TombOpenWizard.METHOD_PAGE, MethodPage(self))
self.setPage(TombOpenWizard.SUCCESS_PAGE, SuccessPage(self))
if 'tombfile' in kwargs and kwargs['tombfile'] is not None:
self.setStartId(TombOpenWizard.METHOD_PAGE)
def get_tombfile(self):
page = self.page(TombOpenWizard.TOMBFILE_PAGE)
return page.ui.tomb_line.text()
def run_open_wizard():
app = QtGui.QApplication(sys.argv)
window = TombOpenWizard(tombfile=sys.argv[1] if len(sys.argv) > 1 else None)
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
Undertaker.undertakerexec = '/home/davide/coding/projects/tomb/src/undertaker'
run_open_wizard()