|
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.
|