Start a two-pages mode options group
[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         QHBox *box5 = new QHBox(grp4);
165         cb_twopagesstep = new QCheckBox(tr("Forward and backward two pages in two-pages mode"), box5);
166         cb_twopagesstep->setChecked(cfg->twoPagesStep());
167         lay->addWidget(grp4);
168         
169         cb_autoinfo = new QCheckBox(tr("Open info dialog after opening comic book"), w);
170         cb_autoinfo->setChecked(cfg->autoInfo());
171         lay->addWidget(cb_autoinfo);
172
173         cb_splash = new QCheckBox(tr("Show splashscreen"), w);
174         cb_splash->setChecked(cfg->showSplash());
175         lay->addWidget(cb_splash);
176         
177         /* TODO
178         cb_autobookmark = new QCheckBox(tr("Save bookmark for current comicbook on close/exit"), w);
179         cb_autobookmark->setChecked(cfg->confirmExit());
180         lay->addWidget(cb_autobookmark);*/
181
182         cb_confirmexit = new QCheckBox(tr("Confirm exit"), w);
183         cb_confirmexit->setChecked(cfg->confirmExit());
184         lay->addWidget(cb_confirmexit);
185
186         lay->addStretch();
187         addTab(w, tr("Misc"));
188 }
189
190 void ComicBookCfgDialog::setupEditTab()
191 {
192         QWidget *w = new QWidget(this);
193         QVBoxLayout *lay = new QVBoxLayout(w, 5, 5);
194
195         cb_editing = new QCheckBox(tr("Enable editing"), w);
196         cb_editing->setChecked(cfg->editSupport());
197         lay->addWidget(cb_editing);
198
199         lay->addStretch();
200         addTab(w, tr("Editing"));
201 }
202
203 void ComicBookCfgDialog::apply()
204 {
205         //
206         // display
207         cfg->background(bgcolor);
208         cfg->fullScreenHideMenu(cb_hidemenu->isChecked());
209         cfg->fullScreenHideStatusbar(cb_hidestatus->isChecked());
210         //cfg->fullScreenHideToolbar(cb_hidetoolbar->isChecked());
211         cfg->smallCursor(cb_smallcursor->isChecked());
212         /*if (rb_smooth->isChecked())
213                 cfg->pageScaling(Smooth);
214         else
215                 if (rb_fast->isChecked())
216                         cfg->pageScaling(Fast);*/
217         cfg->infoFont(font);
218
219         //
220         // misc
221         cfg->cacheSize(sb_cachesize->value());
222         cfg->preloadPages(cb_preload->isChecked());
223         cfg->cacheThumbnails(cb_thumbs->isChecked());
224         cfg->thumbnailsAge(sb_thumbsage->value());
225         cfg->stripMax(sb_stripmax->value());
226         cfg->twoPagesStep(cb_twopagesstep->isChecked());
227         cfg->useInternalBrowser(cb_intbrowser->isChecked());
228         cfg->externalBrowser(le_extbrowser->text());
229         cfg->autoInfo(cb_autoinfo->isChecked());
230         cfg->showSplash(cb_splash->isChecked());
231         cfg->confirmExit(cb_confirmexit->isChecked());
232
233         //
234         // edit
235         //cfg->editSupport(cb_editing->isChecked());
236 }
237
238 void ComicBookCfgDialog::cancel()
239 {
240 }
241
242 void ComicBookCfgDialog::updateFontPreview()
243 {
244         fontname->setText(font.family() + ", " + QString::number(font.pointSize()));
245         fontname->setFont(font);
246 }
247
248 void ComicBookCfgDialog::showBackgroundDialog()
249 {
250         QColor c = QColorDialog::getColor(cfg->background(), this);
251         if (c.isValid())
252                 pb_color->setPaletteBackgroundColor(bgcolor = c);
253 }
254
255 void ComicBookCfgDialog::showFontDialog()
256 {
257         bool ok;
258         font = QFontDialog::getFont(&ok, font, this);
259         if (ok)
260                 updateFontPreview();
261 }
262
263 void ComicBookCfgDialog::browseExternalBrowser()
264 {
265         const QString file = QFileDialog::getOpenFileName(QString::null,
266                         "All files (*)", this, NULL, tr("Choose a file") );
267         if (file != QString::null)
268                 le_extbrowser->setText(file);
269 }
270
271 void ComicBookCfgDialog::browserCheckboxToggled(bool f)
272 {
273         le_extbrowser->setDisabled(f);
274         pb_brbrowse->setDisabled(f);
275 }
276