From: <arn...@us...> - 2008-04-14 20:34:21
|
Revision: 1157 http://dcplusplus.svn.sourceforge.net/dcplusplus/?rev=1157&view=rev Author: arnetheduck Date: 2008-04-14 13:33:46 -0700 (Mon, 14 Apr 2008) Log Message: ----------- merge file dialog patch Modified Paths: -------------- dcplusplus/trunk/changelog.txt dcplusplus/trunk/dwt/include/dwt/aspects/AspectFileFilter.h dcplusplus/trunk/dwt/include/dwt/widgets/LoadDialog.h dcplusplus/trunk/dwt/include/dwt/widgets/SaveDialog.h dcplusplus/trunk/dwt/src/widgets/LoadDialog.cpp dcplusplus/trunk/dwt/src/widgets/SaveDialog.cpp Property Changed: ---------------- dcplusplus/trunk/ Property changes on: dcplusplus/trunk ___________________________________________________________________ Name: bzr:revision-info - timestamp: 2008-04-11 17:30:57.875000000 +0200 committer: poy <po...@12...> properties: branch-nick: repo + timestamp: 2008-04-11 22:09:46.354000092 +0200 committer: Jacek Sieka <arn...@gm...> properties: branch-nick: dcplusplus Name: bzr:ancestry:v3-trunk1 - arn...@gm...-20080329054606-ubefm4h98xjgvif9 arn...@gm...-20080329220538-g3f1nvcfh1ycetw7 robert@smir-20080331181318-buvm17zqqym5ryct + arn...@gm...-20080329054606-ubefm4h98xjgvif9 arn...@gm...-20080329220538-g3f1nvcfh1ycetw7 robert@smir-20080331181318-buvm17zqqym5ryct po...@12...-20080411151741-4v1p7g8chsber07o Name: bzr:revision-id:v3-trunk1 - 1027 arn...@gm...-20080323183926-schknwnkgeo7ivdn 1028 zouzou123gen-20080323220411-r8usuc3qxwuh7zsn 1029 zouzou123gen-20080323221249-0su72zaj13e706mk 1030 arn...@gm...-20080324140623-muba1dl46m000o8c 1031 zouzou123gen-20080324141933-qbgr93ugpe0297m6 1032 arn...@gm...-20080324153706-siidja05n84i00b1 1033 arn...@gm...-20080324153823-lhn3awurnu77riln 1034 arn...@gm...-20080324165650-zapppziji67yf5a2 1035 zouzou123gen-20080324175936-4mqc2kh0lo5wtdu2 1036 zouzou123gen-20080325004602-6wdsoym95mjuhwd3 1037 arn...@gm...-20080325100659-8fqy6q65itmghlep 1038 zouzou123gen-20080325175216-s297sdiucukfvijh 1039 arn...@gm...-20080325210137-3dfqyoi8ykosy087 1040 arn...@gm...-20080325211747-nwwy1eb33r071sca 1041 arn...@gm...-20080326084110-qbselrjckku275xi 1042 zouzou123gen-20080326123631-35642mgbk2i4ty32 1043 zouzou123gen-20080326124345-f4xwn2d3ty8ubd6r 1044 arn...@gm...-20080326162031-il0nyms30w0mky43 1045 arn...@gm...-20080326164801-8dru8mjc06xgzjpv 1046 arn...@gm...-20080326170438-uzl2rx8fqnohak7g 1047 zouzou123gen-20080326172821-d6uqcbmfb0c6rwlv 1048 arn...@gm...-20080326213257-qlgdh7m2712p2l0q 1049 arn...@gm...-20080326214313-ktnoekgk3s0wmatz 1050 arn...@gm...-20080326215256-0j1iqrf286b9g7zf 1051 arn...@gm...-20080327082121-hoi22wh1gwjdfbyd 1052 arn...@gm...-20080327120639-um3tukdt374rwvgm 1053 zouzou123gen-20080327130703-6vtek6uxy3vua543 1054 arn...@gm...-20080327215831-dmg5mkufskabwkro 1055 arn...@gm...-20080327231459-cdztcv25alsuyqmf 1056 arn...@gm...-20080328085925-gceybsr53oml1p24 1057 arn...@gm...-20080328200512-1sjuu6bcnl2dyd2a 1058 arn...@gm...-20080328210347-bussqjrm5mfswh7o 1059 arn...@gm...-20080329055630-braiir1dskv7a4qm 1060 arn...@gm...-20080329061558-rck8dz60wpj3c5ja 1061 arn...@gm...-20080329081253-if6o5jn329mbzfpl 1062 arn...@gm...-20080329081619-cb4x930j8sp55cs0 1063 arn...@gm...-20080329103216-hgjzo7ra2zixbztd 1064 arn...@gm...-20080329124042-q3aw4iodmo5kafyp 1065 arn...@gm...-20080329124926-2je1z18p0272zpua 1066 arn...@gm...-20080329150901-ehj9t32en7eps2dp 1067 zouzou123gen-20080329153653-36xlvpik2ns9r84r 1068 zouzou123gen-20080329162703-51xr8hg073pg7wq5 1069 zouzou123gen-20080329234706-8ddipdqu0xeudkql 1070 arn...@gm...-20080330081232-ubqr1171ewalrd4q 1071 zouzou123gen-20080330131607-yppbs3mgyjef1cux 1072 zouzou123gen-20080330134835-yv1nogy77ib1uehd 1073 zouzou123gen-20080331124549-alyw7vugdn30piqy 1074 zouzou123gen-20080331135108-q8frtqsin5bosfzm 1075 zouzou123gen-20080331140757-u94q52yccl5lsifk 1076 zouzou123gen-20080331152513-ue1x5qhigcw51348 1077 arn...@gm...-20080331184436-a8g6chibmg8nswls 1078 arn...@gm...-20080331220648-81485k28qmwruwz6 1079 zouzou123gen-20080401081001-2yjn07cf8s5sxr3a 1080 zouzou123gen-20080401081247-f3p4hdjojnd460jw 1081 zouzou123gen-20080401084117-24a454g8o0x656kg 1082 zouzou123gen-20080401133146-jabb5i8870fg6f66 1083 zouzou123gen-20080401154610-mxdqoo5bksru93e6 1084 arn...@gm...-20080401185530-lqj4tflt5ldmx46f 1085 arn...@gm...-20080401212616-ffl7m0xm8gt15knk 1086 arn...@gm...-20080402084515-ofmnwihzv159jton 1087 arn...@gm...-20080402133105-y70soi38owzl76i9 1088 arn...@gm...-20080402142417-rn2dbkx19wfz3vae 1089 arn...@gm...-20080402144459-u3z3hqvl8aqjc4a0 1090 zouzou123gen-20080402145051-zi8tmvy8u3r2mzu8 1091 arn...@gm...-20080402152137-f397uz1yp9qjvfwh 1092 zouzou123gen-20080402170355-29wda40wk3cy7lu5 1093 arn...@gm...-20080402180628-ipos9li0c4bsmq1h 1094 arn...@gm...-20080402181235-s2a6f4ww4lzayl46 1095 arn...@gm...-20080402193851-6mu64vgep6tijith 1096 arn...@gm...-20080402203810-86zpxsx69q83zf3r 1097 arn...@gm...-20080402204331-so2e8n892o23pejr 1098 poy-20080402224153-225qylr2cfwhqrg7 1099 mrmikejj-20080403125112-o8polh8rkn62umyh 1100 arn...@gm...-20080403125139-8xub76j1xazhfxna 1101 po...@12...-20080403140544-13kockkjho883nb4 1102 po...@12...-20080403143012-bxghtoodiolugpbs 1103 arn...@gm...-20080403190809-bbi4bz5rfcvjnt20 1104 arn...@gm...-20080403205410-czxru1vcg1s4wcws 1105 arn...@gm...-20080403213124-54spdrwszgyimd90 1106 po...@12...-20080404002406-aj74x5tngi6mmmj1 1107 arn...@gm...-20080404122415-mjy07qzbaxyhagra 1108 po...@12...-20080404145445-84lyk5tyy3b3br14 1109 po...@12...-20080404231417-v4v8x7u3f0hm0ejc 1110 po...@12...-20080405001107-14d1ojjof8xhvcj8 1111 arn...@gm...-20080405071929-jmnrul21sxx04kky 1112 arn...@gm...-20080405080105-9qbda7be0pi7y1ai 1113 po...@12...-20080405154555-yuj2n5kyndfjlpsf 1114 po...@12...-20080405220250-8y09d0samsj8ja94 1115 po...@12...-20080406134101-4860ytb61sbu3yhg 1116 po...@12...-20080406155849-2wzxzuzs5m8zpk0g 1117 po...@12...-20080406164835-bv5dydhm3qqydsty 1118 arn...@gm...-20080406210237-c7tyfgiz2sjgv044 1119 po...@12...-20080407114423-4yajg1rffidq76bj 1120 arn...@gm...-20080407194826-c42t4bjzw4vflejn 1121 po...@12...-20080407214303-o7ul1bvcn6gvaoc9 1122 po...@12...-20080407220647-r7f3em92til5j67s 1123 po...@12...-20080408212439-54t3bqlhvw1nu4xc 1124 arn...@gm...-20080409193708-y6erfzwrcb1seet3 1125 arn...@gm...-20080409195827-ub6t2s3wdf28nfpz 1126 po...@12...-20080409215055-1zmqhhm2859878c1 1127 arn...@gm...-20080410102447-l4es4cbukkqwcnpc 1128 arn...@gm...-20080410214118-b70g50tl27cq9q29 1129 arn...@gm...-20080411074730-w1pu78qigtx87lx3 1130 arn...@gm...-20080411090724-kwdj9pg9hrv1xhwb 1131 po...@12...-20080411153057-tn7zhxqk0z7ceref + 1027 arn...@gm...-20080323183926-schknwnkgeo7ivdn 1028 zouzou123gen-20080323220411-r8usuc3qxwuh7zsn 1029 zouzou123gen-20080323221249-0su72zaj13e706mk 1030 arn...@gm...-20080324140623-muba1dl46m000o8c 1031 zouzou123gen-20080324141933-qbgr93ugpe0297m6 1032 arn...@gm...-20080324153706-siidja05n84i00b1 1033 arn...@gm...-20080324153823-lhn3awurnu77riln 1034 arn...@gm...-20080324165650-zapppziji67yf5a2 1035 zouzou123gen-20080324175936-4mqc2kh0lo5wtdu2 1036 zouzou123gen-20080325004602-6wdsoym95mjuhwd3 1037 arn...@gm...-20080325100659-8fqy6q65itmghlep 1038 zouzou123gen-20080325175216-s297sdiucukfvijh 1039 arn...@gm...-20080325210137-3dfqyoi8ykosy087 1040 arn...@gm...-20080325211747-nwwy1eb33r071sca 1041 arn...@gm...-20080326084110-qbselrjckku275xi 1042 zouzou123gen-20080326123631-35642mgbk2i4ty32 1043 zouzou123gen-20080326124345-f4xwn2d3ty8ubd6r 1044 arn...@gm...-20080326162031-il0nyms30w0mky43 1045 arn...@gm...-20080326164801-8dru8mjc06xgzjpv 1046 arn...@gm...-20080326170438-uzl2rx8fqnohak7g 1047 zouzou123gen-20080326172821-d6uqcbmfb0c6rwlv 1048 arn...@gm...-20080326213257-qlgdh7m2712p2l0q 1049 arn...@gm...-20080326214313-ktnoekgk3s0wmatz 1050 arn...@gm...-20080326215256-0j1iqrf286b9g7zf 1051 arn...@gm...-20080327082121-hoi22wh1gwjdfbyd 1052 arn...@gm...-20080327120639-um3tukdt374rwvgm 1053 zouzou123gen-20080327130703-6vtek6uxy3vua543 1054 arn...@gm...-20080327215831-dmg5mkufskabwkro 1055 arn...@gm...-20080327231459-cdztcv25alsuyqmf 1056 arn...@gm...-20080328085925-gceybsr53oml1p24 1057 arn...@gm...-20080328200512-1sjuu6bcnl2dyd2a 1058 arn...@gm...-20080328210347-bussqjrm5mfswh7o 1059 arn...@gm...-20080329055630-braiir1dskv7a4qm 1060 arn...@gm...-20080329061558-rck8dz60wpj3c5ja 1061 arn...@gm...-20080329081253-if6o5jn329mbzfpl 1062 arn...@gm...-20080329081619-cb4x930j8sp55cs0 1063 arn...@gm...-20080329103216-hgjzo7ra2zixbztd 1064 arn...@gm...-20080329124042-q3aw4iodmo5kafyp 1065 arn...@gm...-20080329124926-2je1z18p0272zpua 1066 arn...@gm...-20080329150901-ehj9t32en7eps2dp 1067 zouzou123gen-20080329153653-36xlvpik2ns9r84r 1068 zouzou123gen-20080329162703-51xr8hg073pg7wq5 1069 zouzou123gen-20080329234706-8ddipdqu0xeudkql 1070 arn...@gm...-20080330081232-ubqr1171ewalrd4q 1071 zouzou123gen-20080330131607-yppbs3mgyjef1cux 1072 zouzou123gen-20080330134835-yv1nogy77ib1uehd 1073 zouzou123gen-20080331124549-alyw7vugdn30piqy 1074 zouzou123gen-20080331135108-q8frtqsin5bosfzm 1075 zouzou123gen-20080331140757-u94q52yccl5lsifk 1076 zouzou123gen-20080331152513-ue1x5qhigcw51348 1077 arn...@gm...-20080331184436-a8g6chibmg8nswls 1078 arn...@gm...-20080331220648-81485k28qmwruwz6 1079 zouzou123gen-20080401081001-2yjn07cf8s5sxr3a 1080 zouzou123gen-20080401081247-f3p4hdjojnd460jw 1081 zouzou123gen-20080401084117-24a454g8o0x656kg 1082 zouzou123gen-20080401133146-jabb5i8870fg6f66 1083 zouzou123gen-20080401154610-mxdqoo5bksru93e6 1084 arn...@gm...-20080401185530-lqj4tflt5ldmx46f 1085 arn...@gm...-20080401212616-ffl7m0xm8gt15knk 1086 arn...@gm...-20080402084515-ofmnwihzv159jton 1087 arn...@gm...-20080402133105-y70soi38owzl76i9 1088 arn...@gm...-20080402142417-rn2dbkx19wfz3vae 1089 arn...@gm...-20080402144459-u3z3hqvl8aqjc4a0 1090 zouzou123gen-20080402145051-zi8tmvy8u3r2mzu8 1091 arn...@gm...-20080402152137-f397uz1yp9qjvfwh 1092 zouzou123gen-20080402170355-29wda40wk3cy7lu5 1093 arn...@gm...-20080402180628-ipos9li0c4bsmq1h 1094 arn...@gm...-20080402181235-s2a6f4ww4lzayl46 1095 arn...@gm...-20080402193851-6mu64vgep6tijith 1096 arn...@gm...-20080402203810-86zpxsx69q83zf3r 1097 arn...@gm...-20080402204331-so2e8n892o23pejr 1098 poy-20080402224153-225qylr2cfwhqrg7 1099 mrmikejj-20080403125112-o8polh8rkn62umyh 1100 arn...@gm...-20080403125139-8xub76j1xazhfxna 1101 po...@12...-20080403140544-13kockkjho883nb4 1102 po...@12...-20080403143012-bxghtoodiolugpbs 1103 arn...@gm...-20080403190809-bbi4bz5rfcvjnt20 1104 arn...@gm...-20080403205410-czxru1vcg1s4wcws 1105 arn...@gm...-20080403213124-54spdrwszgyimd90 1106 po...@12...-20080404002406-aj74x5tngi6mmmj1 1107 arn...@gm...-20080404122415-mjy07qzbaxyhagra 1108 po...@12...-20080404145445-84lyk5tyy3b3br14 1109 po...@12...-20080404231417-v4v8x7u3f0hm0ejc 1110 po...@12...-20080405001107-14d1ojjof8xhvcj8 1111 arn...@gm...-20080405071929-jmnrul21sxx04kky 1112 arn...@gm...-20080405080105-9qbda7be0pi7y1ai 1113 po...@12...-20080405154555-yuj2n5kyndfjlpsf 1114 po...@12...-20080405220250-8y09d0samsj8ja94 1115 po...@12...-20080406134101-4860ytb61sbu3yhg 1116 po...@12...-20080406155849-2wzxzuzs5m8zpk0g 1117 po...@12...-20080406164835-bv5dydhm3qqydsty 1118 arn...@gm...-20080406210237-c7tyfgiz2sjgv044 1119 po...@12...-20080407114423-4yajg1rffidq76bj 1120 arn...@gm...-20080407194826-c42t4bjzw4vflejn 1121 po...@12...-20080407214303-o7ul1bvcn6gvaoc9 1122 po...@12...-20080407220647-r7f3em92til5j67s 1123 po...@12...-20080408212439-54t3bqlhvw1nu4xc 1124 arn...@gm...-20080409193708-y6erfzwrcb1seet3 1125 arn...@gm...-20080409195827-ub6t2s3wdf28nfpz 1126 po...@12...-20080409215055-1zmqhhm2859878c1 1127 arn...@gm...-20080410102447-l4es4cbukkqwcnpc 1128 arn...@gm...-20080410214118-b70g50tl27cq9q29 1129 arn...@gm...-20080411074730-w1pu78qigtx87lx3 1130 arn...@gm...-20080411090724-kwdj9pg9hrv1xhwb 1131 po...@12...-20080411153057-tn7zhxqk0z7ceref 1132 arn...@gm...-20080411200946-ierqlg8v9vzj18n2 Modified: dcplusplus/trunk/changelog.txt =================================================================== --- dcplusplus/trunk/changelog.txt 2008-04-14 20:29:25 UTC (rev 1156) +++ dcplusplus/trunk/changelog.txt 2008-04-14 20:33:46 UTC (rev 1157) @@ -30,6 +30,7 @@ * Improved transfer speed averaging * [L#212411] Fixed downloading multiple file lists (poy) * Added filter already shared from search results (thanks smir) +* [L#206521] Fixed directory not being removable (thanks poy) -- 0.705 2008-03-14 -- * Several patches for better *nix compatibility of the core (thanks steven sheehy et al) Modified: dcplusplus/trunk/dwt/include/dwt/aspects/AspectFileFilter.h =================================================================== --- dcplusplus/trunk/dwt/include/dwt/aspects/AspectFileFilter.h 2008-04-14 20:29:25 UTC (rev 1156) +++ dcplusplus/trunk/dwt/include/dwt/aspects/AspectFileFilter.h 2008-04-14 20:33:46 UTC (rev 1157) @@ -52,6 +52,8 @@ template<typename WidgetType> class AspectFileFilter { + WidgetType& W() { return *static_cast<WidgetType*>(this); } + public: /// Adds a filter to the object. /** filterName is the friendly name of the filter, normally this would be e.g. @@ -64,7 +66,7 @@ itsFilter.push_back( '\0' ); itsFilter.insert( itsFilter.end(), filter.begin(), filter.end() ); itsFilter.push_back( '\0' ); - return *static_cast<WidgetType*>(this); + return W(); } /// Sets the active filter to the specified index @@ -79,12 +81,12 @@ throw x; } itsActiveFilter = filterNo; - return *static_cast<WidgetType*>(this); + return W(); } WidgetType& setDefaultExtension(const tstring& defExt) { itsDefExt = defExt; - return *static_cast<WidgetType*>(this); + return W(); } /// Returns the active filter of the object @@ -101,42 +103,52 @@ */ WidgetType& setInitialDirectory( const tstring& initialDir ) { itsInitialDir = initialDir; - return *static_cast<WidgetType*>(this); + return W(); } -protected: - Widget* itsParent; + bool open(tstring& file, unsigned flags = 0) { + // get the current directory and restore it later to avoid directory locks + TCHAR buf[MAX_PATH]; + ::GetCurrentDirectory(MAX_PATH, buf); - static const int PATH_BUFFER_SIZE = 32768; + OPENFILENAME ofn = { 0 }; + getOFN(ofn); + ofn.lpstrFile = const_cast<LPTSTR>(file.c_str()); + ofn.Flags = flags; - TCHAR szFile[PATH_BUFFER_SIZE]; - - HWND getParentHandle() { return itsParent ? itsParent->handle() : NULL; } + bool ret = W().openImpl(ofn); + if(ret) + file = ofn.lpstrFile; + ::SetCurrentDirectory(buf); + return ret; + } + +protected: AspectFileFilter(Widget* parent) : itsParent(parent), itsActiveFilter( 0 ) {} - // Fills out the common members of the OPENFILENAME struct. - // This is called for both LoadDialog and for SaveDialog Widgets - void fillOFN( OPENFILENAME & ofn, int flags ) { - ofn.hwndOwner = getParentHandle(); - + void getOFN(OPENFILENAME& ofn) { + ofn.lStructSize = sizeof(OPENFILENAME); + ofn.hwndOwner = itsParent ? itsParent->handle() : NULL; + ofn.lpstrFilter = ifNotEmpty(itsFilter); + ofn.nFilterIndex = this->getActiveFilter(); ofn.nMaxFile = PATH_BUFFER_SIZE; - ofn.lpstrFile = szFile; + ofn.lpstrInitialDir = ifNotEmpty(itsInitialDir); ofn.lpstrDefExt = ifNotEmpty(itsDefExt); - ofn.lpstrInitialDir = ifNotEmpty(itsInitialDir); - ofn.lpstrFilter = ifNotEmpty(itsFilter); - ofn.nFilterIndex = this->getActiveFilter(); - ofn.Flags = flags; } private: + static const int PATH_BUFFER_SIZE = 32768; + + Widget* itsParent; + unsigned int itsActiveFilter; tstring itsInitialDir; tstring itsFilter; tstring itsDefExt; - + static const TCHAR* ifNotEmpty(const tstring& str) { return str.empty() ? NULL : str.c_str(); } Modified: dcplusplus/trunk/dwt/include/dwt/widgets/LoadDialog.h =================================================================== --- dcplusplus/trunk/dwt/include/dwt/widgets/LoadDialog.h 2008-04-14 20:29:25 UTC (rev 1156) +++ dcplusplus/trunk/dwt/include/dwt/widgets/LoadDialog.h 2008-04-14 20:33:46 UTC (rev 1157) @@ -53,6 +53,9 @@ class LoadDialog : public AspectFileFilter<LoadDialog> { + typedef AspectFileFilter<LoadDialog> BaseType; + friend class AspectFileFilter<LoadDialog>; + public: /// Class type typedef LoadDialog ThisType; @@ -63,16 +66,6 @@ typedef ThisType ObjectType; /// Shows the dialog - /** Returns string() or "empty string" if user press cancel. <br> - * Returns a "file path" if user presses ok. <br> - * Use the inherited functions AspectFileFilter::addFilter and - * AspectFileFilter::activeFilter <br> - * before calling this function, if you wish the dialog to show only certain - * types of files. - */ - bool open(tstring& file); - - /// Shows the dialog /** Returns an empty vector if user press cancel. <br> * Returns a vector of "file paths" if user presses ok. <br> * Use the inherited functions AspectFileFilter::addFilter and @@ -80,13 +73,14 @@ * before calling this function, if you wish the dialog to show only certain * types of files. */ - bool open(std::vector<tstring>& files); + bool openMultiple(std::vector<tstring>& files, unsigned flags = 0); // Constructor Taking pointer to parent explicit LoadDialog( Widget * parent = 0 ); - ~LoadDialog() { } private: + // AspectFileFilter + bool openImpl(OPENFILENAME& ofn); }; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -94,7 +88,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// inline LoadDialog::LoadDialog( Widget * parent ) - : AspectFileFilter<LoadDialog>( parent ) + : BaseType( parent ) {} } Modified: dcplusplus/trunk/dwt/include/dwt/widgets/SaveDialog.h =================================================================== --- dcplusplus/trunk/dwt/include/dwt/widgets/SaveDialog.h 2008-04-14 20:29:25 UTC (rev 1156) +++ dcplusplus/trunk/dwt/include/dwt/widgets/SaveDialog.h 2008-04-14 20:33:46 UTC (rev 1157) @@ -37,7 +37,6 @@ #define DWT_SaveDialog_h #include "../Widget.h" -#include "../tstring.h" #include "../aspects/AspectFileFilter.h" namespace dwt { @@ -52,6 +51,9 @@ class SaveDialog : public AspectFileFilter<SaveDialog> { + typedef AspectFileFilter<SaveDialog> BaseType; + friend class AspectFileFilter<SaveDialog>; + public: /// Class type typedef SaveDialog ThisType; @@ -61,19 +63,12 @@ */ typedef ThisType ObjectType; - /// Shows the dialog - /** Returns string() or "empty string" if user press cancel. <br> - * Returns a "file path" if user presses ok. - */ - bool open(tstring& target); - /// Constructor Taking pointer to parent explicit SaveDialog( Widget * parent = 0 ); - virtual ~SaveDialog() - {} - private: + // AspectFileFilter + bool openImpl(OPENFILENAME& ofn); }; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -81,7 +76,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// inline SaveDialog::SaveDialog( Widget * parent ) - : AspectFileFilter<SaveDialog>( parent ) + : BaseType( parent ) { } Modified: dcplusplus/trunk/dwt/src/widgets/LoadDialog.cpp =================================================================== --- dcplusplus/trunk/dwt/src/widgets/LoadDialog.cpp 2008-04-14 20:29:25 UTC (rev 1156) +++ dcplusplus/trunk/dwt/src/widgets/LoadDialog.cpp 2008-04-14 20:33:46 UTC (rev 1157) @@ -33,22 +33,23 @@ namespace dwt { -bool LoadDialog::open(tstring& file) -{ - OPENFILENAME ofn = { sizeof(OPENFILENAME) }; // common dialog box structure - fillOFN( ofn, OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY ); - - if ( ::GetOpenFileName( & ofn ) ) { - file = ofn.lpstrFile; - return true; - } - return false; +bool LoadDialog::openImpl(OPENFILENAME& ofn) { + ofn.Flags |= OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY; + return ::GetOpenFileName(&ofn); } -bool LoadDialog::open(std::vector<tstring>& files) +bool LoadDialog::openMultiple(std::vector<tstring>& files, unsigned flags) { - OPENFILENAME ofn = { sizeof(OPENFILENAME) }; // common dialog box structure - fillOFN( ofn, OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT ); + // get the current directory and restore it later to avoid directory locks + TCHAR buf[MAX_PATH]; + ::GetCurrentDirectory(MAX_PATH, buf); + + OPENFILENAME ofn; + getOFN(ofn); + ofn.lpstrFile = files.empty() ? 0 : const_cast<LPTSTR>(files[0].c_str()); + ofn.Flags = flags | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT; + + bool ret = false; if( ::GetOpenFileName(&ofn) ) { // If a single file is selected, the lpstrFile string is just the path terminated by TWO null bytes @@ -74,9 +75,11 @@ fileName = array_p; // fileName is substring from array_p to next null } } - return true; - } - return false; + ret = true; + } + + ::SetCurrentDirectory(buf); + return ret; } } Modified: dcplusplus/trunk/dwt/src/widgets/SaveDialog.cpp =================================================================== --- dcplusplus/trunk/dwt/src/widgets/SaveDialog.cpp 2008-04-14 20:29:25 UTC (rev 1156) +++ dcplusplus/trunk/dwt/src/widgets/SaveDialog.cpp 2008-04-14 20:33:46 UTC (rev 1157) @@ -33,15 +33,8 @@ namespace dwt { -bool SaveDialog::open(tstring& target) { - OPENFILENAME ofn = { sizeof(OPENFILENAME) }; // common dialog box structure - fillOFN( ofn, 0 ); - - if ( ::GetSaveFileName( & ofn ) ) { - target = ofn.lpstrFile; - return true; - } - return false; +bool SaveDialog::openImpl(OPENFILENAME& ofn) { + return ::GetSaveFileName(&ofn); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |