Skip to content

Commit 64adedc

Browse files
committed
Started work on settings feature
1 parent eb7cace commit 64adedc

2 files changed

Lines changed: 116 additions & 7 deletions

File tree

mainwindow.ui

Lines changed: 83 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
<?xml version='1.0' encoding='utf-8'?>
22
<interface>
3-
<object class="tk.Toplevel" id="mainwindow">
3+
<object class="tk.Toplevel" id="MainWindow">
44
<property name="geometry">500x400</property>
55
<property name="height">400</property>
6-
<property name="pady">0</property>
76
<property name="resizable">none</property>
87
<property name="takefocus">false</property>
98
<property name="title" translatable="yes">PyPDF Builder</property>
109
<property name="width">500</property>
10+
<bind add="" handler="select_tab_bg" sequence="&lt;Control-b&gt;" />
11+
<bind add="" handler="select_tab_join" sequence="&lt;Control-j&gt;" />
12+
<bind add="" handler="select_tab_rotate" sequence="&lt;Control-r&gt;" />
13+
<bind add="" handler="select_tab_split" sequence="&lt;Control-s&gt;" />
14+
<bind add="" handler="show_settings" sequence="&lt;Control-t&gt;" />
1115
<child>
1216
<object class="ttk.Frame" id="MainApplication">
1317
<property name="height">400</property>
@@ -830,6 +834,18 @@
830834
<property name="accelerator">Strg+P</property>
831835
<property name="command_id_arg">false</property>
832836
<property name="label" translatable="yes">Show Document Protection</property>
837+
<property name="state">disabled</property>
838+
</object>
839+
</child>
840+
<child>
841+
<object class="tk.Menuitem.Separator" id="ViewSeparator_2" />
842+
</child>
843+
<child>
844+
<object class="tk.Menuitem.Command" id="ViewAppSettings">
845+
<property name="accelerator">Strg+T</property>
846+
<property name="command">show_settings</property>
847+
<property name="command_id_arg">false</property>
848+
<property name="label" translatable="yes">Settings</property>
833849
</object>
834850
</child>
835851
</object>
@@ -840,4 +856,69 @@
840856
</object>
841857
</child>
842858
</object>
859+
<object class="pygubu.builder.widgets.dialog" id="SettingsDialog">
860+
<property name="geometry">400x300</property>
861+
<property name="height">100</property>
862+
<property name="modal">true</property>
863+
<property name="resizable">none</property>
864+
<property name="takefocus">true</property>
865+
<property name="title" translatable="yes">Settings</property>
866+
<property name="width">200</property>
867+
<bind add="" handler="close_settings" sequence="&lt;&lt;DialogClose&gt;&gt;" />
868+
<child>
869+
<object class="ttk.Frame" id="SettingsFrame_1">
870+
<property name="height">200</property>
871+
<property name="padding">10</property>
872+
<property name="width">400</property>
873+
<layout>
874+
<property name="column">0</property>
875+
<property name="propagate">True</property>
876+
<property name="row">0</property>
877+
<rows>
878+
<row id="0">
879+
<property name="weight">1</property>
880+
</row>
881+
</rows>
882+
<columns>
883+
<column id="0">
884+
<property name="weight">1</property>
885+
</column>
886+
</columns>
887+
</layout>
888+
<child>
889+
<object class="ttk.Labelframe" id="SystemToolsFrame_1">
890+
<property name="height">100</property>
891+
<property name="text" translatable="yes">System Tools</property>
892+
<layout>
893+
<property name="column">0</property>
894+
<property name="propagate">True</property>
895+
<property name="row">0</property>
896+
<rows>
897+
<row id="0">
898+
<property name="minsize">0</property>
899+
<property name="weight">0</property>
900+
</row>
901+
</rows>
902+
<columns>
903+
<column id="0">
904+
<property name="weight">1</property>
905+
</column>
906+
</columns>
907+
</layout>
908+
<child>
909+
<object class="ttk.Checkbutton" id="UsePopplerCheckbutton_1">
910+
<property name="text" translatable="yes">Use Poppler PDF Tools if available</property>
911+
<property name="variable">string:settings_use_poppler</property>
912+
<layout>
913+
<property name="column">0</property>
914+
<property name="propagate">True</property>
915+
<property name="row">0</property>
916+
</layout>
917+
</object>
918+
</child>
919+
</object>
920+
</child>
921+
</object>
922+
</child>
923+
</object>
843924
</interface>

pypdfbuilder.py

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@
2020
DATA_DIR = appdirs.user_data_dir(APPNAME)
2121

2222

23+
class SettingsData:
24+
'''Class for managing current user's application settings'''
25+
26+
def __init__(self):
27+
pass
28+
2329
class UserData:
2430
'''Class for storing current user's application data'''
2531

@@ -460,24 +466,23 @@ def __init__(self):
460466
self.builder = pgBuilder()
461467
self.builder.add_from_file(os.path.join(CURRENT_DIR, 'mainwindow.ui'))
462468

463-
self.mainwindow = self.builder.get_object('mainwindow')
469+
self.mainwindow = self.builder.get_object('MainWindow')
470+
self.settings_dialog = self.builder.get_object('SettingsDialog', self.mainwindow)
464471
self.notebook = self.builder.get_object('AppNotebook')
465472
self.tabs = {
466473
'join': self.builder.get_object('JoinFrame'),
467474
'split': self.builder.get_object('SplitFrame'),
468475
'bg': self.builder.get_object('BgFrame'),
469476
'rotate': self.builder.get_object('RotateFrame'),
470477
}
471-
self.mainwindow.bind_all('<Control-j>', self.select_tab_join)
472-
self.mainwindow.bind_all('<Control-s>', self.select_tab_split)
473-
self.mainwindow.bind_all('<Control-b>', self.select_tab_bg)
474-
self.mainwindow.bind_all('<Control-r>', self.select_tab_rotate)
478+
475479
self.mainmenu = self.builder.get_object('MainMenu')
476480
self.mainwindow.config(menu=self.mainmenu)
477481

478482
self.builder.connect_callbacks(self)
479483

480484
self.user_data = UserData()
485+
self.settings_data = SettingsData()
481486

482487
self.jointab = JoinTabManager(self)
483488
self.splittab = SplitTabManager(self)
@@ -486,15 +491,23 @@ def __init__(self):
486491

487492
# boy oh boy if there's anyway to do these callsbacks more elegantly, please let me gain that knowledge!
488493
def select_tab_join(self, *args, **kwargs):
494+
'''Gets called when menu item "View > Join Files" is selected.
495+
Pops appropriate tab into view.'''
489496
self.notebook.select(self.tabs['join'])
490497

491498
def select_tab_split(self, *args, **kwargs):
499+
'''Gets called when menu item "View > Split File" is selected.
500+
Pops appropriate tab into view.'''
492501
self.notebook.select(self.tabs['split'])
493502

494503
def select_tab_bg(self, *args, **kwargs):
504+
'''Gets called when menu item "View > Background/Stamp/Number" is selected.
505+
Pops appropriate tab into view.'''
495506
self.notebook.select(self.tabs['bg'])
496507

497508
def select_tab_rotate(self, *args, **kwargs):
509+
'''Gets called when menu item "View > Rotate Pages" is selected.
510+
Pops appropriate tab into view.'''
498511
self.notebook.select(self.tabs['rotate'])
499512

500513
def jointab_add_file(self):
@@ -552,6 +565,21 @@ def rotatetab_open_file(self):
552565
def rotatetab_save_as(self):
553566
self.rotatetab.save_as()
554567

568+
def show_settings(self, *args, **kwargs):
569+
'''Shows the settings dialog. The close event is handled by `self.close_settings()`
570+
and all the settings management is handled there. Args and kwargs are included in
571+
method definition in case it is triggered by the keyboard shortcut, in which
572+
case `event` gets passed into the call.'''
573+
self.settings_dialog.run()
574+
# load data from settings and update widgets in dialog accordingly
575+
576+
def close_settings(self, *args, **kwargs):
577+
# save settings and close it up
578+
self.settings_dialog.close()
579+
580+
def cancel_settings(self, *args, **kwargs):
581+
pass
582+
555583
def get_file_dialog(self, func, widget_title='Choose File(s) …'):
556584
f = func(
557585
initialdir=self.user_data.filedialog_path,

0 commit comments

Comments
 (0)