mirror of
https://github.com/Llewellynvdm/Tomb.git
synced 2024-11-29 08:14:08 +00:00
3eb93acc18
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.
135 lines
5.2 KiB
Python
Executable File
135 lines
5.2 KiB
Python
Executable File
import sys, os
|
|
|
|
from PyQt4.QtGui import QApplication, QWizard
|
|
from PyQt4 import QtCore
|
|
from PyQt4 import QtGui
|
|
from ui_create import Ui_Wizard
|
|
|
|
if __name__ == '__main__':
|
|
parentdir = sys.path[0].split(os.sep)[:-1]
|
|
sys.path.append(os.sep.join(parentdir))
|
|
from tomblib.tomb import Tomb
|
|
from worker import TombCreateThread
|
|
|
|
try:
|
|
_fromUtf8 = QtCore.QString.fromUtf8
|
|
except AttributeError:
|
|
_fromUtf8 = lambda s: s
|
|
|
|
class TombCreateWizard(QWizard):
|
|
def __init__(self, *args, **kwargs):
|
|
QWizard.__init__(self, *args, **kwargs)
|
|
self.ui = ui = Ui_Wizard()
|
|
ui.setupUi(self)
|
|
#instance attributes:
|
|
self.ignore_swap = False
|
|
self._tomb_check = False #ugly; it's used by check_progress_complete
|
|
|
|
ui.wizardPage_tomb_location.registerField('tombpath*',
|
|
ui.lineEdit_tombpath) #required field, note the *
|
|
ui.wizardPage_key_location.setCommitPage(True)
|
|
|
|
QtCore.QObject.connect(ui.button_tombpath,
|
|
QtCore.SIGNAL(_fromUtf8('clicked()')),
|
|
self.on_tomb_location_clicked)
|
|
QtCore.QObject.connect(self,
|
|
QtCore.SIGNAL(_fromUtf8('currentIdChanged(int)')),
|
|
self.on_change_page)
|
|
QtCore.QObject.connect(ui.radioButton_swapoff,
|
|
QtCore.SIGNAL(_fromUtf8('toggled(bool)')),
|
|
ui.wizardPage_check.completeChanged)
|
|
QtCore.QObject.connect(ui.radioButton_ignore,
|
|
QtCore.SIGNAL(_fromUtf8('toggled(bool)')),
|
|
ui.wizardPage_check.completeChanged)
|
|
def check_progress_complete(*args, **kwargs):
|
|
if self.ui.progressBar.value() == 100:
|
|
return True
|
|
return False
|
|
def check_is_solved():
|
|
if self._tomb_check:
|
|
return True
|
|
if self.ui.radioButton_swapoff.isChecked() or \
|
|
self.ui.radioButton_ignore.isChecked():
|
|
return True
|
|
return False
|
|
self.ui.wizardPage_progress.isComplete = check_progress_complete
|
|
self.ui.wizardPage_check.isComplete = check_is_solved
|
|
self.ui.groupBox_swap.setVisible(False)
|
|
self.finished.connect(self.on_finish)
|
|
|
|
def _keyloc(self):
|
|
keyloc = None
|
|
if self.ui.radioButton_usb.isChecked():
|
|
print 'Warning: it is not supported'
|
|
raise NotImplementedError
|
|
elif self.ui.radioButton_near.isChecked():
|
|
print 'going near'
|
|
keyloc = None
|
|
else:
|
|
keyloc = self.ui.lineEdit_custom.text()
|
|
if not keyloc:
|
|
raise ValueError
|
|
return keyloc
|
|
|
|
def on_tomb_location_clicked(self, *args, **kwargs):
|
|
filename = QtGui.QFileDialog.getSaveFileName(self, 'Create Tomb',
|
|
filter="Tomb(*.tomb)")
|
|
self.ui.lineEdit_tombpath.setText(filename)
|
|
def on_change_page(self, pagenumber):
|
|
if self.currentPage() == self.ui.wizardPage_progress:
|
|
self.create_tomb()
|
|
if self.currentPage() == self.ui.wizardPage_check:
|
|
self.check_requisite()
|
|
|
|
def on_finish(self, finishedint):
|
|
if self.currentPage() != self.ui.wizardPage_end:
|
|
#there has been an error
|
|
return
|
|
|
|
if self.ui.checkBox_open.isChecked():
|
|
Tomb.open(self.ui.lineEdit_tombpath.text(), self._keyloc())
|
|
def on_thread_creation_finished(self):
|
|
if self.thread.get_success():
|
|
self.ui.progressBar.setValue(100)
|
|
else:
|
|
self.ui.progressBar.setEnabled(False)
|
|
self.ui.label_progress.setText('Error while creating the tomb!')
|
|
self.ui.wizardPage_progress.setFinalPage(True)
|
|
self.ui.wizardPage_progress.completeChanged.emit()
|
|
def create_tomb(self):
|
|
self.thread = TombCreateThread(self.ui.lineEdit_tombpath.text(),
|
|
str(self.ui.spinBox_size.value()), self._keyloc(),
|
|
no_color=False, ignore_swap=self.ui.radioButton_ignore.isChecked())
|
|
self.thread.finished.connect(self.on_thread_creation_finished)
|
|
self.thread.terminated.connect(self.on_thread_creation_finished)
|
|
self.thread.line_received.connect(self.ui.textBrowser_log.append)
|
|
def err_append_to_log(text):
|
|
self.ui.textBrowser_log.append('Error: <strong>' + text +
|
|
'</strong>')
|
|
self.thread.error_received.connect(err_append_to_log)
|
|
self.thread.start()
|
|
def check_requisite(self):
|
|
self._tomb_check = check = Tomb.check('create', no_color=False)
|
|
self.ui.wizardPage_check.completeChanged.emit()
|
|
if check:
|
|
self.ui.label_check.setText('Everything seems fine!')
|
|
return
|
|
self.ui.label_check.setText('Some error occurred')
|
|
if Tomb.check('create', no_color=False, ignore_swap=True): # swap is the only error
|
|
self.ui.groupBox_swap.setVisible(True)
|
|
#TODO: support swapoff
|
|
#TODO: calculate the amount of ram available vs swap used
|
|
self.ui.radioButton_swapoff.setEnabled(False)
|
|
self.ui.label_swapoff.setEnabled(False)
|
|
|
|
|
|
def run_create_wizard():
|
|
app = QApplication(sys.argv)
|
|
window = TombCreateWizard()
|
|
window.show()
|
|
sys.exit(app.exec_())
|
|
|
|
if __name__ == '__main__':
|
|
run_create_wizard()
|
|
|