just unselect 'listen ...' entry when edited by user
[presencevnc] / src / preferences.cpp
1 /*
2     Presence VNC
3     Copyright (C) 2010 Christian Pulvermacher
4
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 2 of the License, or
8     (at your option) any later version.
9
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14
15     You should have received a copy of the GNU General Public License along
16     with this program; if not, write to the Free Software Foundation, Inc.,
17     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19 #include <QtGui>
20
21 #ifdef Q_WS_MAEMO_5
22 #include <QMaemo5ValueButton>
23 #include <QMaemo5ListPickSelector>
24 #endif
25
26 #include "preferences.h"
27
28 #include <iostream>
29
30 void migrateConfiguration()
31 {
32         QSettings settings;
33         int config_ver = settings.value("config_version", 0).toInt();
34         const int current_ver = 3;
35         if(config_ver == current_ver) //config file up-to-date
36                 return;
37         if(config_ver > current_ver) {
38                 std::cout << "Warning: Config file was created by a newer version of Presence VNC. This may break things.\n";
39                 return;
40         }
41         
42         if(settings.allKeys().isEmpty()) { //no config file
43                 settings.setValue("config_version", current_ver);
44                 settings.sync();
45                 return;
46         }
47
48         std::cout << "Migrating from configuration ver. " << config_ver << "\n";
49
50         if(config_ver == 0) {
51                 int left_zoom = settings.value("left_zoom", 0).toInt();
52                 int right_zoom = settings.value("left_zoom", 0).toInt();
53                 if(left_zoom >= 2)
54                         settings.setValue("left_zoom", left_zoom+1);
55                 if(right_zoom >= 2)
56                         settings.setValue("left_zoom", right_zoom+1);
57                 config_ver = 1;
58         }
59         if(config_ver == 1) {
60                 QString last_hostname = settings.value("last_hostname", "").toString();
61                 settings.remove("last_hostname");
62                 if(!last_hostname.isEmpty()) {
63                         //make sure hostname is sane
64                         last_hostname.remove(QChar('/'));
65                         last_hostname.remove(QChar('\\'));
66                         last_hostname = last_hostname.toLower();
67
68                         settings.setValue(QString("hosts/%1/position").arg(last_hostname), 0);
69                 }
70                 
71                 config_ver = 2;
72         }
73         if(config_ver == 2) {
74                 bool rescale = settings.value("rescale", false).toBool();
75                 settings.remove("rescale");
76
77                 int zoomlevel;
78                 if(rescale)
79                         zoomlevel = 0;
80                 else
81                         zoomlevel = 95;
82
83                 settings.setValue("zoomlevel", zoomlevel);
84                 
85                 config_ver = 3;
86         }
87         Q_ASSERT(config_ver == current_ver);
88         settings.setValue("config_version", config_ver);
89         settings.sync();
90 }
91
92
93 Preferences::Preferences(QWidget *parent):
94         QDialog(parent)
95 {
96         setWindowTitle(tr("Preferences"));
97
98         QHBoxLayout *layout1 = new QHBoxLayout();
99         QVBoxLayout *layout2 = new QVBoxLayout();
100
101 #ifdef Q_WS_MAEMO_5
102         QMaemo5ValueButton *rotation = new QMaemo5ValueButton(tr("Screen Rotation"), this);
103         rotation_selector = new QMaemo5ListPickSelector(this);
104         QStandardItemModel *model = new QStandardItemModel(0, 1, this);
105         model->appendRow(new QStandardItem(tr("Automatic")));
106         model->appendRow(new QStandardItem(tr("Landscape")));
107         model->appendRow(new QStandardItem(tr("Portrait")));
108         rotation_selector->setModel(model);
109         rotation_selector->setCurrentIndex(settings.value("screen_rotation", 0).toInt());
110         rotation->setPickSelector(rotation_selector);
111         rotation->setValueLayout(QMaemo5ValueButton::ValueBesideText);
112         layout2->addWidget(rotation);
113
114         QMaemo5ValueButton *leftzoom = new QMaemo5ValueButton(tr("Left Zoom Button"), this);
115         leftzoom_selector = new QMaemo5ListPickSelector(this);
116         QStandardItemModel *key_model = new QStandardItemModel(0, 1, this);
117         key_model->insertRow(0, new QStandardItem(tr("Left Click")));
118         key_model->insertRow(1, new QStandardItem(tr("Right Click")));
119         key_model->insertRow(2, new QStandardItem(tr("Middle Click")));
120         key_model->insertRow(3, new QStandardItem(tr("Wheel Up")));
121         key_model->insertRow(4, new QStandardItem(tr("Wheel Down")));
122         key_model->insertRow(5, new QStandardItem(tr("Page Up")));
123         key_model->insertRow(6, new QStandardItem(tr("Page Down")));
124         leftzoom_selector->setModel(key_model);
125         leftzoom_selector->setCurrentIndex(settings.value("left_zoom", 0).toInt());
126         leftzoom->setPickSelector(leftzoom_selector);
127         leftzoom->setValueLayout(QMaemo5ValueButton::ValueBesideText);
128         layout2->addWidget(leftzoom);
129
130         QMaemo5ValueButton *rightzoom = new QMaemo5ValueButton(tr("Right Zoom Button"), this);
131         rightzoom_selector = new QMaemo5ListPickSelector(this);
132         rightzoom_selector->setModel(key_model);
133         rightzoom_selector->setCurrentIndex(settings.value("right_zoom", 1).toInt());
134         rightzoom->setPickSelector(rightzoom_selector);
135         rightzoom->setValueLayout(QMaemo5ValueButton::ValueBesideText);
136         layout2->addWidget(rightzoom);
137
138         //useful if one only wants to click using the zoom buttons exclusively
139         disable_tapping = new QCheckBox(tr("Disable Tapping"), this);
140         disable_tapping->setChecked(settings.value("disable_tapping", false).toBool());
141         layout2->addWidget(disable_tapping);
142 #endif
143
144         always_show_local_cursor = new QCheckBox(tr("Always show local cursor"), this);
145         always_show_local_cursor->setChecked(settings.value("always_show_local_cursor", false).toBool());
146         layout2->addWidget(always_show_local_cursor);
147
148         QPushButton *ok = new QPushButton(tr("Done"));
149         ok->setMaximumWidth(100);
150
151         layout1->addLayout(layout2);
152         layout1->addWidget(ok);
153
154         setLayout(layout1);
155
156         connect(ok, SIGNAL(clicked()),
157                 this, SLOT(accept()));
158         connect(this, SIGNAL(accepted()),
159                 this, SLOT(save()));
160 }
161
162 void Preferences::save()
163 {
164 #ifdef Q_WS_MAEMO_5
165         settings.setValue("screen_rotation", rotation_selector->currentIndex());
166         settings.setValue("left_zoom", leftzoom_selector->currentIndex());
167         settings.setValue("right_zoom", rightzoom_selector->currentIndex());
168         settings.setValue("disable_tapping", disable_tapping->isChecked());
169 #endif
170         settings.setValue("always_show_local_cursor", always_show_local_cursor->isChecked());
171
172         settings.sync();
173 }