Add options to control the behaviour of spreads in two-pages mode
[qcomicbook-oblomov] / src / cbconfigdialog.cpp
1 /*
2  * This file is a part of QComicBook.
3  *
4  * Copyright (C) 2005-2006 Pawel Stolowski <yogin@linux.bydg.org>
5  *
6  * QComicBook is free software; you can redestribute it and/or modify it
7  * under terms of GNU General Public License by Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY. See GPL for more details.
11  */
12
13 #include "cbconfigdialog.h"
14 #include "cbsettings.h"
15 #include "imgview.h"
16 #include <qlayout.h>
17 #include <qbuttongroup.h>
18 #include <qradiobutton.h>
19 #include <qvbox.h>
20 #include <qhbox.h>
21 #include <qpushbutton.h>
22 #include <qlabel.h>
23 #include <qcheckbox.h>
24 #include <qcolordialog.h>
25 #include <qvgroupbox.h>
26 #include <qspinbox.h>
27 #include <qfontdialog.h>
28 #include <qfiledialog.h>
29 #include <qlineedit.h>
30
31 using namespace QComicBook;
32
33 ComicBookCfgDialog::ComicBookCfgDialog(QWidget *parent, ComicBookSettings *cfg): QTabDialog(parent), cfg(cfg)
34 {
35         setCaption("QComicBook Settings");
36         setModal(true);
37
38         setupDisplayTab();
39         setupMiscTab();
40         //setupEditTab();
41
42         setCancelButton();
43         setOkButton();
44
45         connect(this, SIGNAL(applyButtonPressed()), this, SLOT(apply()));
46         connect(this, SIGNAL(cancelButtonPressed()), this, SLOT(cancel()));
47 }
48
49 ComicBookCfgDialog::~ComicBookCfgDialog()
50 {
51 }
52
53 void ComicBookCfgDialog::setupDisplayTab()
54 {
55         font = cfg->infoFont();
56
57         QWidget *w = new QWidget(this);
58         QVBoxLayout *lay = new QVBoxLayout(w, 5, 5);
59
60         //
61         // background color
62         QHBoxLayout *lay1 = new QHBoxLayout;
63         lay1->addWidget(new QLabel(tr("Background color"), w));
64         lay1->addWidget(pb_color = new QPushButton(w));
65         pb_color->setFixedWidth(32);
66         pb_color->setPaletteBackgroundColor(bgcolor = cfg->background());
67         connect(pb_color, SIGNAL(clicked()), this, SLOT(showBackgroundDialog()));
68         lay->addLayout(lay1);
69
70         cb_hidemenu = new QCheckBox(tr("Hide menubar in fullscreen mode"), w);
71         cb_hidemenu->setChecked(cfg->fullScreenHideMenu());
72         lay->addWidget(cb_hidemenu);
73         
74         /*cb_hidetoolbar = new QCheckBox(tr("Hide toolbar in fullscreen mode"), w);
75         cb_hidetoolbar->setChecked(cfg->fullScreenHideToolbar());
76         lay->addWidget(cb_hidetoolbar);*/
77
78         cb_hidestatus = new QCheckBox(tr("Hide statusbar in fullscreen mode"), w);
79         cb_hidestatus->setChecked(cfg->fullScreenHideStatusbar());
80         lay->addWidget(cb_hidestatus);
81
82         cb_smallcursor = new QCheckBox(tr("Small mouse cursor"), w);
83         cb_smallcursor->setChecked(cfg->smallCursor());
84         lay->addWidget(cb_smallcursor);
85                 
86         //
87         // scaling method
88         /*QButtonGroup *gr_scaling = new QButtonGroup(2, Qt::Horizontal, tr("Scaling method"), w);
89         rb_smooth = new QRadioButton(tr("Smooth"), gr_scaling);
90         rb_fast = new QRadioButton(tr("Fast"), gr_scaling);
91         if (cfg->pageScaling() == Fast)
92                 rb_fast->setChecked(true);
93         else
94                 rb_smooth->setChecked(true);
95         lay->addWidget(gr_scaling);*/
96
97         //
98         // font
99         QHBoxLayout *lay3 = new QHBoxLayout;
100         lay3->addWidget(new QLabel(tr("Info text font"), w));
101         fontname = new QLabel(w);
102         fontname->setFrameStyle(QFrame::Panel | QFrame::Sunken);
103         fontname->setLineWidth(1);
104         lay3->addWidget(fontname, 1);
105         QPushButton *pb_font = new QPushButton(tr("Choose"), w);
106         connect(pb_font, SIGNAL(clicked()), this, SLOT(showFontDialog()));
107         lay3->addWidget(pb_font);
108         lay->addLayout(lay3);
109         
110         lay->addStretch();
111         updateFontPreview();
112         
113         addTab(w, tr("Display"));
114 }
115
116 void ComicBookCfgDialog::setupMiscTab()
117 {
118         bool f;
119
120         QWidget *w = new QWidget(this);
121         QVBoxLayout *lay = new QVBoxLayout(w, 5, 5);
122
123         QVGroupBox *grp0 = new QVGroupBox(tr("Cache"), w);
124         QHBox *box1 = new QHBox(grp0);
125         new QLabel(tr("Cache size"), box1);
126         sb_cachesize = new QSpinBox(1, 128, 1, box1);
127         sb_cachesize->setSuffix(" " + tr("Mb"));
128         sb_cachesize->setValue(cfg->cacheSize());
129         cb_preload = new QCheckBox(tr("Preload next page"), grp0);
130         cb_preload->setChecked(cfg->preloadPages());
131         lay->addWidget(grp0);
132
133         QVGroupBox *grp1 = new QVGroupBox(tr("Thumbnails"), w);
134         cb_thumbs = new QCheckBox(tr("Use disk cache for thumbnails"), grp1);
135         cb_thumbs->setChecked(cfg->cacheThumbnails());
136         QHBox *box2 = new QHBox(grp1);
137         new QLabel(tr("Number of days to keep thumbnails"), box2);
138         sb_thumbsage = new QSpinBox(0, 365, 1, box2);
139         sb_thumbsage->setValue(cfg->thumbnailsAge());
140         lay->addWidget(grp1);
141         
142         QVGroupBox *grp2 = new QVGroupBox(tr("Help browser"), w);
143         cb_intbrowser = new QCheckBox(tr("Use Built-in browser"), grp2);
144         QWidget *box3 = new QWidget(grp2);
145         QHBoxLayout *lay3 = new QHBoxLayout(box3, 0, 5);
146         lay3->addWidget(new QLabel(tr("External browser"), box3));
147         lay3->addWidget(le_extbrowser = new QLineEdit(box3));
148         lay3->addWidget(pb_brbrowse = new QPushButton(tr("Browse"), box3));
149         connect(pb_brbrowse, SIGNAL(clicked()), this, SLOT(browseExternalBrowser()));
150         lay->addWidget(grp2);
151         connect(cb_intbrowser, SIGNAL(toggled(bool)), this, SLOT(browserCheckboxToggled(bool)));
152         cb_intbrowser->setChecked(f = cfg->useInternalBrowser());
153         browserCheckboxToggled(f);
154         le_extbrowser->setText(cfg->externalBrowser());
155
156         QVGroupBox *grp3 = new QVGroupBox(tr("Strip Mode"), w);
157         QHBox *box4 = new QHBox(grp3);
158         new QLabel(tr("Number of strips per page"), box4);
159         sb_stripmax = new QSpinBox(1, 7, 6, box4);
160         sb_stripmax->setValue(cfg->stripMax());
161         lay->addWidget(grp3);
162
163         QVGroupBox *grp4 = new QVGroupBox(tr("Two-pages mode"), w);
164         QVBox *box5 = new QVBox(grp4);
165         cb_twopagesstep = new QCheckBox(tr("Forward and backward two pages in two-pages mode"), box5);
166         cb_twopagesstep->setChecked(cfg->twoPagesStep());
167         cb_twopagesspread = new QCheckBox(tr("Show spreads (double-width single pages) alone"), box5);
168         cb_twopagesspread->setChecked(cfg->twoPagesSpread());
169         cb_twopagesskip = new QCheckBox(tr("Show page before and after spreads together"), box5);
170         cb_twopagesskip->setChecked(cfg->twoPagesSkip());
171         lay->addWidget(grp4);
172         
173         cb_autoinfo = new QCheckBox(tr("Open info dialog after opening comic book"), w);
174         cb_autoinfo->setChecked(cfg->autoInfo());
175         lay->addWidget(cb_autoinfo);
176
177         cb_splash = new QCheckBox(tr("Show splashscreen"), w);
178         cb_splash->setChecked(cfg->showSplash());
179         lay->addWidget(cb_splash);
180         
181         /* TODO
182         cb_autobookmark = new QCheckBox(tr("Save bookmark for current comicbook on close/exit"), w);
183         cb_autobookmark->setChecked(cfg->confirmExit());
184         lay->addWidget(cb_autobookmark);*/
185
186         cb_confirmexit = new QCheckBox(tr("Confirm exit"), w);
187         cb_confirmexit->setChecked(cfg->confirmExit());
188         lay->addWidget(cb_confirmexit);
189
190         lay->addStretch();
191         addTab(w, tr("Misc"));
192 }
193
194 void ComicBookCfgDialog::setupEditTab()
195 {
196         QWidget *w = new QWidget(this);
197         QVBoxLayout *lay = new QVBoxLayout(w, 5, 5);
198
199         cb_editing = new QCheckBox(tr("Enable editing"), w);
200         cb_editing->setChecked(cfg->editSupport());
201         lay->addWidget(cb_editing);
202
203         lay->addStretch();
204         addTab(w, tr("Editing"));
205 }
206
207 void ComicBookCfgDialog::apply()
208 {
209         //
210         // display
211         cfg->background(bgcolor);
212         cfg->fullScreenHideMenu(cb_hidemenu->isChecked());
213         cfg->fullScreenHideStatusbar(cb_hidestatus->isChecked());
214         //cfg->fullScreenHideToolbar(cb_hidetoolbar->isChecked());
215         cfg->smallCursor(cb_smallcursor->isChecked());
216         /*if (rb_smooth->isChecked())
217                 cfg->pageScaling(Smooth);
218         else
219                 if (rb_fast->isChecked())
220                         cfg->pageScaling(Fast);*/
221         cfg->infoFont(font);
222
223         //
224         // misc
225         cfg->cacheSize(sb_cachesize->value());
226         cfg->preloadPages(cb_preload->isChecked());
227         cfg->cacheThumbnails(cb_thumbs->isChecked());
228         cfg->thumbnailsAge(sb_thumbsage->value());
229         cfg->stripMax(sb_stripmax->value());
230         cfg->twoPagesStep(cb_twopagesstep->isChecked());
231         cfg->twoPagesSpread(cb_twopagesspread->isChecked());
232         cfg->twoPagesSkip(cb_twopagesskip->isChecked());
233         cfg->useInternalBrowser(cb_intbrowser->isChecked());
234         cfg->externalBrowser(le_extbrowser->text());
235         cfg->autoInfo(cb_autoinfo->isChecked());
236         cfg->showSplash(cb_splash->isChecked());
237         cfg->confirmExit(cb_confirmexit->isChecked());
238
239         //
240         // edit
241         //cfg->editSupport(cb_editing->isChecked());
242 }
243
244 void ComicBookCfgDialog::cancel()
245 {
246 }
247
248 void ComicBookCfgDialog::updateFontPreview()
249 {
250         fontname->setText(font.family() + ", " + QString::number(font.pointSize()));
251         fontname->setFont(font);
252 }
253
254 void ComicBookCfgDialog::showBackgroundDialog()
255 {
256         QColor c = QColorDialog::getColor(cfg->background(), this);
257         if (c.isValid())
258                 pb_color->setPaletteBackgroundColor(bgcolor = c);
259 }
260
261 void ComicBookCfgDialog::showFontDialog()
262 {
263         bool ok;
264         font = QFontDialog::getFont(&ok, font, this);
265         if (ok)
266                 updateFontPreview();
267 }
268
269 void ComicBookCfgDialog::browseExternalBrowser()
270 {
271         const QString file = QFileDialog::getOpenFileName(QString::null,
272                         "All files (*)", this, NULL, tr("Choose a file") );
273         if (file != QString::null)
274                 le_extbrowser->setText(file);
275 }
276
277 void ComicBookCfgDialog::browserCheckboxToggled(bool f)
278 {
279         le_extbrowser->setDisabled(f);
280         pb_brbrowse->setDisabled(f);
281 }
282