|
|
|
/*
|
|
|
|
This file is part of the KDE libraries
|
|
|
|
Copyright (C) 2004-2005 Jaroslaw Staniek <js@iidea.pl>
|
|
|
|
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the GNU Library General Public
|
|
|
|
License version 2 as published by the Free Software Foundation.
|
|
|
|
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
Library General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
Boston, MA 02110-1301, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <tqstring.h>
|
|
|
|
#include <tqdir.h>
|
|
|
|
#include <tqfileinfo.h>
|
|
|
|
#include <tqstringlist.h>
|
|
|
|
|
|
|
|
#include <windows.h>
|
|
|
|
#include <shellapi.h>
|
|
|
|
#include <tchar.h>
|
|
|
|
|
|
|
|
#define FAILURE \
|
|
|
|
{ \
|
|
|
|
if (ok) \
|
|
|
|
{ \
|
|
|
|
*ok = false; \
|
|
|
|
} \
|
|
|
|
return TQString::null; \
|
|
|
|
}
|
|
|
|
|
|
|
|
KDEWIN32_EXPORT
|
|
|
|
TQString getWin32RegistryValue(HKEY key, const TQString &subKey, const TQString &item, bool *ok)
|
|
|
|
{
|
|
|
|
if (!subKey)
|
|
|
|
{
|
|
|
|
FAILURE;
|
|
|
|
}
|
|
|
|
HKEY hKey;
|
|
|
|
TCHAR *lszValue;
|
|
|
|
DWORD dwType = REG_SZ;
|
|
|
|
DWORD dwSize;
|
|
|
|
if (ERROR_SUCCESS != RegOpenKeyEx(key, subKey.ucs2(), NULL, KEY_READ, &hKey))
|
|
|
|
{
|
|
|
|
FAILURE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ERROR_SUCCESS != RegQueryValueEx(hKey, item.ucs2(), NULL, NULL, NULL, &dwSize))
|
|
|
|
{
|
|
|
|
FAILURE;
|
|
|
|
}
|
|
|
|
|
|
|
|
lszValue = new TCHAR[dwSize];
|
|
|
|
|
|
|
|
if (ERROR_SUCCESS != RegQueryValueEx(hKey, item.ucs2(), NULL, &dwType, (LPBYTE)lszValue, &dwSize))
|
|
|
|
{
|
|
|
|
delete[] lszValue;
|
|
|
|
FAILURE;
|
|
|
|
}
|
|
|
|
RegCloseKey(hKey);
|
|
|
|
|
|
|
|
TQString res = TQString::fromUcs2(lszValue);
|
|
|
|
delete[] lszValue;
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
|
|
|
|
KDEWIN32_EXPORT
|
|
|
|
bool showWin32FilePropertyDialog(const TQString &fileName)
|
|
|
|
{
|
|
|
|
TQString path_ = TQDir::convertSeparators(TQFileInfo(fileName).absFilePath());
|
|
|
|
|
|
|
|
SHELLEXECUTEINFO execInfo;
|
|
|
|
memset(&execInfo, 0, sizeof(execInfo));
|
|
|
|
execInfo.cbSize = sizeof(execInfo);
|
|
|
|
execInfo.fMask = SEE_MASK_INVOKEIDLIST | SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;
|
|
|
|
const TQString verb("properties");
|
|
|
|
execInfo.lpVerb = (TCHAR *)verb.ucs2();
|
|
|
|
execInfo.lpFile = (TCHAR *)path_.ucs2();
|
|
|
|
return ShellExecuteEx(&execInfo);
|
|
|
|
}
|
|
|
|
|
|
|
|
KDEWIN32_EXPORT
|
|
|
|
TQCString getWin32LocaleName()
|
|
|
|
{
|
|
|
|
bool ok;
|
|
|
|
TQString localeNumber = getWin32RegistryValue(HKEY_CURRENT_USER, "Control Panel\\International",
|
|
|
|
"Locale", &ok);
|
|
|
|
if (!ok)
|
|
|
|
{
|
|
|
|
return TQCString();
|
|
|
|
}
|
|
|
|
TQString localeName = getWin32RegistryValue(HKEY_LOCAL_MACHINE,
|
|
|
|
"SYSTEM\\CurrentControlSet\\Control\\Keyboard Layout\\DosKeybCodes", localeNumber,
|
|
|
|
&ok);
|
|
|
|
if (!ok)
|
|
|
|
{
|
|
|
|
return TQCString();
|
|
|
|
}
|
|
|
|
return localeName.latin1();
|
|
|
|
}
|
|
|
|
|
|
|
|
KDEWIN32_EXPORT
|
|
|
|
TQString convertKFileDialogFilterToQFileDialogFilter(const TQString &filter)
|
|
|
|
{
|
|
|
|
TQString kde_filters = filter;
|
|
|
|
int pos;
|
|
|
|
// Strip the escape characters from
|
|
|
|
// escaped '/' characters.
|
|
|
|
|
|
|
|
TQString copy(kde_filters);
|
|
|
|
for (pos = 0; (pos = copy.find("\\/", pos)) != -1; ++pos)
|
|
|
|
{
|
|
|
|
copy.remove(pos, 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
//<js>
|
|
|
|
//we need to convert KDE filter format to Qt format
|
|
|
|
//Qt format: "some text (*.first *.second)" or "All (*)"
|
|
|
|
//KDE format: "*.first *.second" or "*"
|
|
|
|
TQStringList filters = TQStringList::split("\n", kde_filters);
|
|
|
|
TQString current;
|
|
|
|
TQString converted; //finally - converted filter
|
|
|
|
for (TQStringList::ConstIterator it = filters.constBegin(); it != filters.constEnd(); ++it)
|
|
|
|
{
|
|
|
|
current = *it;
|
|
|
|
TQString new_f; //filter part
|
|
|
|
TQString new_name; //filter name part
|
|
|
|
int p = (*it).find('|');
|
|
|
|
if (p != -1)
|
|
|
|
{
|
|
|
|
new_f = current.left(p);
|
|
|
|
new_name = current.mid(p + 1);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
new_f = current;
|
|
|
|
new_name = current; //nothing better
|
|
|
|
}
|
|
|
|
//remove (.....) from name
|
|
|
|
p = new_name.find('(');
|
|
|
|
int p2 = new_name.findRev(')');
|
|
|
|
TQString new_name1, new_name2;
|
|
|
|
if (p != -1)
|
|
|
|
{
|
|
|
|
new_name1 = new_name.left(p);
|
|
|
|
}
|
|
|
|
if (p2 != -1)
|
|
|
|
{
|
|
|
|
new_name2 = new_name.mid(p2 + 1);
|
|
|
|
}
|
|
|
|
if (!new_name1.isEmpty() || !new_name2.isEmpty())
|
|
|
|
{
|
|
|
|
new_name = new_name1.stripWhiteSpace() + " " + new_name2.stripWhiteSpace();
|
|
|
|
}
|
|
|
|
new_name.replace('(', "");
|
|
|
|
new_name.replace(')', "");
|
|
|
|
new_name = new_name.stripWhiteSpace();
|
|
|
|
|
|
|
|
// make filters unique: remove uppercase extensions (case doesn't matter on win32, BTW)
|
|
|
|
TQStringList allfiltersUnique;
|
|
|
|
TQStringList origList(TQStringList::split(" ", new_f));
|
|
|
|
for (TQStringList::ConstIterator it = origList.constBegin();
|
|
|
|
it != origList.constEnd(); ++it)
|
|
|
|
{
|
|
|
|
if ((*it) == (*it).lower())
|
|
|
|
{
|
|
|
|
allfiltersUnique += *it;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!converted.isEmpty())
|
|
|
|
{
|
|
|
|
converted += ";;";
|
|
|
|
}
|
|
|
|
|
|
|
|
converted += (new_name + " (" + allfiltersUnique.join(" ") + ")");
|
|
|
|
}
|
|
|
|
return converted;
|
|
|
|
}
|
|
|
|
|