-rw-r--r-- | noncore/settings/packagemanager/oconfitem.cpp | 47 | ||||
-rw-r--r-- | noncore/settings/packagemanager/oconfitem.h | 14 | ||||
-rw-r--r-- | noncore/settings/packagemanager/oipkg.cpp | 17 | ||||
-rw-r--r-- | noncore/settings/packagemanager/oipkgconfigdlg.cpp | 15 |
4 files changed, 57 insertions, 36 deletions
diff --git a/noncore/settings/packagemanager/oconfitem.cpp b/noncore/settings/packagemanager/oconfitem.cpp index a90730c..ffa936e 100644 --- a/noncore/settings/packagemanager/oconfitem.cpp +++ b/noncore/settings/packagemanager/oconfitem.cpp | |||
@@ -1,41 +1,42 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of the Opie Project | 2 | This file is part of the Opie Project |
3 | 3 | ||
4 | Copyright (c) 2003 Dan Williams <drw@handhelds.org> | 4 | Copyright (c) 2003 Dan Williams <drw@handhelds.org> |
5 | =. | 5 | =. |
6 | .=l. | 6 | .=l. |
7 | .>+-= | 7 | .>+-= |
8 | _;:, .> :=|. This program is free software; you can | 8 | _;:, .> :=|. This program is free software; you can |
9 | .> <`_, > . <= redistribute it and/or modify it under | 9 | .> <`_, > . <= redistribute it and/or modify it under |
10 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | 10 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public |
11 | .="- .-=="i, .._ License as published by the Free Software | 11 | .="- .-=="i, .._ License as published by the Free Software |
12 | - . .-<_> .<> Foundation; either version 2 of the License, | 12 | - . .-<_> .<> Foundation; either version 2 of the License, |
13 | ._= =} : or (at your option) any later version. | 13 | ._= =} : or (at your option) any later version. |
14 | .%`+i> _;_. | 14 | .%`+i> _;_. |
15 | .i_,=:_. -<s. This program is distributed in the hope that | 15 | .i_,=:_. -<s. This program is distributed in the hope that |
16 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 16 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
17 | : .. .:, . . . without even the implied warranty of | 17 | : .. .:, . . . without even the implied warranty of |
18 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 18 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
19 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | 19 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
20 | ..}^=.= = ; Library General Public License for more | 20 | ..}^=.= = ; Library General Public License for more |
21 | ++= -. .` .: details. | 21 | ++= -. .` .: details. |
22 | : = ...= . :.=- | 22 | : = ...= . :.=- |
23 | -. .:....=;==+<; You should have received a copy of the GNU | 23 | -. .:....=;==+<; You should have received a copy of the GNU |
24 | -_. . . )=. = Library General Public License along with | 24 | -_. . . )=. = Library General Public License along with |
25 | -- :-=` this library; see the file COPYING.LIB. | 25 | -- :-=` this library; see the file COPYING.LIB. |
26 | If not, write to the Free Software Foundation, | 26 | If not, write to the Free Software Foundation, |
27 | Inc., 59 Temple Place - Suite 330, | 27 | Inc., 59 Temple Place - Suite 330, |
28 | Boston, MA 02111-1307, USA. | 28 | Boston, MA 02111-1307, USA. |
29 | 29 | ||
30 | */ | 30 | */ |
31 | 31 | ||
32 | #include "oconfitem.h" | 32 | #include "oconfitem.h" |
33 | 33 | ||
34 | OConfItem::OConfItem( Type type, const QString &name, | 34 | OConfItem::OConfItem( Type type, const QString &name, const QString &value, |
35 | const QString &value, bool active ) | 35 | const QString &features, bool active ) |
36 | : m_type( type ) | 36 | : m_type( type ) |
37 | , m_name( name ) | 37 | , m_name( name ) |
38 | , m_value( value ) | 38 | , m_value( value ) |
39 | , m_features( features ) | ||
39 | , m_active( active ) | 40 | , m_active( active ) |
40 | { | 41 | { |
41 | } | 42 | } |
diff --git a/noncore/settings/packagemanager/oconfitem.h b/noncore/settings/packagemanager/oconfitem.h index 7c158c9..9972c00 100644 --- a/noncore/settings/packagemanager/oconfitem.h +++ b/noncore/settings/packagemanager/oconfitem.h | |||
@@ -1,92 +1,96 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of the Opie Project | 2 | This file is part of the Opie Project |
3 | 3 | ||
4 | Copyright (c) 2003 Dan Williams <drw@handhelds.org> | 4 | Copyright (c) 2003 Dan Williams <drw@handhelds.org> |
5 | =. | 5 | =. |
6 | .=l. | 6 | .=l. |
7 | .>+-= | 7 | .>+-= |
8 | _;:, .> :=|. This program is free software; you can | 8 | _;:, .> :=|. This program is free software; you can |
9 | .> <`_, > . <= redistribute it and/or modify it under | 9 | .> <`_, > . <= redistribute it and/or modify it under |
10 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | 10 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public |
11 | .="- .-=="i, .._ License as published by the Free Software | 11 | .="- .-=="i, .._ License as published by the Free Software |
12 | - . .-<_> .<> Foundation; either version 2 of the License, | 12 | - . .-<_> .<> Foundation; either version 2 of the License, |
13 | ._= =} : or (at your option) any later version. | 13 | ._= =} : or (at your option) any later version. |
14 | .%`+i> _;_. | 14 | .%`+i> _;_. |
15 | .i_,=:_. -<s. This program is distributed in the hope that | 15 | .i_,=:_. -<s. This program is distributed in the hope that |
16 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 16 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
17 | : .. .:, . . . without even the implied warranty of | 17 | : .. .:, . . . without even the implied warranty of |
18 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 18 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
19 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | 19 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
20 | ..}^=.= = ; Library General Public License for more | 20 | ..}^=.= = ; Library General Public License for more |
21 | ++= -. .` .: details. | 21 | ++= -. .` .: details. |
22 | : = ...= . :.=- | 22 | : = ...= . :.=- |
23 | -. .:....=;==+<; You should have received a copy of the GNU | 23 | -. .:....=;==+<; You should have received a copy of the GNU |
24 | -_. . . )=. = Library General Public License along with | 24 | -_. . . )=. = Library General Public License along with |
25 | -- :-=` this library; see the file COPYING.LIB. | 25 | -- :-=` this library; see the file COPYING.LIB. |
26 | If not, write to the Free Software Foundation, | 26 | If not, write to the Free Software Foundation, |
27 | Inc., 59 Temple Place - Suite 330, | 27 | Inc., 59 Temple Place - Suite 330, |
28 | Boston, MA 02111-1307, USA. | 28 | Boston, MA 02111-1307, USA. |
29 | 29 | ||
30 | */ | 30 | */ |
31 | 31 | ||
32 | #ifndef OCONFITEM_H | 32 | #ifndef OCONFITEM_H |
33 | #define OCONFITEM_H | 33 | #define OCONFITEM_H |
34 | 34 | ||
35 | #include <qlist.h> | 35 | #include <qlist.h> |
36 | #include <qstring.h> | 36 | #include <qstring.h> |
37 | 37 | ||
38 | class OConfItem | 38 | class OConfItem |
39 | { | 39 | { |
40 | public: | 40 | public: |
41 | enum Type { Source, Destination, Option, Arch, NotDefined }; | 41 | enum Type { Source, Destination, Option, Arch, NotDefined }; |
42 | 42 | ||
43 | OConfItem( Type type = NotDefined, const QString &name = QString::null, | 43 | OConfItem( Type type = NotDefined, const QString &name = QString::null, |
44 | const QString &value = QString::null, bool active = true ); | 44 | const QString &value = QString::null, const QString &features = QString::null, |
45 | bool active = true ); | ||
45 | 46 | ||
46 | Type type() { return m_type; } | 47 | Type type() { return m_type; } |
47 | const QString &name() { return m_name; } | 48 | const QString &name() { return m_name; } |
48 | const QString &value() { return m_value; } | 49 | const QString &value() { return m_value; } |
50 | const QString &features() { return m_features; } | ||
49 | bool active() { return m_active; } | 51 | bool active() { return m_active; } |
50 | 52 | ||
51 | void setType( Type type ) { m_type = type; } | 53 | void setType( Type type ) { m_type = type; } |
52 | void setName( const QString &name ) { m_name = name; } | 54 | void setName( const QString &name ) { m_name = name; } |
53 | void setValue( const QString &value ) { m_value = value; } | 55 | void setValue( const QString &value ) { m_value = value; } |
54 | void setActive( bool active ) { m_active = active; } | 56 | void setFeatures( const QString &features ) { m_features = features; } |
57 | void setActive( bool active ) { m_active = active; } | ||
55 | 58 | ||
56 | private: | 59 | private: |
57 | Type m_type; // Type of configuration item | 60 | Type m_type; // Type of configuration item |
58 | QString m_name; // Name of item | 61 | QString m_name; // Name of item |
59 | QString m_value; // Value of item | 62 | QString m_value; // Value of item |
63 | QString m_features; // Comma-deliminated list of features this item supports | ||
60 | bool m_active; // Indicates whether item is currently active | 64 | bool m_active; // Indicates whether item is currently active |
61 | }; | 65 | }; |
62 | 66 | ||
63 | class OConfItemList : public QList<OConfItem> | 67 | class OConfItemList : public QList<OConfItem> |
64 | { | 68 | { |
65 | private: | 69 | private: |
66 | 70 | ||
67 | int compareItems( QCollection::Item item1, QCollection::Item item2 ) | 71 | int compareItems( QCollection::Item item1, QCollection::Item item2 ) |
68 | { | 72 | { |
69 | // Sort by OConfItem location then by type | 73 | // Sort by OConfItem location then by type |
70 | OConfItem::Type type1 = reinterpret_cast<OConfItem*>(item1)->type(); | 74 | OConfItem::Type type1 = reinterpret_cast<OConfItem*>(item1)->type(); |
71 | OConfItem::Type type2 = reinterpret_cast<OConfItem*>(item2)->type(); | 75 | OConfItem::Type type2 = reinterpret_cast<OConfItem*>(item2)->type(); |
72 | if ( type1 < type2 ) | 76 | if ( type1 < type2 ) |
73 | return -1; | 77 | return -1; |
74 | else if ( type1 == type2 ) | 78 | else if ( type1 == type2 ) |
75 | { | 79 | { |
76 | QString name1 = reinterpret_cast<OConfItem*>(item1)->name(); | 80 | QString name1 = reinterpret_cast<OConfItem*>(item1)->name(); |
77 | QString name2 = reinterpret_cast<OConfItem*>(item2)->name(); | 81 | QString name2 = reinterpret_cast<OConfItem*>(item2)->name(); |
78 | if ( name1 < name2 ) | 82 | if ( name1 < name2 ) |
79 | return -1; | 83 | return -1; |
80 | else if ( name1 == name2 ) | 84 | else if ( name1 == name2 ) |
81 | return 0; | 85 | return 0; |
82 | else /*if ( name1 > name2 )*/ | 86 | else /*if ( name1 > name2 )*/ |
83 | return 1; | 87 | return 1; |
84 | } | 88 | } |
85 | else /*if ( type1 > type2 )*/ | 89 | else /*if ( type1 > type2 )*/ |
86 | return 1; | 90 | return 1; |
87 | } | 91 | } |
88 | }; | 92 | }; |
89 | 93 | ||
90 | typedef QListIterator<OConfItem> OConfItemListIterator; | 94 | typedef QListIterator<OConfItem> OConfItemListIterator; |
91 | 95 | ||
92 | #endif | 96 | #endif |
diff --git a/noncore/settings/packagemanager/oipkg.cpp b/noncore/settings/packagemanager/oipkg.cpp index b0cc94d..a66bd51 100644 --- a/noncore/settings/packagemanager/oipkg.cpp +++ b/noncore/settings/packagemanager/oipkg.cpp | |||
@@ -108,97 +108,104 @@ OConfItemList *OIpkg::configItems() | |||
108 | } | 108 | } |
109 | 109 | ||
110 | OConfItemList *OIpkg::servers() | 110 | OConfItemList *OIpkg::servers() |
111 | { | 111 | { |
112 | // Retrieve only servers | 112 | // Retrieve only servers |
113 | return filterConfItems( OConfItem::Source ); | 113 | return filterConfItems( OConfItem::Source ); |
114 | } | 114 | } |
115 | 115 | ||
116 | OConfItemList *OIpkg::destinations() | 116 | OConfItemList *OIpkg::destinations() |
117 | { | 117 | { |
118 | // Retrieve only destinations | 118 | // Retrieve only destinations |
119 | return filterConfItems( OConfItem::Destination ); | 119 | return filterConfItems( OConfItem::Destination ); |
120 | } | 120 | } |
121 | 121 | ||
122 | OConfItemList *OIpkg::options() | 122 | OConfItemList *OIpkg::options() |
123 | { | 123 | { |
124 | // Retrieve only destinations | 124 | // Retrieve only destinations |
125 | return filterConfItems( OConfItem::Option ); | 125 | return filterConfItems( OConfItem::Option ); |
126 | } | 126 | } |
127 | 127 | ||
128 | void OIpkg::setConfigItems( OConfItemList *configList ) | 128 | void OIpkg::setConfigItems( OConfItemList *configList ) |
129 | { | 129 | { |
130 | if ( m_confInfo ) | 130 | if ( m_confInfo ) |
131 | delete m_confInfo; | 131 | delete m_confInfo; |
132 | 132 | ||
133 | m_confInfo = configList; | 133 | m_confInfo = configList; |
134 | 134 | ||
135 | // Write out new /etc/ipkg.conf | 135 | // Write out new /etc/ipkg.conf |
136 | QFile confFile( IPKG_CONF ); | 136 | QFile confFile( IPKG_CONF ); |
137 | if ( confFile.open( IO_WriteOnly ) ) | 137 | if ( confFile.open( IO_WriteOnly ) ) |
138 | { | 138 | { |
139 | QTextStream confStream( &confFile ); | 139 | QTextStream confStream( &confFile ); |
140 | confStream << "# Generated by Opie Package Manager\n\n"; | 140 | confStream << "# Generated by Opie Package Manager\n\n"; |
141 | 141 | ||
142 | OConfItemListIterator it( *m_confInfo ); | 142 | OConfItemListIterator it( *m_confInfo ); |
143 | for ( ; it.current(); ++it ) | 143 | for ( ; it.current(); ++it ) |
144 | { | 144 | { |
145 | OConfItem *item = it.current(); | 145 | OConfItem *item = it.current(); |
146 | 146 | ||
147 | // Only write out valid conf items | 147 | // Only write out valid conf items |
148 | if ( item->type() != OConfItem::NotDefined ) | 148 | if ( item->type() != OConfItem::NotDefined ) |
149 | { | 149 | { |
150 | QString confLine; | 150 | QString confLine; |
151 | if ( !item->active() ) | 151 | if ( !item->active() ) |
152 | confLine = "#"; | 152 | confLine = "#"; |
153 | 153 | ||
154 | switch ( item->type() ) | 154 | switch ( item->type() ) |
155 | { | 155 | { |
156 | case OConfItem::Source : confLine.append( "src " ); break; | 156 | case OConfItem::Source : |
157 | { | ||
158 | if ( item->features().contains( "Compressed" ) ) | ||
159 | confLine.append( "src/gz " ); | ||
160 | else | ||
161 | confLine.append( "src " ); | ||
162 | } | ||
163 | break; | ||
157 | case OConfItem::Destination : confLine.append( "dest " ); break; | 164 | case OConfItem::Destination : confLine.append( "dest " ); break; |
158 | case OConfItem::Option : confLine.append( "option " ); break; | 165 | case OConfItem::Option : confLine.append( "option " ); break; |
159 | case OConfItem::Arch : confLine.append( "arch " ); break; | 166 | case OConfItem::Arch : confLine.append( "arch " ); break; |
160 | default : break; | 167 | default : break; |
161 | }; | 168 | }; |
162 | 169 | ||
163 | confStream << confLine << " " << item->name() << " " << item->value() << "\n"; | 170 | confStream << confLine << " " << item->name() << " " << item->value() << "\n"; |
164 | } | 171 | } |
165 | } | 172 | } |
166 | 173 | ||
167 | confFile.close(); | 174 | confFile.close(); |
168 | } | 175 | } |
169 | else | 176 | else |
170 | { | 177 | { |
171 | // Problem writing to /etc/ipkg.conf, exit before removing other conf files | 178 | // Problem writing to /etc/ipkg.conf, exit before removing other conf files |
172 | return; | 179 | return; |
173 | } | 180 | } |
174 | 181 | ||
175 | // Delete /etc/ipkg/*.conf files (/etc/ipkg.conf should now have all settings | 182 | // Delete /etc/ipkg/*.conf files (/etc/ipkg.conf should now have all settings |
176 | QStringList confFiles; | 183 | QStringList confFiles; |
177 | QDir confDir( IPKG_CONF_DIR ); | 184 | QDir confDir( IPKG_CONF_DIR ); |
178 | if ( confDir.exists() ) | 185 | if ( confDir.exists() ) |
179 | { | 186 | { |
180 | confDir.setNameFilter( "*.conf" ); | 187 | confDir.setNameFilter( "*.conf" ); |
181 | confDir.setFilter( QDir::Files ); | 188 | confDir.setFilter( QDir::Files ); |
182 | confFiles = confDir.entryList( "*.conf", QDir::Files ); | 189 | confFiles = confDir.entryList( "*.conf", QDir::Files ); |
183 | 190 | ||
184 | QStringList::Iterator lastFile = confFiles.end(); | 191 | QStringList::Iterator lastFile = confFiles.end(); |
185 | for ( QStringList::Iterator it = confFiles.begin(); it != lastFile; ++it ) | 192 | for ( QStringList::Iterator it = confFiles.begin(); it != lastFile; ++it ) |
186 | { | 193 | { |
187 | // Create absolute file path if necessary | 194 | // Create absolute file path if necessary |
188 | QString absFile = (*it); | 195 | QString absFile = (*it); |
189 | if ( !absFile.startsWith( "/" ) ) | 196 | if ( !absFile.startsWith( "/" ) ) |
190 | absFile.prepend( QString( IPKG_CONF_DIR ) + "/" ); | 197 | absFile.prepend( QString( IPKG_CONF_DIR ) + "/" ); |
191 | 198 | ||
192 | // Delete file | 199 | // Delete file |
193 | QFile::remove( absFile ); | 200 | QFile::remove( absFile ); |
194 | } | 201 | } |
195 | } | 202 | } |
196 | 203 | ||
197 | // Reinitialize libipkg to pick up new configuration | 204 | // Reinitialize libipkg to pick up new configuration |
198 | ipkg_deinit( &m_ipkgArgs ); | 205 | ipkg_deinit( &m_ipkgArgs ); |
199 | ipkg_init( &fsignalIpkgMessage, &fIpkgResponse, &m_ipkgArgs ); | 206 | ipkg_init( &fsignalIpkgMessage, &fIpkgResponse, &m_ipkgArgs ); |
200 | m_ipkgArgs.noaction = false; | 207 | m_ipkgArgs.noaction = false; |
201 | m_ipkgArgs.force_defaults = true; | 208 | m_ipkgArgs.force_defaults = true; |
202 | } | 209 | } |
203 | 210 | ||
204 | void OIpkg::saveSettings() | 211 | void OIpkg::saveSettings() |
@@ -463,116 +470,122 @@ void OIpkg::loadConfiguration() | |||
463 | if ( m_confInfo ) | 470 | if ( m_confInfo ) |
464 | delete m_confInfo; | 471 | delete m_confInfo; |
465 | 472 | ||
466 | // Load configuration item list | 473 | // Load configuration item list |
467 | m_confInfo = new OConfItemList(); | 474 | m_confInfo = new OConfItemList(); |
468 | 475 | ||
469 | QStringList confFiles; | 476 | QStringList confFiles; |
470 | QDir confDir( IPKG_CONF_DIR ); | 477 | QDir confDir( IPKG_CONF_DIR ); |
471 | if ( confDir.exists() ) | 478 | if ( confDir.exists() ) |
472 | { | 479 | { |
473 | confDir.setNameFilter( "*.conf" ); | 480 | confDir.setNameFilter( "*.conf" ); |
474 | confDir.setFilter( QDir::Files ); | 481 | confDir.setFilter( QDir::Files ); |
475 | confFiles = confDir.entryList( "*.conf", QDir::Files ); | 482 | confFiles = confDir.entryList( "*.conf", QDir::Files ); |
476 | } | 483 | } |
477 | confFiles << IPKG_CONF; | 484 | confFiles << IPKG_CONF; |
478 | 485 | ||
479 | QStringList::Iterator lastFile = confFiles.end(); | 486 | QStringList::Iterator lastFile = confFiles.end(); |
480 | for ( QStringList::Iterator it = confFiles.begin(); it != lastFile; ++it ) | 487 | for ( QStringList::Iterator it = confFiles.begin(); it != lastFile; ++it ) |
481 | { | 488 | { |
482 | // Create absolute file path if necessary | 489 | // Create absolute file path if necessary |
483 | QString absFile = (*it); | 490 | QString absFile = (*it); |
484 | if ( !absFile.startsWith( "/" ) ) | 491 | if ( !absFile.startsWith( "/" ) ) |
485 | absFile.prepend( QString( IPKG_CONF_DIR ) + "/" ); | 492 | absFile.prepend( QString( IPKG_CONF_DIR ) + "/" ); |
486 | 493 | ||
487 | // Read in file | 494 | // Read in file |
488 | QFile f( absFile ); | 495 | QFile f( absFile ); |
489 | if ( f.open( IO_ReadOnly ) ) | 496 | if ( f.open( IO_ReadOnly ) ) |
490 | { | 497 | { |
491 | QTextStream s( &f ); | 498 | QTextStream s( &f ); |
492 | while ( !s.eof() ) | 499 | while ( !s.eof() ) |
493 | { | 500 | { |
494 | 501 | ||
495 | QString line = s.readLine().simplifyWhiteSpace(); | 502 | QString line = s.readLine().simplifyWhiteSpace(); |
496 | 503 | ||
497 | // Parse line and save info to the conf options list | 504 | // Parse line and save info to the conf options list |
498 | if ( !line.isEmpty() ) | 505 | if ( !line.isEmpty() ) |
499 | { | 506 | { |
500 | if ( !line.startsWith( "#" ) || | 507 | if ( !line.startsWith( "#" ) || |
501 | line.startsWith( "#src" ) || | 508 | line.startsWith( "#src" ) || |
502 | line.startsWith( "#dest" ) || | 509 | line.startsWith( "#dest" ) || |
503 | line.startsWith( "#arch" ) || | 510 | line.startsWith( "#arch" ) || |
504 | line.startsWith( "#option" ) ) | 511 | line.startsWith( "#option" ) ) |
505 | { | 512 | { |
506 | int pos = line.find( ' ', 1 ); | 513 | int pos = line.find( ' ', 1 ); |
507 | 514 | ||
508 | // Type | 515 | // Type |
509 | QString typeStr = line.left( pos ); | 516 | QString typeStr = line.left( pos ); |
510 | OConfItem::Type type; | 517 | OConfItem::Type type; |
518 | QString features; | ||
511 | if ( typeStr == "src" || typeStr == "#src" ) | 519 | if ( typeStr == "src" || typeStr == "#src" ) |
512 | type = OConfItem::Source; | 520 | type = OConfItem::Source; |
521 | else if ( typeStr == "src/gz" || typeStr == "#src/gz" ) | ||
522 | { | ||
523 | type = OConfItem::Source; | ||
524 | features = "Compressed"; | ||
525 | } | ||
513 | else if ( typeStr == "dest" || typeStr == "#dest" ) | 526 | else if ( typeStr == "dest" || typeStr == "#dest" ) |
514 | type = OConfItem::Destination; | 527 | type = OConfItem::Destination; |
515 | else if ( typeStr == "option" || typeStr == "#option" ) | 528 | else if ( typeStr == "option" || typeStr == "#option" ) |
516 | type = OConfItem::Option; | 529 | type = OConfItem::Option; |
517 | else if ( typeStr == "arch" || typeStr == "#arch" ) | 530 | else if ( typeStr == "arch" || typeStr == "#arch" ) |
518 | type = OConfItem::Arch; | 531 | type = OConfItem::Arch; |
519 | else | 532 | else |
520 | type = OConfItem::NotDefined; | 533 | type = OConfItem::NotDefined; |
521 | ++pos; | 534 | ++pos; |
522 | int endpos = line.find( ' ', pos ); | 535 | int endpos = line.find( ' ', pos ); |
523 | 536 | ||
524 | // Name | 537 | // Name |
525 | QString name = line.mid( pos, endpos - pos ); | 538 | QString name = line.mid( pos, endpos - pos ); |
526 | 539 | ||
527 | // Value | 540 | // Value |
528 | QString value = ""; | 541 | QString value = ""; |
529 | if ( endpos > -1 ) | 542 | if ( endpos > -1 ) |
530 | value = line.right( line.length() - endpos - 1 ); | 543 | value = line.right( line.length() - endpos - 1 ); |
531 | 544 | ||
532 | // Active | 545 | // Active |
533 | bool active = !line.startsWith( "#" ); | 546 | bool active = !line.startsWith( "#" ); |
534 | 547 | ||
535 | // Add to list | 548 | // Add to list |
536 | m_confInfo->append( new OConfItem( type, name, value, active ) ); | 549 | m_confInfo->append( new OConfItem( type, name, value, features, active ) ); |
537 | } | 550 | } |
538 | } | 551 | } |
539 | } | 552 | } |
540 | 553 | ||
541 | f.close(); | 554 | f.close(); |
542 | } | 555 | } |
543 | } | 556 | } |
544 | 557 | ||
545 | // Load Ipkg execution options from application configuration file | 558 | // Load Ipkg execution options from application configuration file |
546 | if ( m_config ) | 559 | if ( m_config ) |
547 | { | 560 | { |
548 | m_config->setGroup( "Ipkg" ); | 561 | m_config->setGroup( "Ipkg" ); |
549 | m_ipkgExecOptions = m_config->readNumEntry( "ExecOptions", m_ipkgExecOptions ); | 562 | m_ipkgExecOptions = m_config->readNumEntry( "ExecOptions", m_ipkgExecOptions ); |
550 | m_ipkgExecVerbosity = m_config->readNumEntry( "Verbosity", m_ipkgExecVerbosity ); | 563 | m_ipkgExecVerbosity = m_config->readNumEntry( "Verbosity", m_ipkgExecVerbosity ); |
551 | } | 564 | } |
552 | } | 565 | } |
553 | 566 | ||
554 | OConfItemList *OIpkg::filterConfItems( OConfItem::Type typefilter ) | 567 | OConfItemList *OIpkg::filterConfItems( OConfItem::Type typefilter ) |
555 | { | 568 | { |
556 | // Load Ipkg configuration info if not already cached | 569 | // Load Ipkg configuration info if not already cached |
557 | if ( !m_confInfo ) | 570 | if ( !m_confInfo ) |
558 | loadConfiguration(); | 571 | loadConfiguration(); |
559 | 572 | ||
560 | // Build new server list (caller is responsible for deleting) | 573 | // Build new server list (caller is responsible for deleting) |
561 | OConfItemList *sl = new OConfItemList; | 574 | OConfItemList *sl = new OConfItemList; |
562 | 575 | ||
563 | // If typefilter is empty, retrieve all items | 576 | // If typefilter is empty, retrieve all items |
564 | bool retrieveAll = ( typefilter == OConfItem::NotDefined ); | 577 | bool retrieveAll = ( typefilter == OConfItem::NotDefined ); |
565 | 578 | ||
566 | // Parse configuration info for servers | 579 | // Parse configuration info for servers |
567 | OConfItemListIterator it( *m_confInfo ); | 580 | OConfItemListIterator it( *m_confInfo ); |
568 | for ( ; it.current(); ++it ) | 581 | for ( ; it.current(); ++it ) |
569 | { | 582 | { |
570 | OConfItem *item = it.current(); | 583 | OConfItem *item = it.current(); |
571 | if ( retrieveAll || item->type() == typefilter ) | 584 | if ( retrieveAll || item->type() == typefilter ) |
572 | { | 585 | { |
573 | sl->append( item ); | 586 | sl->append( item ); |
574 | } | 587 | } |
575 | } | 588 | } |
576 | 589 | ||
577 | return sl; | 590 | return sl; |
578 | } | 591 | } |
diff --git a/noncore/settings/packagemanager/oipkgconfigdlg.cpp b/noncore/settings/packagemanager/oipkgconfigdlg.cpp index 886430f..d9a67f3 100644 --- a/noncore/settings/packagemanager/oipkgconfigdlg.cpp +++ b/noncore/settings/packagemanager/oipkgconfigdlg.cpp | |||
@@ -56,107 +56,109 @@ OIpkgConfigDlg::OIpkgConfigDlg( OIpkg *ipkg, bool installOptions, QWidget *paren | |||
56 | , m_destCurrent( -1 ) | 56 | , m_destCurrent( -1 ) |
57 | , m_layout( this, 2, 4 ) | 57 | , m_layout( this, 2, 4 ) |
58 | , m_tabWidget( this ) | 58 | , m_tabWidget( this ) |
59 | { | 59 | { |
60 | setCaption( tr( "Configuration" ) ); | 60 | setCaption( tr( "Configuration" ) ); |
61 | 61 | ||
62 | // Initialize configuration widgets | 62 | // Initialize configuration widgets |
63 | if ( !installOptions ) | 63 | if ( !installOptions ) |
64 | { | 64 | { |
65 | initServerWidget(); | 65 | initServerWidget(); |
66 | initDestinationWidget(); | 66 | initDestinationWidget(); |
67 | initProxyWidget(); | 67 | initProxyWidget(); |
68 | } | 68 | } |
69 | initOptionsWidget(); | 69 | initOptionsWidget(); |
70 | 70 | ||
71 | // Load configuration information | 71 | // Load configuration information |
72 | initData(); | 72 | initData(); |
73 | 73 | ||
74 | // Setup tabs for all info | 74 | // Setup tabs for all info |
75 | m_layout.addWidget( &m_tabWidget ); | 75 | m_layout.addWidget( &m_tabWidget ); |
76 | if ( !m_installOptions ) | 76 | if ( !m_installOptions ) |
77 | { | 77 | { |
78 | m_tabWidget.addTab( m_serverWidget, "packagemanager/servertab", tr( "Servers" ) ); | 78 | m_tabWidget.addTab( m_serverWidget, "packagemanager/servertab", tr( "Servers" ) ); |
79 | m_tabWidget.addTab( m_destWidget, "packagemanager/desttab", tr( "Destinations" ) ); | 79 | m_tabWidget.addTab( m_destWidget, "packagemanager/desttab", tr( "Destinations" ) ); |
80 | m_tabWidget.addTab( m_proxyWidget, "packagemanager/proxytab", tr( "Proxies" ) ); | 80 | m_tabWidget.addTab( m_proxyWidget, "packagemanager/proxytab", tr( "Proxies" ) ); |
81 | m_tabWidget.addTab( m_optionsWidget, "exec", tr( "Options" ) ); | 81 | m_tabWidget.addTab( m_optionsWidget, "exec", tr( "Options" ) ); |
82 | m_tabWidget.setCurrentTab( tr( "Servers" ) ); | 82 | m_tabWidget.setCurrentTab( tr( "Servers" ) ); |
83 | } | 83 | } |
84 | else | 84 | else |
85 | { | 85 | { |
86 | m_tabWidget.addTab( m_optionsWidget, "exec", tr( "Options" ) ); | 86 | m_tabWidget.addTab( m_optionsWidget, "exec", tr( "Options" ) ); |
87 | } | 87 | } |
88 | } | 88 | } |
89 | 89 | ||
90 | void OIpkgConfigDlg::accept() | 90 | void OIpkgConfigDlg::accept() |
91 | { | 91 | { |
92 | // Save server, destination and proxy configuration | 92 | // Save server, destination and proxy configuration |
93 | if ( !m_installOptions ) | 93 | if ( !m_installOptions ) |
94 | { | 94 | { |
95 | // Update proxy information before saving settings | 95 | // Update proxy information before saving settings |
96 | OConfItem *confItem = findConfItem( OConfItem::Option, "http_proxy" ); | 96 | OConfItem *confItem = findConfItem( OConfItem::Option, "http_proxy" ); |
97 | if ( confItem ) | 97 | if ( confItem ) |
98 | { | 98 | { |
99 | confItem->setValue( m_proxyHttpServer->text() ); | 99 | confItem->setValue( m_proxyHttpServer->text() ); |
100 | confItem->setActive( m_proxyHttpActive->isChecked() ); | 100 | confItem->setActive( m_proxyHttpActive->isChecked() ); |
101 | } | 101 | } |
102 | else | 102 | else |
103 | m_configs->append( new OConfItem( OConfItem::Option, "http_proxy", | 103 | m_configs->append( new OConfItem( OConfItem::Option, "http_proxy", |
104 | m_proxyHttpServer->text(), m_proxyHttpActive->isChecked() ) ); | 104 | m_proxyHttpServer->text(), QString::null, |
105 | m_proxyHttpActive->isChecked() ) ); | ||
105 | 106 | ||
106 | confItem = findConfItem( OConfItem::Option, "ftp_proxy" ); | 107 | confItem = findConfItem( OConfItem::Option, "ftp_proxy" ); |
107 | if ( confItem ) | 108 | if ( confItem ) |
108 | { | 109 | { |
109 | confItem->setValue( m_proxyFtpServer->text() ); | 110 | confItem->setValue( m_proxyFtpServer->text() ); |
110 | confItem->setActive( m_proxyFtpActive->isChecked() ); | 111 | confItem->setActive( m_proxyFtpActive->isChecked() ); |
111 | } | 112 | } |
112 | else | 113 | else |
113 | m_configs->append( new OConfItem( OConfItem::Option, "ftp_proxy", | 114 | m_configs->append( new OConfItem( OConfItem::Option, "ftp_proxy", |
114 | m_proxyFtpServer->text(), m_proxyFtpActive->isChecked() ) ); | 115 | m_proxyFtpServer->text(), QString::null, |
116 | m_proxyFtpActive->isChecked() ) ); | ||
115 | 117 | ||
116 | confItem = findConfItem( OConfItem::Option, "proxy_username" ); | 118 | confItem = findConfItem( OConfItem::Option, "proxy_username" ); |
117 | if ( confItem ) | 119 | if ( confItem ) |
118 | confItem->setValue( m_proxyUsername->text() ); | 120 | confItem->setValue( m_proxyUsername->text() ); |
119 | else | 121 | else |
120 | m_configs->append( new OConfItem( OConfItem::Option, "proxy_username", | 122 | m_configs->append( new OConfItem( OConfItem::Option, "proxy_username", |
121 | m_proxyUsername->text() ) ); | 123 | m_proxyUsername->text() ) ); |
122 | 124 | ||
123 | confItem = findConfItem( OConfItem::Option, "proxy_password" ); | 125 | confItem = findConfItem( OConfItem::Option, "proxy_password" ); |
124 | if ( confItem ) | 126 | if ( confItem ) |
125 | confItem->setValue( m_proxyPassword->text() ); | 127 | confItem->setValue( m_proxyPassword->text() ); |
126 | else | 128 | else |
127 | m_configs->append( new OConfItem( OConfItem::Option, "proxy_password", | 129 | m_configs->append( new OConfItem( OConfItem::Option, "proxy_password", |
128 | m_proxyPassword->text() ) ); | 130 | m_proxyPassword->text() ) ); |
129 | 131 | ||
130 | m_ipkg->setConfigItems( m_configs ); | 132 | m_ipkg->setConfigItems( m_configs ); |
131 | } | 133 | } |
132 | 134 | ||
133 | // Save options configuration | 135 | // Save options configuration |
134 | int options = 0; | 136 | int options = 0; |
135 | if ( m_optForceDepends->isChecked() ) | 137 | if ( m_optForceDepends->isChecked() ) |
136 | options |= FORCE_DEPENDS; | 138 | options |= FORCE_DEPENDS; |
137 | if ( m_optForceReinstall->isChecked() ) | 139 | if ( m_optForceReinstall->isChecked() ) |
138 | options |= FORCE_REINSTALL; | 140 | options |= FORCE_REINSTALL; |
139 | if ( m_optForceRemove->isChecked() ) | 141 | if ( m_optForceRemove->isChecked() ) |
140 | options |= FORCE_REMOVE; | 142 | options |= FORCE_REMOVE; |
141 | if ( m_optForceOverwrite->isChecked() ) | 143 | if ( m_optForceOverwrite->isChecked() ) |
142 | options |= FORCE_OVERWRITE; | 144 | options |= FORCE_OVERWRITE; |
143 | m_ipkg->setIpkgExecOptions( options ); | 145 | m_ipkg->setIpkgExecOptions( options ); |
144 | m_ipkg->setIpkgExecVerbosity( m_optVerboseIpkg->currentItem() ); | 146 | m_ipkg->setIpkgExecVerbosity( m_optVerboseIpkg->currentItem() ); |
145 | 147 | ||
146 | QDialog::accept(); | 148 | QDialog::accept(); |
147 | } | 149 | } |
148 | 150 | ||
149 | void OIpkgConfigDlg::reject() | 151 | void OIpkgConfigDlg::reject() |
150 | { | 152 | { |
151 | if ( m_configs ) | 153 | if ( m_configs ) |
152 | delete m_configs; | 154 | delete m_configs; |
153 | } | 155 | } |
154 | 156 | ||
155 | void OIpkgConfigDlg::initServerWidget() | 157 | void OIpkgConfigDlg::initServerWidget() |
156 | { | 158 | { |
157 | m_serverWidget = new QWidget( this ); | 159 | m_serverWidget = new QWidget( this ); |
158 | 160 | ||
159 | // Initialize UI | 161 | // Initialize UI |
160 | QVBoxLayout *vb = new QVBoxLayout( m_serverWidget ); | 162 | QVBoxLayout *vb = new QVBoxLayout( m_serverWidget ); |
161 | QScrollView *sv = new QScrollView( m_serverWidget ); | 163 | QScrollView *sv = new QScrollView( m_serverWidget ); |
162 | vb->addWidget( sv, 0, 0 ); | 164 | vb->addWidget( sv, 0, 0 ); |
@@ -490,151 +492,152 @@ void OIpkgConfigDlg::slotServerNew() | |||
490 | m_serverName->setFocus(); | 492 | m_serverName->setFocus(); |
491 | } | 493 | } |
492 | 494 | ||
493 | void OIpkgConfigDlg::slotServerDelete() | 495 | void OIpkgConfigDlg::slotServerDelete() |
494 | { | 496 | { |
495 | // Find selected server in list | 497 | // Find selected server in list |
496 | OConfItem *server = findConfItem( OConfItem::Source, m_serverList->currentText() ); | 498 | OConfItem *server = findConfItem( OConfItem::Source, m_serverList->currentText() ); |
497 | 499 | ||
498 | // Delete server | 500 | // Delete server |
499 | if ( server ) | 501 | if ( server ) |
500 | { | 502 | { |
501 | m_configs->removeRef( server ); | 503 | m_configs->removeRef( server ); |
502 | m_serverList->removeItem( m_serverCurrent ); | 504 | m_serverList->removeItem( m_serverCurrent ); |
503 | } | 505 | } |
504 | } | 506 | } |
505 | 507 | ||
506 | void OIpkgConfigDlg::slotServerUpdate() | 508 | void OIpkgConfigDlg::slotServerUpdate() |
507 | { | 509 | { |
508 | QString newName = m_serverName->text(); | 510 | QString newName = m_serverName->text(); |
509 | 511 | ||
510 | // Convert any spaces to underscores | 512 | // Convert any spaces to underscores |
511 | newName.replace( QRegExp( " " ), "_" ); | 513 | newName.replace( QRegExp( " " ), "_" ); |
512 | 514 | ||
513 | if ( !m_serverNew ) | 515 | if ( !m_serverNew ) |
514 | { | 516 | { |
515 | // Find selected server in list | 517 | // Find selected server in list |
516 | OConfItem *server = findConfItem( OConfItem::Source, m_serverCurrName ); | 518 | OConfItem *server = findConfItem( OConfItem::Source, m_serverCurrName ); |
517 | 519 | ||
518 | // Delete server | 520 | // Delete server |
519 | if ( server ) | 521 | if ( server ) |
520 | { | 522 | { |
521 | // Update url | 523 | // Update url |
522 | server->setValue( m_serverLocation->text() ); | 524 | server->setValue( m_serverLocation->text() ); |
523 | server->setActive( m_serverActive->isChecked() ); | 525 | server->setActive( m_serverActive->isChecked() ); |
524 | 526 | ||
525 | // Check if server name has changed, if it has then we need to replace the key in the map | 527 | // Check if server name has changed, if it has then we need to replace the key in the map |
526 | if ( m_serverCurrName != newName ) | 528 | if ( m_serverCurrName != newName ) |
527 | { | 529 | { |
528 | // Update server name | 530 | // Update server name |
529 | server->setName( newName ); | 531 | server->setName( newName ); |
530 | 532 | ||
531 | // Update list box | 533 | // Update list box |
532 | m_serverList->changeItem( newName, m_serverCurrent ); | 534 | m_serverList->changeItem( newName, m_serverCurrent ); |
533 | } | 535 | } |
534 | } | 536 | } |
535 | } | 537 | } |
536 | else | 538 | else |
537 | { | 539 | { |
538 | // Add new destination to configuration list | 540 | // Add new server to configuration list |
539 | m_configs->append( new OConfItem( OConfItem::Source, newName, | 541 | // TODO - support src/gz |
540 | m_serverLocation->text(), m_serverActive->isChecked() ) ); | 542 | m_configs->append( new OConfItem( OConfItem::Source, newName, m_serverLocation->text(), |
543 | QString::null, m_serverActive->isChecked() ) ); | ||
541 | m_configs->sort(); | 544 | m_configs->sort(); |
542 | 545 | ||
543 | m_serverList->insertItem( newName ); | 546 | m_serverList->insertItem( newName ); |
544 | m_serverList->setCurrentItem( m_serverList->count() ); | 547 | m_serverList->setCurrentItem( m_serverList->count() ); |
545 | m_serverNew = false; | 548 | m_serverNew = false; |
546 | } | 549 | } |
547 | } | 550 | } |
548 | 551 | ||
549 | void OIpkgConfigDlg::slotDestEdit( int index ) | 552 | void OIpkgConfigDlg::slotDestEdit( int index ) |
550 | { | 553 | { |
551 | m_destNew = false; | 554 | m_destNew = false; |
552 | m_destCurrent = index; | 555 | m_destCurrent = index; |
553 | 556 | ||
554 | // Find selected destination in list | 557 | // Find selected destination in list |
555 | OConfItem *destination = findConfItem( OConfItem::Destination, m_destList->currentText() ); | 558 | OConfItem *destination = findConfItem( OConfItem::Destination, m_destList->currentText() ); |
556 | 559 | ||
557 | // Display destination details | 560 | // Display destination details |
558 | if ( destination ) | 561 | if ( destination ) |
559 | { | 562 | { |
560 | m_destCurrName = destination->name(); | 563 | m_destCurrName = destination->name(); |
561 | m_destName->setText( destination->name() ); | 564 | m_destName->setText( destination->name() ); |
562 | m_destLocation->setText( destination->value() ); | 565 | m_destLocation->setText( destination->value() ); |
563 | m_destActive->setChecked( destination->active() ); | 566 | m_destActive->setChecked( destination->active() ); |
564 | m_destName->setFocus(); | 567 | m_destName->setFocus(); |
565 | } | 568 | } |
566 | } | 569 | } |
567 | 570 | ||
568 | void OIpkgConfigDlg::slotDestNew() | 571 | void OIpkgConfigDlg::slotDestNew() |
569 | { | 572 | { |
570 | m_destNew = true; | 573 | m_destNew = true; |
571 | 574 | ||
572 | m_destName->setText( QString::null ); | 575 | m_destName->setText( QString::null ); |
573 | m_destLocation->setText( QString::null ); | 576 | m_destLocation->setText( QString::null ); |
574 | m_destActive->setChecked( true ); | 577 | m_destActive->setChecked( true ); |
575 | m_destName->setFocus(); | 578 | m_destName->setFocus(); |
576 | } | 579 | } |
577 | 580 | ||
578 | void OIpkgConfigDlg::slotDestDelete() | 581 | void OIpkgConfigDlg::slotDestDelete() |
579 | { | 582 | { |
580 | // Find selected destination in list | 583 | // Find selected destination in list |
581 | OConfItem *destination = findConfItem( OConfItem::Destination, m_destList->currentText() ); | 584 | OConfItem *destination = findConfItem( OConfItem::Destination, m_destList->currentText() ); |
582 | 585 | ||
583 | // Delete destination | 586 | // Delete destination |
584 | if ( destination ) | 587 | if ( destination ) |
585 | { | 588 | { |
586 | m_configs->removeRef( destination ); | 589 | m_configs->removeRef( destination ); |
587 | m_destList->removeItem( m_destCurrent ); | 590 | m_destList->removeItem( m_destCurrent ); |
588 | } | 591 | } |
589 | } | 592 | } |
590 | 593 | ||
591 | void OIpkgConfigDlg::slotDestSelectPath() | 594 | void OIpkgConfigDlg::slotDestSelectPath() |
592 | { | 595 | { |
593 | QString path = Opie::Ui::OFileDialog::getDirectory( 0, m_destLocation->text() ); | 596 | QString path = Opie::Ui::OFileDialog::getDirectory( 0, m_destLocation->text() ); |
594 | if ( path.at( path.length() - 1 ) == '/' ) | 597 | if ( path.at( path.length() - 1 ) == '/' ) |
595 | path.truncate( path.length() - 1 ); | 598 | path.truncate( path.length() - 1 ); |
596 | m_destLocation->setText( path ); | 599 | m_destLocation->setText( path ); |
597 | } | 600 | } |
598 | 601 | ||
599 | void OIpkgConfigDlg::slotDestUpdate() | 602 | void OIpkgConfigDlg::slotDestUpdate() |
600 | { | 603 | { |
601 | QString newName = m_destName->text(); | 604 | QString newName = m_destName->text(); |
602 | 605 | ||
603 | // Convert any spaces to underscores | 606 | // Convert any spaces to underscores |
604 | newName.replace( QRegExp( " " ), "_" ); | 607 | newName.replace( QRegExp( " " ), "_" ); |
605 | 608 | ||
606 | if ( !m_destNew ) | 609 | if ( !m_destNew ) |
607 | { | 610 | { |
608 | // Find selected destination in list | 611 | // Find selected destination in list |
609 | OConfItem *destination = findConfItem( OConfItem::Destination, m_destCurrName ); | 612 | OConfItem *destination = findConfItem( OConfItem::Destination, m_destCurrName ); |
610 | 613 | ||
611 | // Display destination details | 614 | // Display destination details |
612 | if ( destination ) | 615 | if ( destination ) |
613 | { | 616 | { |
614 | // Update url | 617 | // Update url |
615 | destination->setValue( m_destLocation->text() ); | 618 | destination->setValue( m_destLocation->text() ); |
616 | destination->setActive( m_destActive->isChecked() ); | 619 | destination->setActive( m_destActive->isChecked() ); |
617 | 620 | ||
618 | // Check if destination name has changed, if it has then we need to replace the key in the map | 621 | // Check if destination name has changed, if it has then we need to replace the key in the map |
619 | if ( m_destCurrName != newName ) | 622 | if ( m_destCurrName != newName ) |
620 | { | 623 | { |
621 | // Update destination name | 624 | // Update destination name |
622 | destination->setName( newName ); | 625 | destination->setName( newName ); |
623 | 626 | ||
624 | // Update list box | 627 | // Update list box |
625 | m_destList->changeItem( newName, m_destCurrent ); | 628 | m_destList->changeItem( newName, m_destCurrent ); |
626 | } | 629 | } |
627 | } | 630 | } |
628 | } | 631 | } |
629 | else | 632 | else |
630 | { | 633 | { |
631 | // Add new destination to configuration list | 634 | // Add new destination to configuration list |
632 | m_configs->append( new OConfItem( OConfItem::Destination, newName, | 635 | m_configs->append( new OConfItem( OConfItem::Destination, newName, |
633 | m_destLocation->text(), m_destActive->isChecked() ) ); | 636 | m_destLocation->text(), QString::null, m_destActive->isChecked() ) ); |
634 | m_configs->sort(); | 637 | m_configs->sort(); |
635 | 638 | ||
636 | m_destList->insertItem( newName ); | 639 | m_destList->insertItem( newName ); |
637 | m_destList->setCurrentItem( m_destList->count() ); | 640 | m_destList->setCurrentItem( m_destList->count() ); |
638 | m_destNew = false; | 641 | m_destNew = false; |
639 | } | 642 | } |
640 | } | 643 | } |