summaryrefslogtreecommitdiff
authordrw <drw>2003-05-16 23:17:49 (UTC)
committer drw <drw>2003-05-16 23:17:49 (UTC)
commiteac84192decbd60ecb680b82c92b55e70b5fd015 (patch) (unidiff)
tree3e47155aff48679a971bccb82b58c6b89fe4c358
parentdb67960cfab97f9897e0fdc1cb9c8e8794f4a2ba (diff)
downloadopie-eac84192decbd60ecb680b82c92b55e70b5fd015.zip
opie-eac84192decbd60ecb680b82c92b55e70b5fd015.tar.gz
opie-eac84192decbd60ecb680b82c92b55e70b5fd015.tar.bz2
Fix for bug #914 (correct dialog cancel behaviour)
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/aqpkg/mainwin.cpp69
-rw-r--r--noncore/settings/aqpkg/mainwin.h21
2 files changed, 84 insertions, 6 deletions
diff --git a/noncore/settings/aqpkg/mainwin.cpp b/noncore/settings/aqpkg/mainwin.cpp
index 0102292..0efa1e0 100644
--- a/noncore/settings/aqpkg/mainwin.cpp
+++ b/noncore/settings/aqpkg/mainwin.cpp
@@ -936,49 +936,53 @@ void MainWindow :: downloadRemotePackage()
936 reloadDocuments = TRUE; 936 reloadDocuments = TRUE;
937 stack->addWidget( dlg, 3 ); 937 stack->addWidget( dlg, 3 );
938 stack->raiseWidget( dlg ); 938 stack->raiseWidget( dlg );
939} 939}
940 940
941 941
942void MainWindow :: applyChanges() 942void MainWindow :: applyChanges()
943{ 943{
944 stickyOption = ""; 944 stickyOption = "";
945 945
946 // First, write out ipkg_conf file so that ipkg can use it 946 // First, write out ipkg_conf file so that ipkg can use it
947 mgr->writeOutIpkgConf(); 947 mgr->writeOutIpkgConf();
948 948
949 // Now for each selected item 949 // Now for each selected item
950 // deal with it 950 // deal with it
951 951
952 QList<InstallData> workingPackages; 952 QList<InstallData> workingPackages;
953 workingPackages.setAutoDelete( TRUE ); 953 workingPackages.setAutoDelete( TRUE );
954 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); 954 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild();
955 item != 0 ; 955 item != 0 ;
956 item = (QCheckListItem *)item->nextSibling() ) 956 item = (QCheckListItem *)item->nextSibling() )
957 { 957 {
958 if ( item->isOn() ) 958 if ( item->isOn() )
959 { 959 {
960 workingPackages.append( dealWithItem( item ) ); 960 InstallData *instdata = dealWithItem( item );
961 if ( instdata )
962 workingPackages.append( instdata );
963 else
964 return;
961 } 965 }
962 } 966 }
963 967
964 if ( workingPackages.count() == 0 ) 968 if ( workingPackages.count() == 0 )
965 { 969 {
966 // Nothing to do 970 // Nothing to do
967 QMessageBox::information( this, tr( "Nothing to do" ), 971 QMessageBox::information( this, tr( "Nothing to do" ),
968 tr( "No packages selected" ), tr( "OK" ) ); 972 tr( "No packages selected" ), tr( "OK" ) );
969 973
970 return; 974 return;
971 } 975 }
972 976
973 // do the stuff 977 // do the stuff
974 InstallDlgImpl *dlg = new InstallDlgImpl( workingPackages, mgr, tr( "Apply changes" ) ); 978 InstallDlgImpl *dlg = new InstallDlgImpl( workingPackages, mgr, tr( "Apply changes" ) );
975 connect( dlg, SIGNAL( reloadData( InstallDlgImpl * ) ), this, SLOT( reloadData( InstallDlgImpl * ) ) ); 979 connect( dlg, SIGNAL( reloadData( InstallDlgImpl * ) ), this, SLOT( reloadData( InstallDlgImpl * ) ) );
976 reloadDocuments = TRUE; 980 reloadDocuments = TRUE;
977 stack->addWidget( dlg, 3 ); 981 stack->addWidget( dlg, 3 );
978 stack->raiseWidget( dlg ); 982 stack->raiseWidget( dlg );
979} 983}
980 984
981// decide what to do - either remove, upgrade or install 985// decide what to do - either remove, upgrade or install
982// Current rules: 986// Current rules:
983// If not installed - install 987// If not installed - install
984// If installed and different version available - upgrade 988// If installed and different version available - upgrade
@@ -1046,56 +1050,61 @@ InstallData *MainWindow :: dealWithItem( QCheckListItem *item )
1046 QString secondOption; 1050 QString secondOption;
1047 if ( val == 0 ) 1051 if ( val == 0 )
1048 { 1052 {
1049 // Version available is the same - option to remove or reinstall 1053 // Version available is the same - option to remove or reinstall
1050 caption = tr( "Do you wish to remove or reinstall\n%1?" ); 1054 caption = tr( "Do you wish to remove or reinstall\n%1?" );
1051 text = tr( "Remove or ReInstall" ); 1055 text = tr( "Remove or ReInstall" );
1052 secondButton = tr( "ReInstall" ); 1056 secondButton = tr( "ReInstall" );
1053 secondOption = tr( "R" ); 1057 secondOption = tr( "R" );
1054 } 1058 }
1055 else if ( val == 1 ) 1059 else if ( val == 1 )
1056 { 1060 {
1057 // Version available is newer - option to remove or upgrade 1061 // Version available is newer - option to remove or upgrade
1058 caption = tr( "Do you wish to remove or upgrade\n%1?" ); 1062 caption = tr( "Do you wish to remove or upgrade\n%1?" );
1059 text = tr( "Remove or Upgrade" ); 1063 text = tr( "Remove or Upgrade" );
1060 secondButton = tr( "Upgrade" ); 1064 secondButton = tr( "Upgrade" );
1061 secondOption = tr( "U" ); 1065 secondOption = tr( "U" );
1062 } 1066 }
1063 1067
1064 // Sticky option not implemented yet, but will eventually allow 1068 // Sticky option not implemented yet, but will eventually allow
1065 // the user to say something like 'remove all' 1069 // the user to say something like 'remove all'
1066 if ( stickyOption == "" ) 1070 if ( stickyOption == "" )
1067 { 1071 {
1068 QString msgtext; 1072 QString msgtext;
1069 msgtext = caption.arg( ( const char * )name ); 1073 msgtext = caption.arg( ( const char * )name );
1070 switch( QMessageBox::information( this, text, 1074// switch( QMessageBox::information( this, text,
1071 msgtext, tr( "Remove" ), secondButton ) ) 1075// msgtext, tr( "Remove" ), secondButton ) )
1076 QuestionDlg dlg( text, msgtext, secondButton );
1077 switch( dlg.exec() )
1072 { 1078 {
1073 case 0: // Try again or Enter 1079 case 0: // Cancel
1074 // option 0 = Remove 1080 delete newitem;
1081 return 0x0;
1082 break;
1083 case 1: // Remove
1075 newitem->option = "D"; 1084 newitem->option = "D";
1076 break; 1085 break;
1077 case 1: // Quit or Escape 1086 case 2: // Reinstall or Upgrade
1078 newitem->option = secondOption; 1087 newitem->option = secondOption;
1079 break; 1088 break;
1080 } 1089 }
1081 } 1090 }
1082 else 1091 else
1083 { 1092 {
1084// newitem->option = stickyOption; 1093// newitem->option = stickyOption;
1085 } 1094 }
1086 } 1095 }
1087 1096
1088 1097
1089 // Check if we are reinstalling the same version 1098 // Check if we are reinstalling the same version
1090 if ( newitem->option != "R" ) 1099 if ( newitem->option != "R" )
1091 newitem->recreateLinks = true; 1100 newitem->recreateLinks = true;
1092 else 1101 else
1093 newitem->recreateLinks = false; 1102 newitem->recreateLinks = false;
1094 1103
1095 // User hit cancel (on dlg - assume remove) 1104 // User hit cancel (on dlg - assume remove)
1096 return newitem; 1105 return newitem;
1097 } 1106 }
1098} 1107}
1099 1108
1100void MainWindow :: reloadData( InstallDlgImpl *dlg ) 1109void MainWindow :: reloadData( InstallDlgImpl *dlg )
1101{ 1110{
@@ -1143,24 +1152,72 @@ void MainWindow :: letterPushed( QString t )
1143 1152
1144 if ( item == 0 ) 1153 if ( item == 0 )
1145 item = (QCheckListItem *)packagesList->firstChild(); 1154 item = (QCheckListItem *)packagesList->firstChild();
1146 do 1155 do
1147 { 1156 {
1148 if ( item->text().lower().startsWith( t.lower() ) ) 1157 if ( item->text().lower().startsWith( t.lower() ) )
1149 { 1158 {
1150 packagesList->setSelected( item, true ); 1159 packagesList->setSelected( item, true );
1151 packagesList->ensureItemVisible( item ); 1160 packagesList->ensureItemVisible( item );
1152 break; 1161 break;
1153 } 1162 }
1154 1163
1155 item = (QCheckListItem *)item->nextSibling(); 1164 item = (QCheckListItem *)item->nextSibling();
1156 if ( !item ) 1165 if ( !item )
1157 item = (QCheckListItem *)packagesList->firstChild(); 1166 item = (QCheckListItem *)packagesList->firstChild();
1158 } while ( item != start); 1167 } while ( item != start);
1159} 1168}
1160 1169
1161void MainWindow :: slotDisplayPackage( QListViewItem *item ) 1170void MainWindow :: slotDisplayPackage( QListViewItem *item )
1162{ 1171{
1163 QString itemstr( ((QCheckListItem*)item)->text() ); 1172 QString itemstr( ((QCheckListItem*)item)->text() );
1164 PackageWindow *p = new PackageWindow( mgr->getServer( serversList->currentText() )->getPackage( itemstr ) ); 1173 PackageWindow *p = new PackageWindow( mgr->getServer( serversList->currentText() )->getPackage( itemstr ) );
1165 p->showMaximized(); 1174 p->showMaximized();
1166} 1175}
1176
1177QuestionDlg::QuestionDlg( const QString &caption, const QString &text, const QString &secondbtn )
1178 : QWidget( 0x0, 0x0, WType_Modal | WType_TopLevel | WStyle_Dialog )
1179{
1180 setCaption( caption );
1181 resize( 175, 100 );
1182
1183 QGridLayout *layout = new QGridLayout( this );
1184
1185 QLabel *l = new QLabel( text, this );
1186 l->setAlignment( AlignCenter | WordBreak );
1187 layout->addMultiCellWidget( l, 0, 0, 0, 1 );
1188
1189 btn1 = new QPushButton( tr( "Remove" ), this );
1190 connect( btn1, SIGNAL(clicked()), this, SLOT(slotButtonPressed()) );
1191 layout->addWidget( btn1, 1, 0 );
1192
1193 btn2 = new QPushButton( secondbtn, this );
1194 connect( btn2, SIGNAL(clicked()), this, SLOT(slotButtonPressed()) );
1195 layout->addWidget( btn2, 1, 1 );
1196
1197 executing = FALSE;
1198}
1199
1200int QuestionDlg::exec()
1201{
1202 show();
1203
1204 if ( !executing )
1205 {
1206 executing = TRUE;
1207 qApp->enter_loop();
1208 }
1209
1210 return buttonpressed;
1211}
1212
1213void QuestionDlg::slotButtonPressed()
1214{
1215 if ( sender() == btn1 )
1216 buttonpressed = 1;
1217 else if ( sender() == btn2 )
1218 buttonpressed = 2;
1219 else
1220 buttonpressed = 0;
1221
1222 qApp->exit_loop();
1223}
diff --git a/noncore/settings/aqpkg/mainwin.h b/noncore/settings/aqpkg/mainwin.h
index 9f48321..615ff8b 100644
--- a/noncore/settings/aqpkg/mainwin.h
+++ b/noncore/settings/aqpkg/mainwin.h
@@ -25,48 +25,49 @@
25 59 Temple Place - Suite 330, 25 59 Temple Place - Suite 330,
26 Boston, MA 02111-1307, USA. 26 Boston, MA 02111-1307, USA.
27 27
28*/ 28*/
29 29
30#ifndef MAINWIN_H 30#ifndef MAINWIN_H
31#define MAINWIN_H 31#define MAINWIN_H
32 32
33#include <qmainwindow.h> 33#include <qmainwindow.h>
34#include <qpixmap.h> 34#include <qpixmap.h>
35 35
36class DataManager; 36class DataManager;
37class InstallData; 37class InstallData;
38class InstallDlgImpl; 38class InstallDlgImpl;
39 39
40class QAction; 40class QAction;
41class QCheckListItem; 41class QCheckListItem;
42class QComboBox; 42class QComboBox;
43class QLabel; 43class QLabel;
44class QLineEdit; 44class QLineEdit;
45class QListView; 45class QListView;
46class QListViewItem; 46class QListViewItem;
47class QToolBar; 47class QToolBar;
48class QProgressBar; 48class QProgressBar;
49class QPushButton;
49class QWidgetStack; 50class QWidgetStack;
50 51
51class MainWindow :public QMainWindow 52class MainWindow :public QMainWindow
52{ 53{
53 Q_OBJECT 54 Q_OBJECT
54public: 55public:
55 56
56 MainWindow(); 57 MainWindow();
57 ~MainWindow(); 58 ~MainWindow();
58 59
59protected: 60protected:
60 void closeEvent( QCloseEvent* e ); 61 void closeEvent( QCloseEvent* e );
61 62
62private: 63private:
63 DataManager *mgr; 64 DataManager *mgr;
64 65
65 QWidgetStack *stack; 66 QWidgetStack *stack;
66 67
67 QToolBar *findBar; 68 QToolBar *findBar;
68 QToolBar *jumpBar; 69 QToolBar *jumpBar;
69 QLineEdit *findEdit; 70 QLineEdit *findEdit;
70 QAction *actionFindNext; 71 QAction *actionFindNext;
71 QAction *actionFilter; 72 QAction *actionFilter;
72 QAction *actionUpgrade; 73 QAction *actionUpgrade;
@@ -130,25 +131,45 @@ public slots:
130 void filterUninstalledPackages(); 131 void filterUninstalledPackages();
131 void filterInstalledPackages(); 132 void filterInstalledPackages();
132 void filterUpgradedPackages(); 133 void filterUpgradedPackages();
133 void filterCategory(); 134 void filterCategory();
134 bool setFilterCategory(); 135 bool setFilterCategory();
135 void raiseMainWidget(); 136 void raiseMainWidget();
136 void raiseProgressWidget(); 137 void raiseProgressWidget();
137 void enableUpgrade( bool ); 138 void enableUpgrade( bool );
138 void enableDownload( bool ); 139 void enableDownload( bool );
139 void reloadData( InstallDlgImpl * ); 140 void reloadData( InstallDlgImpl * );
140 141
141private slots: 142private slots:
142 void init(); 143 void init();
143 void setProgressSteps( int ); 144 void setProgressSteps( int );
144 void setProgressMessage( const QString & ); 145 void setProgressMessage( const QString & );
145 void updateProgress( int ); 146 void updateProgress( int );
146 void serverSelected( int index ); 147 void serverSelected( int index );
147 void updateServer(); 148 void updateServer();
148 void upgradePackages(); 149 void upgradePackages();
149 void downloadPackage(); 150 void downloadPackage();
150 void applyChanges(); 151 void applyChanges();
151 void letterPushed( QString t ); 152 void letterPushed( QString t );
152 void slotDisplayPackage( QListViewItem * ); 153 void slotDisplayPackage( QListViewItem * );
153}; 154};
155
156class QuestionDlg : public QWidget
157{
158 Q_OBJECT
159public:
160 QuestionDlg( const QString &caption, const QString &text, const QString &secondbtn );
161
162 int exec();
163
164private:
165 QPushButton *btn1;
166 QPushButton *btn2;
167
168 bool executing;
169 int buttonpressed;
170
171private slots:
172 void slotButtonPressed();
173};
174
154#endif 175#endif