author | sandman <sandman> | 2002-12-22 23:46:02 (UTC) |
---|---|---|
committer | sandman <sandman> | 2002-12-22 23:46:02 (UTC) |
commit | 92fb302dd801e7f568cd9d66025431e79dad9771 (patch) (unidiff) | |
tree | 1303acdd800fd01d221a1aa261f2ee730ada4ec1 | |
parent | c5de1fcc13b32e7c1f893dc3f8a1385b8698ebaf (diff) | |
download | opie-92fb302dd801e7f568cd9d66025431e79dad9771.zip opie-92fb302dd801e7f568cd9d66025431e79dad9771.tar.gz opie-92fb302dd801e7f568cd9d66025431e79dad9771.tar.bz2 |
New button settings -- replaces AppsKey, which does not work anymore with
the new device button framework
-rw-r--r-- | core/settings/button/button.pro | 35 | ||||
-rw-r--r-- | core/settings/button/buttonsettings.cpp | 249 | ||||
-rw-r--r-- | core/settings/button/buttonsettings.h | 74 | ||||
-rw-r--r-- | core/settings/button/buttonutils.cpp | 119 | ||||
-rw-r--r-- | core/settings/button/buttonutils.h | 67 | ||||
-rw-r--r-- | core/settings/button/config.in | 4 | ||||
-rw-r--r-- | core/settings/button/main.cpp | 43 | ||||
-rw-r--r-- | core/settings/button/opiebutton-settings.control | 9 | ||||
-rw-r--r-- | core/settings/button/remapdlg.cpp | 119 | ||||
-rw-r--r-- | core/settings/button/remapdlg.h | 35 | ||||
-rw-r--r-- | core/settings/button/remapdlgbase.ui | 224 |
11 files changed, 978 insertions, 0 deletions
diff --git a/core/settings/button/button.pro b/core/settings/button/button.pro new file mode 100644 index 0000000..389695c --- a/dev/null +++ b/core/settings/button/button.pro | |||
@@ -0,0 +1,35 @@ | |||
1 | TEMPLATE = app | ||
2 | CONFIG += qt warn_on release | ||
3 | DESTDIR = $(OPIEDIR)/bin | ||
4 | HEADERS = buttonsettings.h \ | ||
5 | buttonutils.h \ | ||
6 | remapdlg.h | ||
7 | |||
8 | SOURCES = main.cpp \ | ||
9 | buttonsettings.cpp \ | ||
10 | buttonutils.cpp \ | ||
11 | remapdlg.cpp | ||
12 | |||
13 | INTERFACES = remapdlgbase.ui | ||
14 | |||
15 | INCLUDEPATH += $(OPIEDIR)/include | ||
16 | DEPENDPATH += $(OPIEDIR)/include | ||
17 | LIBS += -lqpe -lopie | ||
18 | TARGET = buttonsettings | ||
19 | |||
20 | TRANSLATIONS = ../../../i18n/de/buttonsettings.ts \ | ||
21 | ../../../i18n/xx/buttonsettings.ts \ | ||
22 | ../../../i18n/en/buttonsettings.ts \ | ||
23 | ../../../i18n/es/buttonsettings.ts \ | ||
24 | ../../../i18n/fr/buttonsettings.ts \ | ||
25 | ../../../i18n/hu/buttonsettings.ts \ | ||
26 | ../../../i18n/ja/buttonsettings.ts \ | ||
27 | ../../../i18n/ko/buttonsettings.ts \ | ||
28 | ../../../i18n/no/buttonsettings.ts \ | ||
29 | ../../../i18n/pl/buttonsettings.ts \ | ||
30 | ../../../i18n/pt/buttonsettings.ts \ | ||
31 | ../../../i18n/pt_BR/buttonsettings.ts \ | ||
32 | ../../../i18n/sl/buttonsettings.ts \ | ||
33 | ../../../i18n/zh_CN/buttonsettings.ts \ | ||
34 | ../../../i18n/zh_TW/buttonsettings.ts \ | ||
35 | ../../../i18n/da/buttonsettings.ts | ||
diff --git a/core/settings/button/buttonsettings.cpp b/core/settings/button/buttonsettings.cpp new file mode 100644 index 0000000..c71514c --- a/dev/null +++ b/core/settings/button/buttonsettings.cpp | |||
@@ -0,0 +1,249 @@ | |||
1 | /* | ||
2 | =. This file is part of the OPIE Project | ||
3 | .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> | ||
4 | .>+-= | ||
5 | _;:, .> :=|. This file is free software; you can | ||
6 | .> <`_, > . <= redistribute it and/or modify it under | ||
7 | :`=1 )Y*s>-.-- : the terms of the GNU General Public | ||
8 | .="- .-=="i, .._ License as published by the Free Software | ||
9 | - . .-<_> .<> Foundation; either version 2 of the License, | ||
10 | ._= =} : or (at your option) any later version. | ||
11 | .%`+i> _;_. | ||
12 | .i_,=:_. -<s. This file is distributed in the hope that | ||
13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | ||
14 | : .. .:, . . . without even the implied warranty of | ||
15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | ||
16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU General | ||
17 | ..}^=.= = ; Public License for more details. | ||
18 | ++= -. .` .: | ||
19 | : = ...= . :.=- You should have received a copy of the GNU | ||
20 | -. .:....=;==+<; General Public License along with this file; | ||
21 | -_. . . )=. = see the file COPYING. If not, write to the | ||
22 | -- :-=` Free Software Foundation, Inc., | ||
23 | 59 Temple Place - Suite 330, | ||
24 | Boston, MA 02111-1307, USA. | ||
25 | |||
26 | */ | ||
27 | |||
28 | #include <qlayout.h> | ||
29 | #include <qlabel.h> | ||
30 | #include <qtimer.h> | ||
31 | |||
32 | #include <qpe/qpeapplication.h> | ||
33 | |||
34 | #include <opie/odevice.h> | ||
35 | |||
36 | #include "buttonsettings.h" | ||
37 | #include "buttonutils.h" | ||
38 | #include "remapdlg.h" | ||
39 | |||
40 | using namespace Opie; | ||
41 | |||
42 | struct buttoninfo { | ||
43 | const ODeviceButton *m_button; | ||
44 | int m_index; | ||
45 | |||
46 | OQCopMessage m_pmsg; | ||
47 | QLabel *m_picon; | ||
48 | QLabel *m_plabel; | ||
49 | |||
50 | OQCopMessage m_hmsg; | ||
51 | QLabel *m_hicon; | ||
52 | QLabel *m_hlabel; | ||
53 | |||
54 | bool m_pdirty : 1; | ||
55 | bool m_hdirty : 1; | ||
56 | }; | ||
57 | |||
58 | |||
59 | ButtonSettings::ButtonSettings ( ) | ||
60 | : QDialog ( 0, "ButtonSettings", false, WStyle_ContextHelp ) | ||
61 | { | ||
62 | const QValueList <ODeviceButton> &buttons = ODevice::inst ( )-> buttons ( ); | ||
63 | |||
64 | setCaption ( tr( "Button Settings" )); | ||
65 | |||
66 | QVBoxLayout *toplay = new QVBoxLayout ( this, 3, 3 ); | ||
67 | |||
68 | QLabel *l = new QLabel ( tr( "<center>Press or hold the button you want to remap.</center>" ), this ); | ||
69 | toplay-> addWidget ( l ); | ||
70 | |||
71 | QGridLayout *lay = new QGridLayout ( toplay ); | ||
72 | lay-> setMargin ( 0 ); | ||
73 | lay-> setColStretch ( 0, 0 ); | ||
74 | lay-> setColStretch ( 1, 0 ); | ||
75 | lay-> setColStretch ( 2, 0 ); | ||
76 | lay-> setColStretch ( 3, 10 ); | ||
77 | |||
78 | m_infos. setAutoDelete ( true ); | ||
79 | |||
80 | int i = 1; | ||
81 | int index = 0; | ||
82 | for ( QValueList<ODeviceButton>::ConstIterator it = buttons. begin ( ); it != buttons. end ( ); it++ ) { | ||
83 | if ( it != buttons. begin ( )) { | ||
84 | QFrame *f = new QFrame ( this ); | ||
85 | f-> setFrameStyle ( QFrame::Sunken | QFrame::VLine ); | ||
86 | lay-> addMultiCellWidget ( f, i, i, 0, 2 ); | ||
87 | i++; | ||
88 | } | ||
89 | |||
90 | buttoninfo *bi = new buttoninfo ( ); | ||
91 | bi-> m_button = &(*it); | ||
92 | bi-> m_index = index++; | ||
93 | bi-> m_pmsg = (*it). pressedAction ( ); | ||
94 | bi-> m_hmsg = (*it). heldAction ( ); | ||
95 | bi-> m_pdirty = false; | ||
96 | bi-> m_hdirty = false; | ||
97 | |||
98 | l = new QLabel ( this ); | ||
99 | l-> setPixmap (( *it ). pixmap ( )); | ||
100 | |||
101 | lay-> addMultiCellWidget ( l, i, i + 1, 0, 0 ); | ||
102 | |||
103 | l = new QLabel ( tr( "Press:" ), this ); | ||
104 | lay-> addWidget ( l, i, 1, AlignLeft | AlignBottom ); | ||
105 | l = new QLabel ( tr( "Hold:" ), this ); | ||
106 | lay-> addWidget ( l, i + 1, 1, AlignLeft | AlignTop ); | ||
107 | |||
108 | l = new QLabel ( this ); | ||
109 | l-> setFixedSize ( 16, 16 ); | ||
110 | lay-> addWidget ( l, i, 2, AlignLeft | AlignBottom ); | ||
111 | bi-> m_picon = l; | ||
112 | |||
113 | l = new QLabel ( this ); | ||
114 | l-> setAlignment ( AlignLeft | AlignVCenter | SingleLine ); | ||
115 | lay-> addWidget ( l, i, 3, AlignLeft | AlignBottom ); | ||
116 | bi-> m_plabel = l; | ||
117 | |||
118 | l = new QLabel ( this ); | ||
119 | l-> setFixedSize ( 16, 16 ); | ||
120 | lay-> addWidget ( l, i + 1, 2, AlignLeft | AlignTop ); | ||
121 | bi-> m_hicon = l; | ||
122 | |||
123 | l = new QLabel ( this ); | ||
124 | l-> setAlignment ( AlignLeft | AlignVCenter | SingleLine ); | ||
125 | lay-> addWidget ( l, i + 1, 3, AlignLeft | AlignTop ); | ||
126 | bi-> m_hlabel = l; | ||
127 | |||
128 | i += 2; | ||
129 | |||
130 | m_infos. append ( bi ); | ||
131 | } | ||
132 | |||
133 | toplay-> addStretch ( 10 ); | ||
134 | |||
135 | m_last_button = 0; | ||
136 | |||
137 | m_timer = new QTimer ( this ); | ||
138 | connect ( m_timer, SIGNAL( timeout ( )), this, SLOT( keyTimeout ( ))); | ||
139 | |||
140 | updateLabels ( ); | ||
141 | |||
142 | QPEApplication::grabKeyboard ( ); | ||
143 | } | ||
144 | |||
145 | ButtonSettings::~ButtonSettings ( ) | ||
146 | { | ||
147 | QPEApplication::ungrabKeyboard ( ); | ||
148 | } | ||
149 | |||
150 | void ButtonSettings::updateLabels ( ) | ||
151 | { | ||
152 | for ( QListIterator <buttoninfo> it ( m_infos ); *it; ++it ) { | ||
153 | qCopInfo cip = ButtonUtils::inst ( )-> messageToInfo ((*it)-> m_pmsg ); | ||
154 | |||
155 | (*it)-> m_picon-> setPixmap ( cip. m_icon ); | ||
156 | (*it)-> m_plabel-> setText ( cip. m_name ); | ||
157 | |||
158 | qCopInfo cih = ButtonUtils::inst ( )-> messageToInfo ((*it)-> m_hmsg ); | ||
159 | |||
160 | (*it)-> m_hicon-> setPixmap ( cih. m_icon ); | ||
161 | (*it)-> m_hlabel-> setText ( cih. m_name ); | ||
162 | } | ||
163 | } | ||
164 | |||
165 | buttoninfo *ButtonSettings::buttonInfoForKeycode ( ushort key ) | ||
166 | { | ||
167 | for ( QListIterator <buttoninfo> it ( m_infos ); *it; ++it ) { | ||
168 | if ((*it)-> m_button-> keycode ( ) == key ) | ||
169 | return *it; | ||
170 | } | ||
171 | return 0; | ||
172 | } | ||
173 | |||
174 | void ButtonSettings::keyPressEvent ( QKeyEvent *e ) | ||
175 | { | ||
176 | buttoninfo *bi = buttonInfoForKeycode ( e-> key ( )); | ||
177 | |||
178 | if ( bi && !e-> isAutoRepeat ( )) { | ||
179 | m_timer-> stop ( ); | ||
180 | m_last_button = bi; | ||
181 | m_timer-> start ( ODevice::inst ( )-> buttonHoldTime ( ), true ); | ||
182 | } | ||
183 | else | ||
184 | QDialog::keyPressEvent ( e ); | ||
185 | } | ||
186 | |||
187 | void ButtonSettings::keyReleaseEvent ( QKeyEvent *e ) | ||
188 | { | ||
189 | buttoninfo *bi = buttonInfoForKeycode ( e-> key ( )); | ||
190 | |||
191 | if ( bi && !e-> isAutoRepeat ( ) && m_timer-> isActive ( )) { | ||
192 | m_timer-> stop ( ); | ||
193 | edit ( bi, false ); | ||
194 | } | ||
195 | else | ||
196 | QDialog::keyReleaseEvent ( e ); | ||
197 | } | ||
198 | |||
199 | void ButtonSettings::keyTimeout ( ) | ||
200 | { | ||
201 | if ( m_last_button ) { | ||
202 | edit ( m_last_button, true ); | ||
203 | m_last_button = false; | ||
204 | } | ||
205 | } | ||
206 | |||
207 | void ButtonSettings::edit ( buttoninfo *bi, bool hold ) | ||
208 | { | ||
209 | qDebug ( "remap %s for %s", hold ? "hold" : "press", bi-> m_button-> userText ( ). latin1 ( )); | ||
210 | |||
211 | RemapDlg *d = new RemapDlg ( bi-> m_button, hold, this ); | ||
212 | |||
213 | d-> showMaximized ( ); | ||
214 | if ( d-> exec ( ) == QDialog::Accepted ) { | ||
215 | qDebug ( " -> %s %s", d-> message ( ). channel ( ). data ( ), d-> message ( ). message ( ). data ( )); | ||
216 | |||
217 | if ( hold ) { | ||
218 | bi-> m_hmsg = d-> message ( ); | ||
219 | bi-> m_hdirty = true; | ||
220 | } | ||
221 | else { | ||
222 | bi-> m_pmsg = d-> message ( ); | ||
223 | bi-> m_pdirty = true; | ||
224 | } | ||
225 | |||
226 | updateLabels ( ); | ||
227 | } | ||
228 | |||
229 | delete d; | ||
230 | } | ||
231 | |||
232 | void ButtonSettings::accept ( ) | ||
233 | { | ||
234 | for ( QListIterator <buttoninfo> it ( m_infos ); *it; ++it ) { | ||
235 | buttoninfo *bi = *it; | ||
236 | |||
237 | if ( bi-> m_pdirty ) | ||
238 | ODevice::inst ( )-> remapPressedAction ( bi-> m_index, bi-> m_pmsg ); | ||
239 | if ( bi-> m_hdirty ) | ||
240 | ODevice::inst ( )-> remapHeldAction ( bi-> m_index, bi-> m_hmsg ); | ||
241 | } | ||
242 | QDialog::accept ( ); | ||
243 | } | ||
244 | |||
245 | void ButtonSettings::done ( int r ) | ||
246 | { | ||
247 | QDialog::done ( r ); | ||
248 | close ( ); | ||
249 | } | ||
diff --git a/core/settings/button/buttonsettings.h b/core/settings/button/buttonsettings.h new file mode 100644 index 0000000..f571825 --- a/dev/null +++ b/core/settings/button/buttonsettings.h | |||
@@ -0,0 +1,74 @@ | |||
1 | /* | ||
2 | =. This file is part of the OPIE Project | ||
3 | .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> | ||
4 | .>+-= | ||
5 | _;:, .> :=|. This file is free software; you can | ||
6 | .> <`_, > . <= redistribute it and/or modify it under | ||
7 | :`=1 )Y*s>-.-- : the terms of the GNU General Public | ||
8 | .="- .-=="i, .._ License as published by the Free Software | ||
9 | - . .-<_> .<> Foundation; either version 2 of the License, | ||
10 | ._= =} : or (at your option) any later version. | ||
11 | .%`+i> _;_. | ||
12 | .i_,=:_. -<s. This file is distributed in the hope that | ||
13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | ||
14 | : .. .:, . . . without even the implied warranty of | ||
15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | ||
16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU General | ||
17 | ..}^=.= = ; Public License for more details. | ||
18 | ++= -. .` .: | ||
19 | : = ...= . :.=- You should have received a copy of the GNU | ||
20 | -. .:....=;==+<; General Public License along with this file; | ||
21 | -_. . . )=. = see the file COPYING. If not, write to the | ||
22 | -- :-=` Free Software Foundation, Inc., | ||
23 | 59 Temple Place - Suite 330, | ||
24 | Boston, MA 02111-1307, USA. | ||
25 | |||
26 | */ | ||
27 | |||
28 | #ifndef __BUTTON_SETTINGS_H__ | ||
29 | #define __BUTTON_SETTINGS_H__ | ||
30 | |||
31 | #include <qdialog.h> | ||
32 | #include <qlist.h> | ||
33 | #include <opie/odevice.h> | ||
34 | |||
35 | class QTimer; | ||
36 | |||
37 | using namespace Opie; | ||
38 | |||
39 | class buttoninfo; | ||
40 | |||
41 | class ButtonSettings : public QDialog { | ||
42 | Q_OBJECT | ||
43 | |||
44 | public: | ||
45 | ButtonSettings ( ); | ||
46 | ~ButtonSettings ( ); | ||
47 | |||
48 | virtual void accept ( ); | ||
49 | virtual void done ( int r ); | ||
50 | |||
51 | private slots: | ||
52 | void keyTimeout ( ); | ||
53 | void updateLabels ( ); | ||
54 | |||
55 | protected: | ||
56 | virtual void keyPressEvent ( QKeyEvent *e ); | ||
57 | virtual void keyReleaseEvent ( QKeyEvent *e ); | ||
58 | |||
59 | private: | ||
60 | buttoninfo *buttonInfoForKeycode ( ushort key ); | ||
61 | |||
62 | void edit ( buttoninfo *bi, bool hold ); | ||
63 | QString qcopToString ( const OQCopMessage &c ); | ||
64 | |||
65 | private: | ||
66 | QTimer *m_timer; | ||
67 | buttoninfo *m_last_button; | ||
68 | |||
69 | QList <buttoninfo> m_infos; | ||
70 | }; | ||
71 | |||
72 | #endif | ||
73 | |||
74 | |||
diff --git a/core/settings/button/buttonutils.cpp b/core/settings/button/buttonutils.cpp new file mode 100644 index 0000000..bb70047 --- a/dev/null +++ b/core/settings/button/buttonutils.cpp | |||
@@ -0,0 +1,119 @@ | |||
1 | #include <stdlib.h> | ||
2 | |||
3 | #include <qapplication.h> | ||
4 | #include <qlistview.h> | ||
5 | #include <qpe/applnk.h> | ||
6 | #include <qpe/mimetype.h> | ||
7 | #include <qpe/resource.h> | ||
8 | |||
9 | #include "buttonutils.h" | ||
10 | |||
11 | using namespace Opie; | ||
12 | |||
13 | struct predef_qcop { | ||
14 | const char *m_text; | ||
15 | const char *m_pixmap; | ||
16 | const char *m_channel; | ||
17 | const char *m_function; | ||
18 | }; | ||
19 | |||
20 | static const predef_qcop predef [] = { | ||
21 | |||
22 | { QT_TRANSLATE_NOOP( "ButtonSettings", "Beam VCard" ), "beam", "QPE/Application/addressbook", "beamBusinessCard()" }, | ||
23 | { QT_TRANSLATE_NOOP( "ButtonSettings", "Send eMail" ), "buttonsettings/mail", "QPE/Application/mail", "newMail()" }, | ||
24 | |||
25 | |||
26 | { QT_TRANSLATE_NOOP( "ButtonSettings", "Toggle Menu" ), "buttonsettings/menu", "QPE/TaskBar", "toggleMenu()" }, | ||
27 | { QT_TRANSLATE_NOOP( "ButtonSettings", "Toggle O-Menu" ), "buttonsettings/omenu", "QPE/TaskBar", "toggleStartMenu()" }, | ||
28 | { QT_TRANSLATE_NOOP( "ButtonSettings", "Show Desktop" ), "home", "QPE/Launcher", "home()" }, | ||
29 | { QT_TRANSLATE_NOOP( "ButtonSettings", "Toggle Recording" ), "buttonsettings/record", "QPE/VMemo", "toggleRecord()" }, | ||
30 | |||
31 | { 0, 0, 0, 0 } | ||
32 | }; | ||
33 | |||
34 | |||
35 | |||
36 | |||
37 | ButtonUtils *ButtonUtils::ButtonUtils::inst ( ) | ||
38 | { | ||
39 | static ButtonUtils *p = 0; | ||
40 | |||
41 | if ( !p ) { | ||
42 | p = new ButtonUtils ( ); | ||
43 | ::atexit ( cleanup ); | ||
44 | } | ||
45 | return p; | ||
46 | } | ||
47 | |||
48 | void ButtonUtils::cleanup ( ) | ||
49 | { | ||
50 | delete inst ( ); | ||
51 | } | ||
52 | |||
53 | ButtonUtils::ButtonUtils ( ) | ||
54 | { | ||
55 | m_apps = new AppLnkSet( MimeType::appsFolderName ( )); | ||
56 | } | ||
57 | |||
58 | ButtonUtils::~ButtonUtils ( ) | ||
59 | { | ||
60 | delete m_apps; | ||
61 | } | ||
62 | |||
63 | qCopInfo ButtonUtils::messageToInfo ( const OQCopMessage &c ) | ||
64 | { | ||
65 | QCString ch = c. channel ( ); | ||
66 | QCString f = c. message ( ); | ||
67 | |||
68 | if ( ch. isNull ( )) | ||
69 | return qCopInfo ( qApp-> translate ( "ButtonSettings", "<nobr>Ignored</nobr>" )); | ||
70 | |||
71 | for ( const predef_qcop *p = predef; p-> m_text; p++ ) { | ||
72 | if (( ch == p-> m_channel ) && ( f == p-> m_function )) | ||
73 | return qCopInfo ( qApp-> translate ( "ButtonSettings", p-> m_text ), Resource::loadPixmap ( p-> m_pixmap )); | ||
74 | } | ||
75 | |||
76 | if ( ch. left ( 16 ) == "QPE/Application/" ) { | ||
77 | QString app = ch. mid ( 16 ); | ||
78 | const AppLnk *applnk = m_apps-> findExec ( app ); | ||
79 | if ( applnk ) | ||
80 | app = applnk-> name ( ); | ||
81 | |||
82 | if (( f == "raise()" ) || ( f == "nextView()" )) | ||
83 | return qCopInfo ( qApp-> translate ( "ButtonSettings", "<nobr>Show <b>%1</b></nobr>" ). arg ( app ), applnk ? applnk-> pixmap ( ) : QPixmap ( )); | ||
84 | else | ||
85 | return qCopInfo ( qApp-> translate ( "ButtonSettings", "<nobr>Call <b>%1</b>: <i>%2</i></nobr>" ). arg ( app ). arg ( f ), applnk ? applnk-> pixmap ( ) : QPixmap ( )); | ||
86 | } | ||
87 | else { | ||
88 | return qCopInfo ( qApp-> translate ( "ButtonSettings", "<nobr>Call <b>%1</b> <i>%2</i></nobr>" ). arg (( ch. left ( 4 ) == "QPE/" ) ? ch. mid ( 4 ) : ch ). arg ( f )); | ||
89 | } | ||
90 | } | ||
91 | |||
92 | |||
93 | void ButtonUtils::insertActions ( QListViewItem *here ) | ||
94 | { | ||
95 | for ( const predef_qcop *p = predef; p-> m_text; p++ ) { | ||
96 | QListViewItem *item = new QListViewItem ( here, qApp-> translate ( "ButtonSettings", p-> m_text ), p-> m_channel, p-> m_function ); | ||
97 | item-> setPixmap ( 0, Resource::loadPixmap ( p-> m_pixmap )); | ||
98 | } | ||
99 | } | ||
100 | |||
101 | |||
102 | void ButtonUtils::insertAppLnks ( QListViewItem *here ) | ||
103 | { | ||
104 | QStringList types = m_apps-> types ( ); | ||
105 | |||
106 | for ( QStringList::Iterator it = types. begin ( ); it != types. end ( ); ++it ) { | ||
107 | QListViewItem *item = new QListViewItem ( here, m_apps-> typeName ( *it )); | ||
108 | item-> setPixmap ( 0, m_apps-> typePixmap ( *it )); | ||
109 | |||
110 | for ( QListIterator <AppLnk> appit ( m_apps-> children ( )); *appit; ++appit ) { | ||
111 | AppLnk *l = *appit; | ||
112 | |||
113 | if ( l-> type ( ) == *it ) { | ||
114 | QListViewItem *sub = new QListViewItem ( item, l-> name ( ), QString ( "QPE/Application/" ) + l-> exec ( ), "raise()" ); | ||
115 | sub-> setPixmap ( 0, l-> pixmap ( )); | ||
116 | } | ||
117 | } | ||
118 | } | ||
119 | } | ||
diff --git a/core/settings/button/buttonutils.h b/core/settings/button/buttonutils.h new file mode 100644 index 0000000..5ea59bb --- a/dev/null +++ b/core/settings/button/buttonutils.h | |||
@@ -0,0 +1,67 @@ | |||
1 | /* | ||
2 | =. This file is part of the OPIE Project | ||
3 | .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> | ||
4 | .>+-= | ||
5 | _;:, .> :=|. This file is free software; you can | ||
6 | .> <`_, > . <= redistribute it and/or modify it under | ||
7 | :`=1 )Y*s>-.-- : the terms of the GNU General Public | ||
8 | .="- .-=="i, .._ License as published by the Free Software | ||
9 | - . .-<_> .<> Foundation; either version 2 of the License, | ||
10 | ._= =} : or (at your option) any later version. | ||
11 | .%`+i> _;_. | ||
12 | .i_,=:_. -<s. This file is distributed in the hope that | ||
13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | ||
14 | : .. .:, . . . without even the implied warranty of | ||
15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | ||
16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU General | ||
17 | ..}^=.= = ; Public License for more details. | ||
18 | ++= -. .` .: | ||
19 | : = ...= . :.=- You should have received a copy of the GNU | ||
20 | -. .:....=;==+<; General Public License along with this file; | ||
21 | -_. . . )=. = see the file COPYING. If not, write to the | ||
22 | -- :-=` Free Software Foundation, Inc., | ||
23 | 59 Temple Place - Suite 330, | ||
24 | Boston, MA 02111-1307, USA. | ||
25 | |||
26 | */ | ||
27 | |||
28 | #ifndef __BUTTON_UTILS_H__ | ||
29 | #define __BUTTON_UTILS_H__ | ||
30 | |||
31 | #include <opie/odevicebutton.h> | ||
32 | |||
33 | class AppLnkSet; | ||
34 | class QListViewItem; | ||
35 | |||
36 | |||
37 | class qCopInfo { | ||
38 | public: | ||
39 | qCopInfo ( const QString &str, const QPixmap &pix = QPixmap ( )) | ||
40 | : m_name ( str ), m_icon ( pix ) | ||
41 | { } | ||
42 | |||
43 | QString m_name; | ||
44 | QPixmap m_icon; | ||
45 | }; | ||
46 | |||
47 | |||
48 | class ButtonUtils { | ||
49 | public: | ||
50 | ~ButtonUtils ( ); | ||
51 | |||
52 | static ButtonUtils *inst ( ); | ||
53 | |||
54 | qCopInfo messageToInfo ( const Opie::OQCopMessage & ); | ||
55 | |||
56 | void insertActions ( QListViewItem *here ); | ||
57 | void insertAppLnks ( QListViewItem *here ); | ||
58 | |||
59 | private: | ||
60 | ButtonUtils ( ); | ||
61 | static void cleanup ( ); | ||
62 | |||
63 | private: | ||
64 | AppLnkSet *m_apps; | ||
65 | }; | ||
66 | |||
67 | #endif | ||
diff --git a/core/settings/button/config.in b/core/settings/button/config.in new file mode 100644 index 0000000..6f466f5 --- a/dev/null +++ b/core/settings/button/config.in | |||
@@ -0,0 +1,4 @@ | |||
1 | config BUTTON-SETTINGS | ||
2 | boolean "buttons" | ||
3 | default "y" | ||
4 | depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE | ||
diff --git a/core/settings/button/main.cpp b/core/settings/button/main.cpp new file mode 100644 index 0000000..db274f8 --- a/dev/null +++ b/core/settings/button/main.cpp | |||
@@ -0,0 +1,43 @@ | |||
1 | /* | ||
2 | =. This file is part of the OPIE Project | ||
3 | .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> | ||
4 | .>+-= | ||
5 | _;:, .> :=|. This file is free software; you can | ||
6 | .> <`_, > . <= redistribute it and/or modify it under | ||
7 | :`=1 )Y*s>-.-- : the terms of the GNU General Public | ||
8 | .="- .-=="i, .._ License as published by the Free Software | ||
9 | - . .-<_> .<> Foundation; either version 2 of the License, | ||
10 | ._= =} : or (at your option) any later version. | ||
11 | .%`+i> _;_. | ||
12 | .i_,=:_. -<s. This file is distributed in the hope that | ||
13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | ||
14 | : .. .:, . . . without even the implied warranty of | ||
15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | ||
16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU General | ||
17 | ..}^=.= = ; Public License for more details. | ||
18 | ++= -. .` .: | ||
19 | : = ...= . :.=- You should have received a copy of the GNU | ||
20 | -. .:....=;==+<; General Public License along with this file; | ||
21 | -_. . . )=. = see the file COPYING. If not, write to the | ||
22 | -- :-=` Free Software Foundation, Inc., | ||
23 | 59 Temple Place - Suite 330, | ||
24 | Boston, MA 02111-1307, USA. | ||
25 | |||
26 | */ | ||
27 | |||
28 | #include "buttonsettings.h" | ||
29 | |||
30 | #include <qpe/qpeapplication.h> | ||
31 | |||
32 | |||
33 | int main ( int argc, char** argv ) | ||
34 | { | ||
35 | QPEApplication a ( argc,argv ); | ||
36 | |||
37 | ButtonSettings dlg; | ||
38 | a. showMainWidget ( &dlg ); | ||
39 | dlg. showMaximized ( ); | ||
40 | |||
41 | return a. exec ( ); | ||
42 | } | ||
43 | |||
diff --git a/core/settings/button/opiebutton-settings.control b/core/settings/button/opiebutton-settings.control new file mode 100644 index 0000000..a2b8115 --- a/dev/null +++ b/core/settings/button/opiebutton-settings.control | |||
@@ -0,0 +1,9 @@ | |||
1 | Files: bin/buttonsettings apps/Settings/Button.desktop pics/buttonsettings/*.png | ||
2 | Priority: optional | ||
3 | Section: opie/settings | ||
4 | Maintainer: Robert Griebl <sandman@handhelds.org> | ||
5 | Architecture: arm | ||
6 | Version: $QPE_VERSION-$SUB_VERSION | ||
7 | Depends: opie-base ($QPE_VERSION) | ||
8 | Description: Device-buttons settings dialog | ||
9 | For the Opie environment. | ||
diff --git a/core/settings/button/remapdlg.cpp b/core/settings/button/remapdlg.cpp new file mode 100644 index 0000000..511d0e7 --- a/dev/null +++ b/core/settings/button/remapdlg.cpp | |||
@@ -0,0 +1,119 @@ | |||
1 | #include <qlistview.h> | ||
2 | #include <qlabel.h> | ||
3 | #include <qcombobox.h> | ||
4 | |||
5 | #include "remapdlg.h" | ||
6 | #include "buttonutils.h" | ||
7 | |||
8 | using namespace Opie; | ||
9 | |||
10 | class NoSortItem : public QListViewItem { | ||
11 | public: | ||
12 | NoSortItem ( QListView *lv, uint pos, const QString &str, const QCString &s1 = 0, const QCString &s2 = 0 ) | ||
13 | : QListViewItem ( lv, str, s1, s2 ) | ||
14 | { | ||
15 | m_key = QString ( QChar ( 'a' + pos )); | ||
16 | m_def = false; | ||
17 | } | ||
18 | |||
19 | void setDefault ( bool b ) | ||
20 | { | ||
21 | m_def = b; | ||
22 | } | ||
23 | |||
24 | virtual QString key ( int /*column*/, bool /*ascending*/ ) const | ||
25 | { | ||
26 | return m_key; | ||
27 | } | ||
28 | |||
29 | virtual void paintCell ( QPainter * p, const QColorGroup & cg, int column, int width, int align ) | ||
30 | { | ||
31 | if ( m_def ) { | ||
32 | QFont f ( listView ( )-> font ( )); | ||
33 | f. setBold ( true ); | ||
34 | p-> setFont ( f ); | ||
35 | } | ||
36 | QListViewItem::paintCell ( p, cg, column, width, align ); | ||
37 | } | ||
38 | |||
39 | private: | ||
40 | QString m_key; | ||
41 | bool m_def; | ||
42 | }; | ||
43 | |||
44 | |||
45 | RemapDlg::RemapDlg ( const Opie::ODeviceButton *b, bool hold, QWidget *parent, const char *name ) | ||
46 | : RemapDlgBase ( parent, name, true, WStyle_ContextHelp ) | ||
47 | { | ||
48 | setCaption ( tr( "%1 %2", "(hold|press) buttoname" ). arg( hold ? tr( "Held" ) : tr( "Pressed" )). arg ( b-> userText ( ))); | ||
49 | |||
50 | m_msg = hold ? b-> heldAction ( ) : b-> pressedAction ( ); | ||
51 | m_msg_preset = hold ? b-> factoryPresetHeldAction ( ) : b-> factoryPresetPressedAction ( ); | ||
52 | |||
53 | m_map_none = new NoSortItem ( w_list, 0, tr( "No mapping" )); | ||
54 | m_map_preset = new NoSortItem ( w_list, 1, tr( "Default" ), m_msg_preset. channel ( ), m_msg_preset. message ( )); | ||
55 | ((NoSortItem *) m_map_preset )-> setDefault ( true ); | ||
56 | m_map_custom = new NoSortItem ( w_list, 2, tr( "Custom" ), m_msg. channel ( ), m_msg. message ( )); | ||
57 | |||
58 | QListViewItem *it = new NoSortItem ( w_list, 3, tr( "Actions" )); | ||
59 | ButtonUtils::inst ( )-> insertActions ( it ); | ||
60 | it-> setOpen ( true ); | ||
61 | |||
62 | it = new NoSortItem ( w_list, 4, tr( "Show" )); | ||
63 | ButtonUtils::inst ( )-> insertAppLnks ( it ); | ||
64 | |||
65 | m_current = m_map_custom; | ||
66 | w_list-> setCurrentItem ( m_current ); | ||
67 | |||
68 | static const char * const def_channels [] = { | ||
69 | "QPE/Application/", "QPE/Launcher", "QPE/System", "QPE/TaskBar", "QPE/", 0 | ||
70 | }; | ||
71 | |||
72 | w_channel-> insertStrList ((const char **) def_channels ); | ||
73 | } | ||
74 | |||
75 | RemapDlg::~RemapDlg ( ) | ||
76 | { | ||
77 | } | ||
78 | |||
79 | void RemapDlg::itemChanged ( QListViewItem *it ) | ||
80 | { | ||
81 | bool enabled = false; | ||
82 | OQCopMessage m; | ||
83 | |||
84 | m_current = it; | ||
85 | |||
86 | if ( it == m_map_none ) | ||
87 | m_msg = m = OQCopMessage ( 0, 0 ); | ||
88 | else if ( it == m_map_preset ) | ||
89 | m_msg = m = m_msg_preset; | ||
90 | else if ( it && !it-> childCount ( )) { | ||
91 | enabled = ( it == m_map_custom ); | ||
92 | m_msg = m = OQCopMessage ( it-> text ( 1 ). latin1 ( ), it-> text ( 2 ). latin1 ( )); | ||
93 | } | ||
94 | |||
95 | w_channel-> setEnabled ( enabled ); | ||
96 | w_message-> setEnabled ( enabled ); | ||
97 | |||
98 | w_channel-> setEditText ( m. channel ( )); | ||
99 | w_message-> setEditText ( m. message ( )); | ||
100 | } | ||
101 | |||
102 | void RemapDlg::textChanged ( const QString &str ) | ||
103 | { | ||
104 | if ( !m_current ) | ||
105 | return; | ||
106 | |||
107 | QComboBox *which = (QComboBox *) sender ( ); | ||
108 | |||
109 | if ( which == w_channel ) | ||
110 | m_current-> setText ( 1, str ); | ||
111 | else if ( which == w_message ) | ||
112 | m_current-> setText ( 2, str ); | ||
113 | } | ||
114 | |||
115 | OQCopMessage RemapDlg::message ( ) | ||
116 | { | ||
117 | return m_msg; | ||
118 | } | ||
119 | |||
diff --git a/core/settings/button/remapdlg.h b/core/settings/button/remapdlg.h new file mode 100644 index 0000000..8c9cc02 --- a/dev/null +++ b/core/settings/button/remapdlg.h | |||
@@ -0,0 +1,35 @@ | |||
1 | #ifndef __REMAPDLG_H__ | ||
2 | #define __REMAPDLG_H__ | ||
3 | |||
4 | #include <opie/odevicebutton.h> | ||
5 | |||
6 | #include "remapdlgbase.h" | ||
7 | |||
8 | class QListViewItem; | ||
9 | |||
10 | |||
11 | class RemapDlg : public RemapDlgBase { | ||
12 | Q_OBJECT | ||
13 | |||
14 | public: | ||
15 | RemapDlg ( const Opie::ODeviceButton *b, bool hold, QWidget* parent = 0, const char* name = 0 ); | ||
16 | ~RemapDlg ( ); | ||
17 | |||
18 | Opie::OQCopMessage message ( ); | ||
19 | |||
20 | public slots: | ||
21 | virtual void itemChanged ( QListViewItem * ); | ||
22 | virtual void textChanged ( const QString & ); | ||
23 | |||
24 | private: | ||
25 | Opie::OQCopMessage m_msg; | ||
26 | Opie::OQCopMessage m_msg_preset; | ||
27 | |||
28 | QListViewItem *m_current; | ||
29 | |||
30 | QListViewItem *m_map_none; | ||
31 | QListViewItem *m_map_preset; | ||
32 | QListViewItem *m_map_custom; | ||
33 | }; | ||
34 | |||
35 | #endif | ||
diff --git a/core/settings/button/remapdlgbase.ui b/core/settings/button/remapdlgbase.ui new file mode 100644 index 0000000..1f0a243 --- a/dev/null +++ b/core/settings/button/remapdlgbase.ui | |||
@@ -0,0 +1,224 @@ | |||
1 | <!DOCTYPE UI><UI> | ||
2 | <class>RemapDlgBase</class> | ||
3 | <widget> | ||
4 | <class>QDialog</class> | ||
5 | <property stdset="1"> | ||
6 | <name>name</name> | ||
7 | <cstring>RemapDlgBase</cstring> | ||
8 | </property> | ||
9 | <property stdset="1"> | ||
10 | <name>geometry</name> | ||
11 | <rect> | ||
12 | <x>0</x> | ||
13 | <y>0</y> | ||
14 | <width>239</width> | ||
15 | <height>367</height> | ||
16 | </rect> | ||
17 | </property> | ||
18 | <property stdset="1"> | ||
19 | <name>caption</name> | ||
20 | <string>RemapDlgBase</string> | ||
21 | </property> | ||
22 | <property> | ||
23 | <name>layoutMargin</name> | ||
24 | </property> | ||
25 | <property> | ||
26 | <name>layoutSpacing</name> | ||
27 | </property> | ||
28 | <vbox> | ||
29 | <property stdset="1"> | ||
30 | <name>margin</name> | ||
31 | <number>3</number> | ||
32 | </property> | ||
33 | <property stdset="1"> | ||
34 | <name>spacing</name> | ||
35 | <number>3</number> | ||
36 | </property> | ||
37 | <widget> | ||
38 | <class>QListView</class> | ||
39 | <column> | ||
40 | <property> | ||
41 | <name>text</name> | ||
42 | <string>Action</string> | ||
43 | </property> | ||
44 | <property> | ||
45 | <name>clickable</name> | ||
46 | <bool>true</bool> | ||
47 | </property> | ||
48 | <property> | ||
49 | <name>resizeable</name> | ||
50 | <bool>true</bool> | ||
51 | </property> | ||
52 | </column> | ||
53 | <column> | ||
54 | <property> | ||
55 | <name>text</name> | ||
56 | <string>Channel</string> | ||
57 | </property> | ||
58 | <property> | ||
59 | <name>clickable</name> | ||
60 | <bool>true</bool> | ||
61 | </property> | ||
62 | <property> | ||
63 | <name>resizeable</name> | ||
64 | <bool>true</bool> | ||
65 | </property> | ||
66 | </column> | ||
67 | <column> | ||
68 | <property> | ||
69 | <name>text</name> | ||
70 | <string>Message</string> | ||
71 | </property> | ||
72 | <property> | ||
73 | <name>clickable</name> | ||
74 | <bool>true</bool> | ||
75 | </property> | ||
76 | <property> | ||
77 | <name>resizeable</name> | ||
78 | <bool>true</bool> | ||
79 | </property> | ||
80 | </column> | ||
81 | <property stdset="1"> | ||
82 | <name>name</name> | ||
83 | <cstring>w_list</cstring> | ||
84 | </property> | ||
85 | <property stdset="1"> | ||
86 | <name>allColumnsShowFocus</name> | ||
87 | <bool>true</bool> | ||
88 | </property> | ||
89 | <property stdset="1"> | ||
90 | <name>showSortIndicator</name> | ||
91 | <bool>false</bool> | ||
92 | </property> | ||
93 | <property stdset="1"> | ||
94 | <name>rootIsDecorated</name> | ||
95 | <bool>true</bool> | ||
96 | </property> | ||
97 | </widget> | ||
98 | <widget> | ||
99 | <class>QLayoutWidget</class> | ||
100 | <property stdset="1"> | ||
101 | <name>name</name> | ||
102 | <cstring>Layout1</cstring> | ||
103 | </property> | ||
104 | <property> | ||
105 | <name>layoutSpacing</name> | ||
106 | </property> | ||
107 | <grid> | ||
108 | <property stdset="1"> | ||
109 | <name>margin</name> | ||
110 | <number>0</number> | ||
111 | </property> | ||
112 | <property stdset="1"> | ||
113 | <name>spacing</name> | ||
114 | <number>3</number> | ||
115 | </property> | ||
116 | <widget row="0" column="1" > | ||
117 | <class>QComboBox</class> | ||
118 | <property stdset="1"> | ||
119 | <name>name</name> | ||
120 | <cstring>w_channel</cstring> | ||
121 | </property> | ||
122 | <property stdset="1"> | ||
123 | <name>enabled</name> | ||
124 | <bool>false</bool> | ||
125 | </property> | ||
126 | <property stdset="1"> | ||
127 | <name>sizePolicy</name> | ||
128 | <sizepolicy> | ||
129 | <hsizetype>3</hsizetype> | ||
130 | <vsizetype>0</vsizetype> | ||
131 | </sizepolicy> | ||
132 | </property> | ||
133 | <property stdset="1"> | ||
134 | <name>editable</name> | ||
135 | <bool>true</bool> | ||
136 | </property> | ||
137 | <property stdset="1"> | ||
138 | <name>autoCompletion</name> | ||
139 | <bool>true</bool> | ||
140 | </property> | ||
141 | <property stdset="1"> | ||
142 | <name>duplicatesEnabled</name> | ||
143 | <bool>false</bool> | ||
144 | </property> | ||
145 | </widget> | ||
146 | <widget row="1" column="0" > | ||
147 | <class>QLabel</class> | ||
148 | <property stdset="1"> | ||
149 | <name>name</name> | ||
150 | <cstring>xxxxx</cstring> | ||
151 | </property> | ||
152 | <property stdset="1"> | ||
153 | <name>text</name> | ||
154 | <string>Message</string> | ||
155 | </property> | ||
156 | </widget> | ||
157 | <widget row="1" column="1" > | ||
158 | <class>QComboBox</class> | ||
159 | <property stdset="1"> | ||
160 | <name>name</name> | ||
161 | <cstring>w_message</cstring> | ||
162 | </property> | ||
163 | <property stdset="1"> | ||
164 | <name>enabled</name> | ||
165 | <bool>false</bool> | ||
166 | </property> | ||
167 | <property stdset="1"> | ||
168 | <name>sizePolicy</name> | ||
169 | <sizepolicy> | ||
170 | <hsizetype>3</hsizetype> | ||
171 | <vsizetype>0</vsizetype> | ||
172 | </sizepolicy> | ||
173 | </property> | ||
174 | <property stdset="1"> | ||
175 | <name>editable</name> | ||
176 | <bool>true</bool> | ||
177 | </property> | ||
178 | <property stdset="1"> | ||
179 | <name>autoCompletion</name> | ||
180 | <bool>true</bool> | ||
181 | </property> | ||
182 | <property stdset="1"> | ||
183 | <name>duplicatesEnabled</name> | ||
184 | <bool>false</bool> | ||
185 | </property> | ||
186 | </widget> | ||
187 | <widget row="0" column="0" > | ||
188 | <class>QLabel</class> | ||
189 | <property stdset="1"> | ||
190 | <name>name</name> | ||
191 | <cstring>yyyyyy</cstring> | ||
192 | </property> | ||
193 | <property stdset="1"> | ||
194 | <name>text</name> | ||
195 | <string>Channel</string> | ||
196 | </property> | ||
197 | </widget> | ||
198 | </grid> | ||
199 | </widget> | ||
200 | </vbox> | ||
201 | </widget> | ||
202 | <connections> | ||
203 | <connection> | ||
204 | <sender>w_list</sender> | ||
205 | <signal>selectionChanged(QListViewItem*)</signal> | ||
206 | <receiver>RemapDlgBase</receiver> | ||
207 | <slot>itemChanged(QListViewItem *)</slot> | ||
208 | </connection> | ||
209 | <connection> | ||
210 | <sender>w_message</sender> | ||
211 | <signal>textChanged(const QString&)</signal> | ||
212 | <receiver>RemapDlgBase</receiver> | ||
213 | <slot>textChanged(const QString &)</slot> | ||
214 | </connection> | ||
215 | <connection> | ||
216 | <sender>w_channel</sender> | ||
217 | <signal>textChanged(const QString&)</signal> | ||
218 | <receiver>RemapDlgBase</receiver> | ||
219 | <slot>textChanged(const QString &)</slot> | ||
220 | </connection> | ||
221 | <slot access="public">textChanged(const QString &)</slot> | ||
222 | <slot access="public">itemChanged(QListViewItem *)</slot> | ||
223 | </connections> | ||
224 | </UI> | ||