1
Files
isida-4/dev-tools/locale_generator/locale_generator_with_gui.pyw
2014-05-01 14:07:44 +04:00

256 lines
11 KiB
Python

#!/usr/bin/python
about_txt = '''
# --------------------------------------------------------------------------- #
# #
# GUI for Locale Generator #
# Copyright (C) Vit@liy <vitaliy@root.ua> #
# #
# This program 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 3 of the License, or #
# (at your option) any later version. #
# #
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>. #
# #
# --------------------------------------------------------------------------- #
'''
import sys
import os
import locale_generator
from PyQt4 import QtGui, QtCore, Qt
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setWindowIcon(Qt.QIcon("icons/isida.png"))
if self.regenerate():
self.resize(400, 150)
self.setWindowTitle('GUI for Locale Generator')
self.window = Qt.QWidget()
self.layout_main = Qt.QGridLayout()
self.layout_main.setContentsMargins(3, 3, 3, 3)
self.layout_main.setSpacing(3)
self.window.setLayout(self.layout_main)
self.textLabelEN = QtGui.QLabel('<center><b>EN<\b><\center>')
self.textEditEN = Qt.QTextEdit()
self.textEditEN.setReadOnly(1)
self.textEditEN.setPlainText(self.loc_dict.values()[0][self.nontrans[0]].split('\t')[0].replace('\\n', '\n').replace('\\t', '\t'))
self.layout_main.addWidget(self.textLabelEN, 0, 0)
self.layout_main.addWidget(self.textEditEN, 0, 1)
self.textLabel = {}
self.textEdit = {}
for n, k in enumerate(self.loc_dict.keys()):
self.textLabel[k] = QtGui.QLabel('<center><b>%s<\b><\center>' % k.upper())
self.textEdit[k] = Qt.QTextEdit()
self.textEdit[k].setPlainText(self.loc_dict[k][self.nontrans[0]].split('\t')[1].replace('\\n', '\n').replace('\\t', '\t'))
self.layout_main.addWidget(self.textLabel[k], n + 1, 0)
self.layout_main.addWidget(self.textEdit[k], n + 1, 1)
self.setCentralWidget(self.window)
exit_act = QtGui.QAction(QtGui.QIcon('icons/exit.png'), 'Exit', self)
exit_act.setShortcut('Ctrl+Q')
exit_act.setStatusTip('Exit application')
self.connect(exit_act, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))
info_act = QtGui.QAction(QtGui.QIcon('icons/dialog-information.png'), 'Info', self)
info_act.setShortcut('Ctrl+I')
info_act.setStatusTip('Informations about locales')
self.connect(info_act, QtCore.SIGNAL('triggered()'), self.show_locales_info)
prev_act = QtGui.QAction(QtGui.QIcon('icons/go-previous.png'), 'Previous', self)
prev_act.setShortcut('Ctrl+P')
prev_act.setStatusTip('Previous non-translate')
self.connect(prev_act, QtCore.SIGNAL('triggered()'), self.prev_notrans)
save_act = QtGui.QAction(QtGui.QIcon('icons/document-save.png'), 'Save', self)
save_act.setShortcut('Ctrl+S')
save_act.setStatusTip('Save locales')
self.connect(save_act, QtCore.SIGNAL('triggered()'), self.save_locales)
save_l = {}
for k in self.loc_dict.keys():
save_l[k] = QtGui.QAction(QtGui.QIcon('icons/document-save.png'), 'Save %s' % k.upper(), self)
save_l[k].setStatusTip('Save locale: %s' % k.upper())
self.connect(save_l[k], QtCore.SIGNAL('triggered()'), lambda: self.save_locales(k))
next_act = QtGui.QAction(QtGui.QIcon('icons/go-next.png'), 'Next', self)
next_act.setShortcut('Ctrl+N')
next_act.setStatusTip('Next non-translate')
self.connect(next_act, QtCore.SIGNAL('triggered()'), self.next_notrans)
about_act = QtGui.QAction(QtGui.QIcon('icons/help-browser.png'), 'About...', self)
about_act.setStatusTip('About...')
self.connect(about_act, QtCore.SIGNAL('triggered()'), self.about_info)
self.connect(self, Qt.SIGNAL('triggered()'), self.closeEvent)
self.statusBar()
menubar = self.menuBar()
menu_f = menubar.addMenu('&Menu')
menu_f.addAction(save_act)
for k in self.loc_dict.keys():
menu_f.addAction(save_l[k])
menu_f.addAction(info_act)
menu_f.addAction(exit_act)
menu_e = menubar.addMenu('&Edit')
menu_e.addAction(prev_act)
menu_e.addAction(next_act)
menu_i = menubar.addMenu('&Info')
menu_i.addAction(about_act)
toolbar_f = self.addToolBar('File')
toolbar_f.addAction(exit_act)
toolbar_f.addAction(save_act)
toolbar_f.addAction(info_act)
toolbar_e = self.addToolBar('Edit')
toolbar_e.addAction(prev_act)
toolbar_e.addAction(next_act)
else:
self.save_locales(None,None)
self.setWindowTitle('Info')
self.window = Qt.QWidget()
self.layout_main = Qt.QVBoxLayout()
self.layout_main.setContentsMargins(3, 3, 3, 3)
self.layout_main.setSpacing(3)
self.window.setLayout(self.layout_main)
lbl = QtGui.QLabel('<center>Regenerated without mistakes!<\center>')
self.layout_main.addWidget(lbl)
quit_act = QtGui.QPushButton('Quit')
self.layout_main.addWidget(quit_act)
self.connect(quit_act, QtCore.SIGNAL('clicked()'), QtGui.qApp, QtCore.SLOT('quit()'))
self.setCentralWidget(self.window)
def regenerate(self):
path_to_locale = locale_generator.path_to_locale
lf = os.listdir(path_to_locale)
self.loc_dict = {}
self.label_inf = ''
for tmp in lf:
if tmp[-4:] == '.txt':
msg, result, lz = locale_generator.regenerate(path_to_locale,tmp)
self.label_inf += '%s\n' % msg.replace('write', 'Found')
self.loc_dict[tmp[:-4]] = result.split('\n')
self.label_inf += 'Total found definitions: %s\n' % lz
self.nontrans = []
#self.show_locales_info()
for k in self.loc_dict.keys():
self.nontrans += [i[0] for i in enumerate(self.loc_dict[k]) if locale_generator.locale_mark in i[1] and i[1][0] != '#']
self.nontrans = list(set(self.nontrans))
self.nontrans.sort()
self.curs = 0
self.count = len(self.nontrans)
self.save = True
if not self.count:
return False
else:
return True
def closeEvent(self, event):
if self.count:
tmp_en = self.textEditEN.toPlainText().replace('\n', '\\n').replace('\t', '\\t')
for k in self.loc_dict.keys():
if self.loc_dict[k][self.nontrans[self.curs]] != '%s\t%s' % (tmp_en, self.textEdit[k].toPlainText().replace('\n', '\\n').replace('\t', '\\t')):
self.save = False
if not self.save:
reply = QtGui.QMessageBox.question(self, 'Quit', "Are you sure to quit without saving?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.No:
event.ignore()
return
event.accept()
def show_locales_info(self):
self.show_info(self.label_inf)
def show_info(self, txt):
QtGui.QMessageBox.information(self, 'Info', txt, QtGui.QMessageBox.Ok)
def next_notrans(self):
tmp_en = self.textEditEN.toPlainText().replace('\n', '\\n').replace('\t', '\\t')
for k in self.loc_dict.keys():
tmp_k = '%s\t%s' % (tmp_en, self.textEdit[k].toPlainText().replace('\n', '\\n').replace('\t', '\\t'))
if self.loc_dict[k][self.nontrans[self.curs]] != tmp_k:
self.save = False
self.loc_dict[k][self.nontrans[self.curs]] = tmp_k
self.curs = (self.curs + 1) % self.count
self.textEditEN.setText(self.loc_dict.values()[0][self.nontrans[self.curs]].split('\t')[0].replace('\\n', '\n').replace('\\t', '\t'))
for k in self.loc_dict.keys():
self.textEdit[k].setText(self.loc_dict[k][self.nontrans[self.curs]].split('\t')[1].replace('\\n', '\n').replace('\\t', '\t'))
def prev_notrans(self):
tmp_en = self.textEditEN.toPlainText().replace('\n', '\\n').replace('\t', '\\t')
for k in self.loc_dict.keys():
tmp_k = '%s\t%s' % (tmp_en, self.textEdit[k].toPlainText().replace('\n', '\\n').replace('\t', '\\t'))
if self.loc_dict[k][self.nontrans[self.curs]] != tmp_k:
self.save = False
self.loc_dict[k][self.nontrans[self.curs]] = tmp_k
self.curs = (self.curs - 1) % self.count
self.textEditEN.setText(self.loc_dict.values()[0][self.nontrans[self.curs]].split('\t')[0].replace('\\n', '\n').replace('\\t', '\t'))
for k in self.loc_dict.keys():
self.textEdit[k].setText(self.loc_dict[k][self.nontrans[self.curs]].split('\t')[1].replace('\\n', '\n').replace('\\t', '\t'))
def save_locales(self, locale_for_saving=None, main_interface=True):
if main_interface: tmp_en = self.textEditEN.toPlainText().replace('\n', '\\n').replace('\t', '\\t')
if not locale_for_saving:
ls = self.loc_dict.keys()
else:
ls = [locale_for_saving]
for k in ls:
if main_interface: self.loc_dict[k][self.nontrans[self.curs]] = '%s\t%s' % (tmp_en, self.textEdit[k].toPlainText().replace('\n', '\\n').replace('\t', '\\t'))
result = '\n'.join(self.loc_dict[k])
if not result.endswith('\n\n'): result = '%s\n' % result
locale_generator.writefile('%s.txt' % k,result.encode('utf-8'))
tmp_body = []
for t in result.split('\n\n',1)[1].split('\n'):
if locale_generator.locale_mark not in t: tmp_body.append(t)
tmp2_body,cnt = [],0
for t in range(0,len(tmp_body)-2):
if tmp_body[cnt].startswith(locale_generator.file_mark) and tmp_body[cnt+2].startswith(locale_generator.file_mark): cnt += 2
tmp2_body.append(tmp_body[cnt])
cnt += 1
original_file = '%s\n\n%s' % (locale_generator.readfile('%s/%s.txt' % (locale_generator.path_to_locale,k)).decode('UTF').replace('\r','').split('\n\n',1)[0],'\n'.join(tmp2_body))
if not original_file.endswith('\n\n'): original_file = '%s\n' % original_file
locale_generator.writefile('%s/%s.txt' % (locale_generator.path_to_locale,k),original_file.encode('utf-8'))
if main_interface:
if not self.regenerate():
self.show_info('Regenerated without mistakes!')
self.close()
else:
for n, k in enumerate(self.loc_dict.keys()):
self.textEditEN.setPlainText(self.loc_dict.values()[0][self.nontrans[0]].split('\t')[0].replace('\\n', '\n').replace('\\t', '\t'))
self.textEdit[k].setPlainText(self.loc_dict[k][self.nontrans[0]].split('\t')[1].replace('\\n', '\n').replace('\\t', '\t'))
self.show_info('Done!')
def about_info(self):
self.show_info(about_txt.replace('#', '').replace('-', ''))
if __name__ == "__main__" :
app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())