4.0 Beta (Build 20245)

This commit is contained in:
2020-09-01 19:15:30 +02:00
Unverified
parent 9316073148
commit 066e1f6a17
7 changed files with 235 additions and 63 deletions

View File

@@ -6,3 +6,7 @@ quota(I) = 500
country(S) = Rzeczypospolita Polska country(S) = Rzeczypospolita Polska
schoolData(MSAs) = [LO, 4, 0]|[BS, 3, 1] schoolData(MSAs) = [LO, 4, 0]|[BS, 3, 1]
schoolyearStart(D) = 01.09.* *:*:* schoolyearStart(D) = 01.09.* *:*:*
ifHeadlineInMail(B) = 0
headlineInMail(S) = beta
ifHeadlineInOffice(B) = 0
headlineInOffice(S) = beta

View File

@@ -103,6 +103,9 @@ EPOSLabelAnchor(FAanchor) = center
radiobutton1Background(C) = #21242D radiobutton1Background(C) = #21242D
radiobutton1TextColor(C) = #C0C0C0 radiobutton1TextColor(C) = #C0C0C0
radiobutton1IndicatorBackground(C) = #21242D radiobutton1IndicatorBackground(C) = #21242D
checkbutton1Background(C) = #21242D
checkbutton1TextColor(C) = #C0C0C0
checkbutton1IndicatorBackground(C) = #21242D
text1Background(C) = #333842 text1Background(C) = #333842
text1TextColor(C) = #C0C0C0 text1TextColor(C) = #C0C0C0
text1Relief(FArelief) = flat text1Relief(FArelief) = flat
@@ -118,6 +121,8 @@ settingsCodeLabelWidth(I) = 35
settingsCodeLabelAnchor(FAanchor) = w settingsCodeLabelAnchor(FAanchor) = w
settingsOtherLabelWidth(I) = 35 settingsOtherLabelWidth(I) = 35
settingsOtherLabelAnchor(FAanchor) = w settingsOtherLabelAnchor(FAanchor) = w
settingsHeadlineLabelWidth(I) = 35
settingsHeadlineLabelAnchor(FAanchor) = w
settingsSchoolDataLabelAnchor(FAanchor) = center settingsSchoolDataLabelAnchor(FAanchor) = center
settingsButtonsPadY(I) = 6 settingsButtonsPadY(I) = 6
settingsButtonSaveWidth(I) = 20 settingsButtonSaveWidth(I) = 20

View File

@@ -128,4 +128,15 @@
- Wyeliminowanie błędu wyrzucającego wyjątek po naciśnięciu przycisku START bez wprowadzenia danych powyżej - Wyeliminowanie błędu wyrzucającego wyjątek po naciśnięciu przycisku START bez wprowadzenia danych powyżej
- Poprawki w pliku wyjściowym office (usunięcie dwóch przecinków pomiedzy stanowiskiem a klasą) - Poprawki w pliku wyjściowym office (usunięcie dwóch przecinków pomiedzy stanowiskiem a klasą)
- Wyeliminowanie błędu pokazującego w komunikacie o błędnych danych, przy zapisie format presetu, wpisanej wartości zamiast recordu - Wyeliminowanie błędu pokazującego w komunikacie o błędnych danych, przy zapisie format presetu, wpisanej wartości zamiast recordu
- Wyeliminowanie błędu pozwalającego na zapisanie wprowadzonego w spinboxie tekstu - Wyeliminowanie błędu pozwalającego na zapisanie wprowadzonego w spinboxie tekstu.
4.0 Beta (Build 20245)
- Wyeliminowanie błędu uniemożliwającego pierwsze uruchomienie programu
- Wyeliminowanie błędu pozwalającego na wybranie tej samej lokalizacji dla pliku wyjściowego poczty i office
- Skrócenie sekcji strony "O programie"
- Dodanie mechanizmu usuwania katalogu programu w appdata po aktualizacji programu
- Wyeliminowanie błędu uniemożliwiającego zapisanie ustawień
- Dodanie możliwości dodawania nagłówków do plików wyjściowych
- Wsparcie dla kodowania ISO-8859-2
- Wyeliminowanie błędu wyrzucającego wyjątek w przypadku próby zapisania format presetu o nazwie zawierającej zakazane znaki.
- Dodanie mechanizmu pozwalającego na automatyczne resetowanie katalogu programu w appdata podczas uruchamiania programu

View File

@@ -27,42 +27,5 @@
<br> <br>
<b>dla ZSP Sobolew</b><br> <b>dla ZSP Sobolew</b><br>
</p> </p>
<br>
<br>
<br>
<hr>
<br>
<br>
<p>
<b>Inne informacje:</b><br>
<br><br>
Język programowania, użyty w programie: <b>Python</b><br>
<br>
Biblioteki:
</p>
<b>
<ul>
<li>sys</li>
<li>os</li>
<li>time</li>
<li>codecs</li>
<li>pathlib</li>
<li>shutil</li>
</ul>
</b>
<p>
<br>
Biblioteki GUI:
</p>
<b>
<ul>
<li>tkinter</li>
<li>pillow</li>
</ul>
</b>
<p>
<br>
Języki, użyte do stworzenia strony z instrukcją i dokumentacją techniczną: <b>HTML</b>, <b>CSS</b>, <b>JavaScript</b>
</p>
</body> </body>
</html> </html>

View File

@@ -79,6 +79,10 @@
<p>W tym polu należy wpisać ilość miejsca (w megabajtach) przeznaczoną dla każdego użytkownika na przechowywanie maili. Te dane są używane w pliku wyjściowym poczty. Przykład: jan.kowalski2023a@losobolew.pl,1234567u:JK,<b>500</b></p> <p>W tym polu należy wpisać ilość miejsca (w megabajtach) przeznaczoną dla każdego użytkownika na przechowywanie maili. Te dane są używane w pliku wyjściowym poczty. Przykład: jan.kowalski2023a@losobolew.pl,1234567u:JK,<b>500</b></p>
<h5>Kraj (zapisany w danych na office)</h5> <h5>Kraj (zapisany w danych na office)</h5>
<p>W tym polu należy wpisać nazwę kraju zamieszkania użytkowników. Będzie ona wykorzystywana w pliku wyjściowym office oraz widoczna w profilu użytkownika w serwisie office. Przykład: jan.kowalski2023a@losobolew.pl,Jan,Kowalski,Jan Kowalski,uczeń,1b LO,,,,,,,,,<b>Rzeczpospolita Polska</b></p> <p>W tym polu należy wpisać nazwę kraju zamieszkania użytkowników. Będzie ona wykorzystywana w pliku wyjściowym office oraz widoczna w profilu użytkownika w serwisie office. Przykład: jan.kowalski2023a@losobolew.pl,Jan,Kowalski,Jan Kowalski,uczeń,1b LO,,,,,,,,,<b>Rzeczpospolita Polska</b></p>
<h5>Nagłówek dla pliku wyjściowego poczty</h5>
<p>Jeżeli chcesz aby w pierwszej linii pliku wyjściowego dla poczty znajdował się nagłowek, zaznacz opcję "Umieść w pliku". Zawartość nagłówka można edytować w polu tekstowym po lewej.</p>
<h5>Nagłówek dla pliku wyjściowego office</h5>
<p>Jeżeli chcesz aby w pierwszej linii pliku wyjściowego dla office znajdował się nagłowek, zaznacz opcję "Umieść w pliku". Zawartość nagłówka można edytować w polu tekstowym po lewej.</p>
<h5>Rozpoczęcie roku szkolnego (DD | MM)</h5> <h5>Rozpoczęcie roku szkolnego (DD | MM)</h5>
<p>W tych polach należy wpisać datę rozpoczęcia roku szkolnego (z reguły). W pierwszym polu (po lewo) należy wpisać dzień, a w drugim (po prawo) miesiąc. Te dane są używane do obliczania roku w znaczniku klasy (przykłądowy znacznik klasy: 2023a).</p> <p>W tych polach należy wpisać datę rozpoczęcia roku szkolnego (z reguły). W pierwszym polu (po lewo) należy wpisać dzień, a w drugim (po prawo) miesiąc. Te dane są używane do obliczania roku w znaczniku klasy (przykłądowy znacznik klasy: 2023a).</p>
<h5>Dane o szkołach</h5> <h5>Dane o szkołach</h5>

View File

@@ -7,6 +7,6 @@
<title>Generator CSV</title> <title>Generator CSV</title>
</head> </head>
<body> <body>
<p>nic</p> <p>reset_appdata</p>
</body> </body>
</html> </html>

View File

@@ -16,14 +16,14 @@ class VAR:
# Informacje o programie # Informacje o programie
programName = 'Generator CSV' programName = 'Generator CSV'
programVersion = '4.0' programVersion = '4.0'
programVersionStage = '' programVersionStage = 'Beta'
programVersionBuild = '20242' programVersionBuild = '20245'
programCustomer = 'ZSP Sobolew' programCustomer = 'ZSP Sobolew'
programAuthors = ['Mateusz Skoczek'] programAuthors = ['Mateusz Skoczek']
programToW = ['styczeń', '2019', 'wrzesień', '2020'] programToW = ['styczeń', '2019', 'wrzesień', '2020']
# Dozwolone kodowanie plików # Dozwolone kodowanie plików
allowedCoding = ['utf-8', 'ANSI'] allowedCoding = ['utf-8', 'ANSI', 'iso-8859-2']
# Dozwolone znaki # Dozwolone znaki
allowedCharactersInSeparator = ['`', '~', '!', '@', '#', '$', '%', '^', '&', '(', ')', '-', '_', '=', '+', '[', ']', ' ', '?', '/', '>', '.', '<', ',', '"', "'", ':', ';', '|'] allowedCharactersInSeparator = ['`', '~', '!', '@', '#', '$', '%', '^', '&', '(', ')', '-', '_', '=', '+', '[', ']', ' ', '?', '/', '>', '.', '<', ',', '"', "'", ':', ';', '|']
@@ -87,6 +87,7 @@ MSGlist = {
'I0002' : 'Aplikacja zostanie zamknięta w celu przeładowania ustawień', 'I0002' : 'Aplikacja zostanie zamknięta w celu przeładowania ustawień',
'E0015' : 'Nie można usunąć wybranych format presetów', 'E0015' : 'Nie można usunąć wybranych format presetów',
'E0016' : 'Nie można uruchomić pliku instrukcji (documentation/index.html)', 'E0016' : 'Nie można uruchomić pliku instrukcji (documentation/index.html)',
'E0017' : 'Nie można zapisać pliku formatu',
} }
def MSG(code, terminate, *optionalInfo): def MSG(code, terminate, *optionalInfo):
@@ -124,37 +125,76 @@ def MSG(code, terminate, *optionalInfo):
# ----------------------------------- # Opcje deweloperskie # ----------------------------------- #
dev_config = []
if 'dev.cfg' in [x for x in OS.listdir('.\configs')]:
try:
dev_config = CD.open(r'.\configs\dev.cfg', 'r', 'utf-8').read().split('\n')
except Exception as exceptInfo:
print('DEVELOPER CONSOLE LOG: Nie można załadować listy aktywnych opcji developerskich')
else:
print('DEVELOPER CONSOLE LOG: Pomyślnie załadowano listę aktywnych opcji developerskich')
print('DEVELOPER CONSOLE LOG: Lista aktywnych opcji developerskich: %s' % str(dev_config))
# ------------------------- # Sprawdzanie katalogu programu w APPDATA # ------------------------- # # ------------------------- # Sprawdzanie katalogu programu w APPDATA # ------------------------- #
appdata = PT.Path.home() / 'Appdata/Roaming' appdata = PT.Path.home() / 'Appdata/Roaming'
#TODO if 'reset_appdata' in dev_config:
#SU.rmtree(str(appdata) + '/Generator CSV') try:
#TODO SU.rmtree(str(appdata) + '\Generator CSV')
OS.mkdir(str(appdata) + '\Generator CSV')
versionFile = CD.open((str(appdata) + r'\Generator CSV\version'), 'w', 'utf-8')
versionFile.write(VAR.programVersionBuild)
versionFile.close()
SU.copy('configs\config.cfg', str(appdata) + '\Generator CSV\config.cfg')
SU.copy('configs\style.cfg', str(appdata) + '\Generator CSV\style.cfg')
OS.mkdir(str(appdata) + r'\Generator CSV\format-presets')
except Exception as exceptInfo:
print("DEVELOPER CONSOLE LOG: Folder 'Generator CSV' w folderze 'APPDATA' nie został zresetowany z powodu błędu: %s" % exceptInfo)
else:
print("DEVELOPER CONSOLE LOG: Folder 'Generator CSV' w folderze 'APPDATA' został zresetowany pomyślnie")
def checkAppdata(): def checkAppdata():
if 'Generator CSV' not in [x for x in OS.listdir(appdata)]: if 'Generator CSV' not in [x for x in OS.listdir(appdata)]:
try: try:
OS.mkdir(str(appdata) + '/Generator CSV') OS.mkdir(str(appdata) + '\Generator CSV')
SU.copy('configs/config.cfg', str(appdata) + '\Generator CSV\config.cfg') versionFile = CD.open((str(appdata) + r'\Generator CSV\version'), 'w', 'utf-8')
SU.copy('configs/style.cfg', str(appdata) + '\Generator CSV\style.cfg') versionFile.write(VAR.programVersionBuild)
OS.mkdir(str(appdata) + '/Generator CSV/format-presets') versionFile.close()
SU.copy('configs\config.cfg', str(appdata) + '\Generator CSV\config.cfg')
SU.copy('configs\style.cfg', str(appdata) + '\Generator CSV\style.cfg')
OS.mkdir(str(appdata) + r'\Generator CSV\format-presets')
except Exception as exceptInfo: except Exception as exceptInfo:
MSG('E0001', True, exceptInfo) MSG('E0001', True, exceptInfo)
else: else:
if 'config.cfg' not in [x for x in OS.listdir(str(appdata) + '/Generator CSV')]: if 'version' not in [x for x in OS.listdir(str(appdata) + '\Generator CSV')]:
SU.rmtree(str(appdata) + '\Generator CSV')
checkAppdata()
else:
versionFile = CD.open((str(appdata) + r'\Generator CSV\version'), 'r', 'utf-8')
if versionFile.read() != VAR.programVersionBuild:
versionFile.close()
SU.rmtree(str(appdata) + '\Generator CSV')
checkAppdata()
if 'config.cfg' not in [x for x in OS.listdir(str(appdata) + '\Generator CSV')]:
try: try:
SU.copy('configs/config.cfg', str(appdata) + '\Generator CSV\config.cfg') SU.copy('configs\config.cfg', str(appdata) + '\Generator CSV\config.cfg')
except Exception as exceptInfo: except Exception as exceptInfo:
MSG('E0001', True, exceptInfo) MSG('E0001', True, exceptInfo)
if 'style.cfg' not in [x for x in OS.listdir(str(appdata) + '/Generator CSV')]: if 'style.cfg' not in [x for x in OS.listdir(str(appdata) + '\Generator CSV')]:
try: try:
SU.copy('configs/style.cfg', str(appdata) + '\Generator CSV\style.cfg') SU.copy('configs\style.cfg', str(appdata) + '\Generator CSV\style.cfg')
except Exception as exceptInfo: except Exception as exceptInfo:
MSG('E0001', True, exceptInfo) MSG('E0001', True, exceptInfo)
if 'format-presets'not in [x for x in OS.listdir(str(appdata) + '/Generator CSV')]: if 'format-presets' not in [x for x in OS.listdir(str(appdata) + '\Generator CSV')]:
try: try:
OS.mkdir(str(appdata) + '/Generator CSV/format-presets') OS.mkdir(str(appdata) + r'\Generator CSV\format-presets')
except Exception as exceptInfo: except Exception as exceptInfo:
MSG('E0001', True, exceptInfo) MSG('E0001', True, exceptInfo)
@@ -221,7 +261,7 @@ class CFG:
var['D'] = int(var['D']) var['D'] = int(var['D'])
except: except:
return (False, 'Niepoprawne dane - klucz: %s' % record) return (False, 'Niepoprawne dane - klucz: %s' % record)
if int(var['s']) > 31 or int(var['s']) < 1: if int(var['D']) > 31 or int(var['D']) < 1:
return (False, 'Niepoprawne dane - klucz: %s' % record) return (False, 'Niepoprawne dane - klucz: %s' % record)
day = str(var['D']) day = str(var['D'])
if len(day) == 1: if len(day) == 1:
@@ -235,7 +275,7 @@ class CFG:
var['M'] = int(var['M']) var['M'] = int(var['M'])
except: except:
return (False, 'Niepoprawne dane - klucz: %s' % record) return (False, 'Niepoprawne dane - klucz: %s' % record)
if int(var['s']) > 12 or int(var['s']) < 1: if int(var['M']) > 12 or int(var['M']) < 1:
return (False, 'Niepoprawne dane - klucz: %s' % record) return (False, 'Niepoprawne dane - klucz: %s' % record)
month = str(var['M']) month = str(var['M'])
if len(month) == 1: if len(month) == 1:
@@ -307,6 +347,7 @@ class CFG:
return (False, 'Niepoprawne dane - klucz: %s' % record) return (False, 'Niepoprawne dane - klucz: %s' % record)
index = 0 index = 0
for x in var: for x in var:
x = x.strip('\r')
if x != '*': if x != '*':
try: try:
x = int(x) x = int(x)
@@ -367,6 +408,26 @@ class CFG:
return [False, 'Niepoprawne dane - klucz: %s' % record] return [False, 'Niepoprawne dane - klucz: %s' % record]
return [True, var] return [True, var]
def __checkB(self, write, record, var):
if write:
if var:
var = '1'
else:
var = '0'
else:
try:
var = int(var)
except:
return [False, 'Niepoprawne dane - klucz: %s' % record]
if var != 0 and var != 1:
return [False, 'Niepoprawne dane - klucz: %s' % record]
else:
if var == 0:
var = False
else:
var = True
return [True, var]
def R(self, record): def R(self, record):
@@ -417,6 +478,13 @@ class CFG:
return checkingOutput[1] return checkingOutput[1]
else: else:
MSG('E0003', True, checkingOutput[1]) MSG('E0003', True, checkingOutput[1])
elif var[1] == 'B':
# Boolean
checkingOutput = self.__checkB(False, record, var[0])
if checkingOutput[0]:
return checkingOutput[1]
else:
MSG('E0003', True, checkingOutput[1])
else: else:
MSG('E0003', True, 'Nie można rozpoznać typu klucza %s' % record) MSG('E0003', True, 'Nie można rozpoznać typu klucza %s' % record)
@@ -474,6 +542,14 @@ class CFG:
else: else:
MSG('E0006', False, checkingOutput[1]) MSG('E0006', False, checkingOutput[1])
return False return False
elif type == 'B':
# Boolean
checkingOutput = self.__checkB(True, name, var)
if checkingOutput[0]:
var = checkingOutput[1]
else:
MSG('E0006', False, checkingOutput[1])
return False
else: else:
MSG('E0003', False, 'Nie można rozpoznać typu klucza %s' % name) MSG('E0003', False, 'Nie można rozpoznać typu klucza %s' % name)
return False return False
@@ -889,12 +965,16 @@ class FMT:
MSG('E0006', False, checkingOutput[1]) MSG('E0006', False, checkingOutput[1])
return False return False
else: else:
MSG('E0003', False, 'Nie można rozpoznać typu klucza %s' % name) MSG('E0006', False, 'Nie można rozpoznać typu klucza %s' % name)
return False return False
content[name] = [var, type] content[name] = [var, type]
with CD.open(str(appdata) + '/Generator CSV/format-presets/%s.fmt' % preset, 'w', 'utf-8') as file: try:
for x in content: with CD.open(str(appdata) + '/Generator CSV/format-presets/%s.fmt' % preset, 'w', 'utf-8') as file:
file.write('%s(%s) = %s\n' % (x, (content[x])[1], (content[x][0]))) for x in content:
file.write('%s(%s) = %s\n' % (x, (content[x])[1], (content[x][0])))
except Exception as exceptInfo:
MSG('E0017', False, exceptInfo)
return False
return True return True
@@ -936,6 +1016,8 @@ class dataProcess:
return True return True
def __checkIfCreatingOutputFilesIsPossible(self, files): def __checkIfCreatingOutputFilesIsPossible(self, files):
if files[0] == files[1]:
return False
try: try:
check = CD.open(files[0], 'w', CFG.R('mailOutputCoding')) check = CD.open(files[0], 'w', CFG.R('mailOutputCoding'))
check = CD.open(files[1], 'w', CFG.R('officeOutputCoding')) check = CD.open(files[1], 'w', CFG.R('officeOutputCoding'))
@@ -1103,8 +1185,12 @@ class dataProcess:
mailData = data[0] mailData = data[0]
officeData = data[1] officeData = data[1]
with CD.open(mailPath, 'w', CFG.R('mailOutputCoding')) as mail: with CD.open(mailPath, 'w', CFG.R('mailOutputCoding')) as mail:
if CFG.R('ifHeadlineInMail'):
mail.write(CFG.R('headlineInMail') + '\n')
mail.write('\n'.join(mailData)) mail.write('\n'.join(mailData))
with CD.open(officePath, 'w', CFG.R('officeOutputCoding')) as office: with CD.open(officePath, 'w', CFG.R('officeOutputCoding')) as office:
if CFG.R('ifHeadlineInOffice'):
office.write(CFG.R('headlineInOffice') + '\n')
office.write('\n'.join(officeData)) office.write('\n'.join(officeData))
@@ -2412,7 +2498,7 @@ class mainWindow:
############################### ###############################
# (4) Rozpoczęcir roku szkolnego # (4) Rozpoczęcie roku szkolnego
self.settingsOtherDRRSFrame = TKttk.Frame(self.settingsOtherFrame) self.settingsOtherDRRSFrame = TKttk.Frame(self.settingsOtherFrame)
self.settingsOtherDRRSFrame.config(style = 'layoutFrame.TFrame') self.settingsOtherDRRSFrame.config(style = 'layoutFrame.TFrame')
@@ -2450,6 +2536,97 @@ class mainWindow:
######################################### #########################################
# (3) Separator #########################
self.settingsSeparator4 = TKttk.Separator(self.settingsLeftFrame)
self.settingsSeparator4.config(style = 'separator1.TSeparator')
self.settingsSeparator4.config(orient = TK.HORIZONTAL)
self.settingsSeparator4.pack(fill = TK.X, pady = GUI.R('settingsHorizontalSeparatorPadY'))
#########################################
# (4) Nagłówki ##########################
self.settingsHeadlinesFrame = TKttk.Frame(self.settingsLeftFrame)
self.settingsHeadlinesFrame.config(style = 'layoutFrame.TFrame')
self.settingsHeadlinesFrame.pack(fill = TK.X)
# (4) Nagłówek poczty #########
self.settingsHeadlinesMailFrame = TKttk.Frame(self.settingsHeadlinesFrame)
self.settingsHeadlinesMailFrame.config(style = 'layoutFrame.TFrame')
self.settingsHeadlinesMailFrame.pack(fill = TK.X, expand = 1, pady = 6)
# 'Nagłówek dla pliku wyjściowego poczty'
self.settingsHeadlinesMailLabel = TKttk.Label(self.settingsHeadlinesMailFrame)
self.settingsHeadlinesMailLabel.config(style = 'label1.TLabel')
self.settingsHeadlinesMailLabel.config(width = GUI.R('settingsHeadlineLabelWidth'))
self.settingsHeadlinesMailLabel.config(anchor = GUI.R('settingsHeadlineLabelAnchor'))
self.settingsHeadlinesMailLabel.config(text = 'Nagłówek dla pliku wyjściowego poczty')
self.settingsHeadlinesMailLabel.pack(side = TK.LEFT)
# Nagłówek poczty - checkbutton
self.settingsHeadlinesMailCheckbuttonVar = TK.BooleanVar()
self.settingsHeadlinesMailCheckbutton = TK.Checkbutton(self.settingsHeadlinesMailFrame)
self.settingsHeadlinesMailCheckbutton.config(bg = GUI.R('checkbutton1Background'))
self.settingsHeadlinesMailCheckbutton.config(fg = GUI.R('checkbutton1TextColor'))
self.settingsHeadlinesMailCheckbutton.config(selectcolor = GUI.R('checkbutton1IndicatorBackground'))
self.settingsHeadlinesMailCheckbutton.config(activebackground = GUI.R('checkbutton1Background'))
self.settingsHeadlinesMailCheckbutton.config(activeforeground = GUI.R('checkbutton1TextColor'))
self.settingsHeadlinesMailCheckbutton.config(text = 'Umieść w pliku')
self.settingsHeadlinesMailCheckbutton.config(variable = self.settingsHeadlinesMailCheckbuttonVar)
self.settingsHeadlinesMailCheckbutton.pack(side = TK.RIGHT, padx = (6, 0))
self.settingsHeadlinesMailCheckbuttonVar.set(CFG.R('ifHeadlineInMail'))
# Nagłówek poczty - Entry
self.settingsHeadlinesMailEntryVar = TK.StringVar()
self.settingsHeadlinesMailEntry = TKttk.Entry(self.settingsHeadlinesMailFrame)
self.settingsHeadlinesMailEntry.config(style = 'entry1.TEntry')
self.settingsHeadlinesMailEntry.config(textvariable = self.settingsHeadlinesMailEntryVar)
self.settingsHeadlinesMailEntry.pack(side = TK.RIGHT, fill = TK.X, expand = 1, padx = (0, 6))
self.settingsHeadlinesMailEntryVar.set(CFG.R('headlineInMail'))
###############################
# (4) Nagłówek office #########
self.settingsHeadlinesOfficeFrame = TKttk.Frame(self.settingsHeadlinesFrame)
self.settingsHeadlinesOfficeFrame.config(style = 'layoutFrame.TFrame')
self.settingsHeadlinesOfficeFrame.pack(fill = TK.X, expand = 1, pady = 6)
# 'Nagłówek dla pliku wyjściowego poczty'
self.settingsHeadlinesOfficeLabel = TKttk.Label(self.settingsHeadlinesOfficeFrame)
self.settingsHeadlinesOfficeLabel.config(style = 'label1.TLabel')
self.settingsHeadlinesOfficeLabel.config(width = GUI.R('settingsHeadlineLabelWidth'))
self.settingsHeadlinesOfficeLabel.config(anchor = GUI.R('settingsHeadlineLabelAnchor'))
self.settingsHeadlinesOfficeLabel.config(text = 'Nagłówek dla pliku wyjściowego office')
self.settingsHeadlinesOfficeLabel.pack(side = TK.LEFT)
# Nagłówek poczty - checkbutton
self.settingsHeadlinesOfficeCheckbuttonVar = TK.BooleanVar()
self.settingsHeadlinesOfficeCheckbutton = TK.Checkbutton(self.settingsHeadlinesOfficeFrame)
self.settingsHeadlinesOfficeCheckbutton.config(bg = GUI.R('checkbutton1Background'))
self.settingsHeadlinesOfficeCheckbutton.config(fg = GUI.R('checkbutton1TextColor'))
self.settingsHeadlinesOfficeCheckbutton.config(selectcolor = GUI.R('checkbutton1IndicatorBackground'))
self.settingsHeadlinesOfficeCheckbutton.config(activebackground = GUI.R('checkbutton1Background'))
self.settingsHeadlinesOfficeCheckbutton.config(activeforeground = GUI.R('checkbutton1TextColor'))
self.settingsHeadlinesOfficeCheckbutton.config(text = 'Umieść w pliku')
self.settingsHeadlinesOfficeCheckbutton.config(variable = self.settingsHeadlinesOfficeCheckbuttonVar)
self.settingsHeadlinesOfficeCheckbutton.pack(side = TK.RIGHT, padx = (6, 0))
self.settingsHeadlinesOfficeCheckbuttonVar.set(CFG.R('ifHeadlineInOffice'))
# Nagłówek poczty - Entry
self.settingsHeadlinesOfficeEntryVar = TK.StringVar()
self.settingsHeadlinesOfficeEntry = TKttk.Entry(self.settingsHeadlinesOfficeFrame)
self.settingsHeadlinesOfficeEntry.config(style = 'entry1.TEntry')
self.settingsHeadlinesOfficeEntry.config(textvariable = self.settingsHeadlinesOfficeEntryVar)
self.settingsHeadlinesOfficeEntry.pack(side = TK.RIGHT, fill = TK.X, expand = 1, padx = (0, 6))
self.settingsHeadlinesOfficeEntryVar.set(CFG.R('headlineInOffice'))
###############################
#########################################
################################################### ###################################################
# (2) Separator ################################### # (2) Separator ###################################
@@ -2939,6 +3116,10 @@ class mainWindow:
x[2] = '0' x[2] = '0'
x[1] = str(x[1]) x[1] = str(x[1])
self.settingsSchoolDataText.insert(TK.END, (' | '.join(x) + '\n')) self.settingsSchoolDataText.insert(TK.END, (' | '.join(x) + '\n'))
self.settingsHeadlinesMailCheckbuttonVar.set(CFG.R('ifHeadlineInMail'))
self.settingsHeadlinesMailEntryVar.set(CFG.R('headlineInMail'))
self.settingsHeadlinesOfficeCheckbuttonVar.set(CFG.R('ifHeadlineInOffice'))
self.settingsHeadlinesOfficeEntryVar.set(CFG.R('headlineInOffice'))
def settingsButtonSaveAction(self): def settingsButtonSaveAction(self):
if MSG('A0004', False): if MSG('A0004', False):
@@ -2957,6 +3138,10 @@ class mainWindow:
's' : None, 's' : None,
} }
changes['schoolData'] = (self.settingsSchoolDataText.get("1.0", TK.END)).split('\n') changes['schoolData'] = (self.settingsSchoolDataText.get("1.0", TK.END)).split('\n')
changes['ifHeadlineInMail'] = self.settingsHeadlinesMailCheckbuttonVar.get()
changes['headlineInMail'] = self.settingsHeadlinesMailEntryVar.get()
changes['ifHeadlineInOffice'] = self.settingsHeadlinesOfficeCheckbuttonVar.get()
changes['headlineInOffice'] = self.settingsHeadlinesOfficeEntryVar.get()
CFG.W(changes) CFG.W(changes)
self.settingsReset() self.settingsReset()
else: else: