/*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program 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 General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < http : //www.gnu.org/licenses/>.
*/
# include "UBPlatformUtils.h"
# include <QtGui>
# include <QProcess>
# include <windows.h>
# include <shellapi.h>
# include "core/memcheck.h"
void UBPlatformUtils : : init ( )
{
initializeKeyboardLayouts ( ) ;
}
QString UBPlatformUtils : : applicationResourcesDirectory ( )
{
return QApplication : : applicationDirPath ( ) ;
}
void UBPlatformUtils : : hideFile ( const QString & filePath )
{
Q_UNUSED ( filePath ) ;
// TODO UB 4.x : hide file from the Windows explorer
}
void UBPlatformUtils : : setFileType ( const QString & filePath , unsigned long fileType )
{
Q_UNUSED ( filePath ) ;
Q_UNUSED ( fileType ) ;
// Probably no fileType equivalent on Windows
}
void UBPlatformUtils : : fadeDisplayOut ( )
{
// NOOP
}
void UBPlatformUtils : : fadeDisplayIn ( )
{
// NOOP
}
QString UBPlatformUtils : : preferredTranslation ( QString pFilePrefix )
{
QString localPreferredLanguage = preferredLanguage ( ) ;
QString qmPath = applicationResourcesDirectory ( ) + " / " + " i18n " + " / " + pFilePrefix + localPreferredLanguage + " .qm " ;
return qmPath ;
}
QString UBPlatformUtils : : preferredLanguage ( )
{
return QLocale : : system ( ) . name ( ) ;
}
void UBPlatformUtils : : runInstaller ( const QString & installerFilePath )
{
QProcess process ;
QString escaped = QString ( " \" " ) + installerFilePath + QString ( " \" /SILENT " ) ;
bool success = process . startDetached ( escaped ) ;
if ( ! success )
{
qWarning ( ) < < " Running ' " < < installerFilePath < < " ' failed (error= " < < process . error ( ) < < " ) " ;
QString verb = " runas " ;
: : ShellExecute ( NULL , verb . utf16 ( ) , installerFilePath . utf16 ( ) , NULL , NULL , SW_HIDE ) ;
}
}
void UBPlatformUtils : : bringPreviousProcessToFront ( )
{
// Mac only
}
QString UBPlatformUtils : : osUserLoginName ( )
{
WCHAR winUserName [ 256 + 1 ] ;
DWORD winUserNameSize = sizeof ( winUserName ) ;
GetUserName ( winUserName , & winUserNameSize ) ;
QString userName = QString : : fromWCharArray ( winUserName , winUserNameSize - 1 ) ;
return userName ;
}
QString UBPlatformUtils : : computerName ( )
{
WCHAR winComputerName [ 256 + 1 ] ;
DWORD winComputerNameSize = sizeof ( winComputerName ) ;
GetComputerName ( winComputerName , & winComputerNameSize ) ;
QString computerName = QString : : fromWCharArray ( winComputerName , winComputerNameSize - 1 ) ;
return computerName ;
}
void UBPlatformUtils : : setDesktopMode ( bool desktop )
{
Q_UNUSED ( desktop ) ;
}
void UBPlatformUtils : : setWindowNonActivableFlag ( QWidget * widget , bool nonAcivable )
{
long exStyle = ( nonAcivable ) ? GetWindowLong ( widget - > winId ( ) , GWL_EXSTYLE ) | WS_EX_NOACTIVATE
: GetWindowLong ( widget - > winId ( ) , GWL_EXSTYLE ) & ~ WS_EX_NOACTIVATE ;
SetWindowLong ( widget - > winId ( ) , GWL_EXSTYLE , exStyle ) ;
}
const KEYBT RUSSIAN_LOCALE [ ] =
{
/* Ј і */ KEYBT ( 0x451 , 0x401 ) ,
/* 1 ! */ KEYBT ( 0x31 , 0x21 ) ,
/* 2 " */ KEYBT ( 0x32 , 0x5c ) ,
/* 3 ? */ KEYBT ( 0x33 , 0x2116 ) ,
/* 4 ; */ KEYBT ( 0x34 , 0x3b ) ,
/* 5 % */ KEYBT ( 0x35 , 0x25 ) ,
/* 6 : */ KEYBT ( 0x36 , 0x3a ) ,
/* 7 ? */ KEYBT ( 0x37 , 0x3f ) ,
/* 8 * */ KEYBT ( 0x38 , 0x2a ) ,
/* 9 ( */ KEYBT ( 0x39 , 0x28 ) ,
/* 0 ) */ KEYBT ( 0x30 , 0x29 ) ,
/* - _ */ KEYBT ( 0x2d , 0x4f ) ,
/* = + */ KEYBT ( 0x3d , 0x2b ) ,
/* К к */ KEYBT ( 0x439 , 0x419 ) ,
/* Г г */ KEYBT ( 0x446 , 0x426 ) ,
/* Х х */ KEYBT ( 0x443 , 0x423 ) ,
/* Л л */ KEYBT ( 0x43a , 0x41a ) ,
/* Е е */ KEYBT ( 0x435 , 0x415 ) ,
/* О о */ KEYBT ( 0x43d , 0x41d ) ,
/* З з */ KEYBT ( 0x433 , 0x413 ) ,
/* Ы ы */ KEYBT ( 0x448 , 0x428 ) ,
/* Э э */ KEYBT ( 0x449 , 0x429 ) ,
/* Ъ ъ */ KEYBT ( 0x437 , 0x417 ) ,
/* И и */ KEYBT ( 0x445 , 0x425 ) ,
/* Я я */ KEYBT ( 0x44a , 0x42a ) ,
/* Ж ж */ KEYBT ( 0x444 , 0x424 ) ,
/* Щ щ */ KEYBT ( 0x44b , 0x42b ) ,
/* Ч ч */ KEYBT ( 0x432 , 0x412 ) ,
/* Б б */ KEYBT ( 0x430 , 0x410 ) ,
/* Р р */ KEYBT ( 0x43f , 0x41f ) ,
/* Т т */ KEYBT ( 0x440 , 0x420 ) ,
/* П п */ KEYBT ( 0x43e , 0x41e ) ,
/* М м */ KEYBT ( 0x43b , 0x41b ) ,
/* Д д */ KEYBT ( 0x434 , 0x414 ) ,
/* Ц ц */ KEYBT ( 0x436 , 0x416 ) ,
/* Ь ь */ KEYBT ( 0x44d , 0x42d ) ,
/* \ / */ KEYBT ( 0x5c , 0x2f ) ,
/* С с */ KEYBT ( 0x44f , 0x42f ) ,
/* Ю ю */ KEYBT ( 0x447 , 0x427 ) ,
/* У у */ KEYBT ( 0x441 , 0x421 ) ,
/* Н н */ KEYBT ( 0x43c , 0x41c ) ,
/* Й й */ KEYBT ( 0x438 , 0x418 ) ,
/* Ф ф */ KEYBT ( 0x442 , 0x422 ) ,
/* Ш ш */ KEYBT ( 0x44c , 0x42c ) ,
/* В в */ KEYBT ( 0x431 , 0x411 ) ,
/* А а */ KEYBT ( 0x44e , 0x42e ) ,
/* . , */ KEYBT ( 0x2e , 0x2c ) } ;
const KEYBT ENGLISH_LOCALE [ ] = {
/* ` ~ */ KEYBT ( 0x60 , 0x7e ) ,
/* 1 ! */ KEYBT ( 0x31 , 0x21 ) ,
/* 2 @ */ KEYBT ( 0x32 , 0x40 ) ,
/* 3 # */ KEYBT ( 0x33 , 0x23 ) ,
/* 4 $ */ KEYBT ( 0x34 , 0x24 ) ,
/* 5 % */ KEYBT ( 0x35 , 0x25 ) ,
/* 6 ^ */ KEYBT ( 0x36 , 0x5e ) ,
/* 7 & */ KEYBT ( 0x37 , 0x26 ) ,
/* 8 * */ KEYBT ( 0x38 , 0x2a ) ,
/* 9 ( */ KEYBT ( 0x39 , 0x28 ) ,
/* 0 ) */ KEYBT ( 0x30 , 0x29 ) ,
/* - _ */ KEYBT ( 0x2d , 0x5f ) ,
/* = + */ KEYBT ( 0x3d , 0x2b ) ,
/* q Q */ KEYBT ( 0x71 , 0x51 ) ,
/* w W */ KEYBT ( 0x77 , 0x57 ) ,
/* e E */ KEYBT ( 0x65 , 0x45 ) ,
/* r R */ KEYBT ( 0x72 , 0x52 ) ,
/* t T */ KEYBT ( 0x74 , 0x54 ) ,
/* y Y */ KEYBT ( 0x79 , 0x59 ) ,
/* u U */ KEYBT ( 0x75 , 0x55 ) ,
/* i I */ KEYBT ( 0x69 , 0x49 ) ,
/* o O */ KEYBT ( 0x6f , 0x4f ) ,
/* p P */ KEYBT ( 0x70 , 0x50 ) ,
/* [ { */ KEYBT ( 0x5b , 0x7b ) ,
/* ] } */ KEYBT ( 0x5d , 0x7d ) ,
/* a A */ KEYBT ( 0x61 , 0x41 ) ,
/* s S */ KEYBT ( 0x73 , 0x53 ) ,
/* d D */ KEYBT ( 0x64 , 0x44 ) ,
/* f F */ KEYBT ( 0x66 , 0x46 ) ,
/* g G */ KEYBT ( 0x67 , 0x47 ) ,
/* h H */ KEYBT ( 0x68 , 0x48 ) ,
/* j J */ KEYBT ( 0x6a , 0x4a ) ,
/* k K */ KEYBT ( 0x6b , 0x4b ) ,
/* l L */ KEYBT ( 0x6c , 0x4c ) ,
/* ; : */ KEYBT ( 0x3b , 0x3a ) ,
/* ' " */ KEYBT ( 0x27 , 0x22 ) ,
/* \ | */ KEYBT ( 0x5c , 0x7c ) ,
/* z Z */ KEYBT ( 0x7a , 0x5a ) ,
/* x X */ KEYBT ( 0x78 , 0x58 ) ,
/* c C */ KEYBT ( 0x63 , 0x43 ) ,
/* v V */ KEYBT ( 0x76 , 0x56 ) ,
/* b B */ KEYBT ( 0x62 , 0x42 ) ,
/* n N */ KEYBT ( 0x6e , 0x4e ) ,
/* m M */ KEYBT ( 0x6d , 0x4d ) ,
/* , < */ KEYBT ( 0x2c , 0x3c ) ,
/* . > */ KEYBT ( 0x2e , 0x3e ) ,
/* / ? */ KEYBT ( 0x2f , 0x5f ) } ;
const KEYBT FRENCH_LOCALE [ ] = {
/* ? ? */ KEYBT ( 0xb2 , 0xb2 ) ,
/* & 1 */ KEYBT ( 0x26 , 0x31 ) ,
/* ? 2 */ KEYBT ( 0xe9 , 0x32 ) ,
/* " 3 */ KEYBT ( 0x22 , 0x33 ) ,
/* ' 4 */ KEYBT ( 0x27 , 0x34 ) ,
/* ( 5 */ KEYBT ( 0x28 , 0x35 ) ,
/* - 6 */ KEYBT ( 0x2d , 0x36 ) ,
/* ? 7 */ KEYBT ( 0xe8 , 0x37 ) ,
/* _ 8 */ KEYBT ( 0x5f , 0x38 ) ,
/* ? 9 */ KEYBT ( 0xe7 , 0x39 ) ,
/* ? 0 */ KEYBT ( 0xe0 , 0x29 ) ,
/* ) ? */ KEYBT ( 0x29 , 0xb0 ) ,
/* = + */ KEYBT ( 0x3d , 0x2b ) ,
/* a A */ KEYBT ( 0x61 , 0x41 ) ,
/* z Z */ KEYBT ( 0x7a , 0x5a ) ,
/* e E */ KEYBT ( 0x65 , 0x45 ) ,
/* r R */ KEYBT ( 0x72 , 0x52 ) ,
/* t T */ KEYBT ( 0x74 , 0x54 ) ,
/* y Y */ KEYBT ( 0x79 , 0x59 ) ,
/* u U */ KEYBT ( 0x75 , 0x55 ) ,
/* i I */ KEYBT ( 0x69 , 0x49 ) ,
/* o O */ KEYBT ( 0x6f , 0x4f ) ,
/* p P */ KEYBT ( 0x70 , 0x50 ) ,
/* ^ ? */ KEYBT ( 0x5e , 0xa8 ) ,
/* $ ? } */ KEYBT ( 0x24 , 0xa3 ) ,
/* q Q */ KEYBT ( 0x71 , 0x51 ) ,
/* s S */ KEYBT ( 0x73 , 0x53 ) ,
/* d D */ KEYBT ( 0x64 , 0x44 ) ,
/* f F */ KEYBT ( 0x66 , 0x46 ) ,
/* g G */ KEYBT ( 0x67 , 0x47 ) ,
/* h H */ KEYBT ( 0x68 , 0x48 ) ,
/* j J */ KEYBT ( 0x6a , 0x4a ) ,
/* k K */ KEYBT ( 0x6b , 0x4b ) ,
/* l L */ KEYBT ( 0x6c , 0x4c ) ,
/* m M */ KEYBT ( 0x6d , 0x4d ) ,
/* ? % */ KEYBT ( 0xf9 , 0x25 ) ,
/* * ? */ KEYBT ( 0x2a , 0xb5 ) ,
/* w W */ KEYBT ( 0x77 , 0x57 ) ,
/* x X */ KEYBT ( 0x78 , 0x58 ) ,
/* c C */ KEYBT ( 0x63 , 0x43 ) ,
/* v V */ KEYBT ( 0x76 , 0x56 ) ,
/* b B */ KEYBT ( 0x62 , 0x42 ) ,
/* n N */ KEYBT ( 0x6e , 0x4e ) ,
/* , ? */ KEYBT ( 0x2c , 0x3f ) ,
/* ; . */ KEYBT ( 0x3b , 0x2e ) ,
/* : / */ KEYBT ( 0x3a , 0x2f ) ,
/* ! ? */ KEYBT ( 0x21 , 0xa7 ) } ;
const KEYBT SWISS_FRENCH_LOCALE [ ] = {
/* § °*/ KEYBT ( 0xa7 , 0xb0 ) ,
/* 1 +*/ KEYBT ( 0x31 , 0x2b ) ,
/* 2 "*/ KEYBT ( 0x32 , 0x22 ) ,
/* 3 **/ KEYBT ( 0x33 , 0x2a ) ,
/* 4 ç*/ KEYBT ( 0x34 , 0xe7 ) ,
/* 5 %*/ KEYBT ( 0x35 , 0x25 ) ,
/* 6 &*/ KEYBT ( 0x36 , 0x26 ) ,
/* 7 /*/ KEYBT ( 0x37 , 0x2f ) ,
/* 8 (*/ KEYBT ( 0x38 , 0x28 ) ,
/* 9 )*/ KEYBT ( 0x39 , 0x29 ) ,
/* 0 =*/ KEYBT ( 0x30 , 0x3d ) ,
/* ' ?*/ KEYBT ( 0x27 , 0x5f ) ,
/* ^ `*/ KEYBT ( 0x5e , 0x60 ) ,
/* q Q*/ KEYBT ( 0x71 , 0x51 ) ,
/* w W*/ KEYBT ( 0x77 , 0x57 ) ,
/* e E*/ KEYBT ( 0x65 , 0x45 ) ,
/* r R*/ KEYBT ( 0x72 , 0x52 ) ,
/* t T*/ KEYBT ( 0x74 , 0x54 ) ,
/* z Z*/ KEYBT ( 0x7a , 0x5a ) ,
/* u U*/ KEYBT ( 0x75 , 0x55 ) ,
/* i I*/ KEYBT ( 0x69 , 0x49 ) ,
/* o O*/ KEYBT ( 0x6f , 0x4f ) ,
/* p P*/ KEYBT ( 0x70 , 0x50 ) ,
/* è ü*/ KEYBT ( 0xe8 , 0xfa ) ,
/* ¨ !*/ KEYBT ( 0xa8 , 0x21 ) ,
/* a A*/ KEYBT ( 0x61 , 0x41 ) ,
/* s S*/ KEYBT ( 0x73 , 0x53 ) ,
/* d D*/ KEYBT ( 0x64 , 0x44 ) ,
/* f F*/ KEYBT ( 0x66 , 0x46 ) ,
/* g G*/ KEYBT ( 0x67 , 0x47 ) ,
/* h H*/ KEYBT ( 0x68 , 0x48 ) ,
/* j J*/ KEYBT ( 0x6a , 0x4a ) ,
/* k K*/ KEYBT ( 0x6b , 0x4b ) ,
/* l L*/ KEYBT ( 0x6c , 0x4c ) ,
/* é ö*/ KEYBT ( 0xe9 , 0xf6 ) ,
/* à ä*/ KEYBT ( 0xe0 , 0xe4 ) ,
/* $ £*/ KEYBT ( 0x24 , 0xa3 ) ,
/* < >*/ KEYBT ( 0x3c , 0x3e ) ,
/* y Y*/ KEYBT ( 0x79 , 0x59 ) ,
/* x X*/ KEYBT ( 0x78 , 0x58 ) ,
/* c C*/ KEYBT ( 0x63 , 0x43 ) ,
/* v V*/ KEYBT ( 0x76 , 0x56 ) ,
/* b B*/ KEYBT ( 0x62 , 0x42 ) ,
/* n N*/ KEYBT ( 0x6e , 0x4e ) ,
/* m M*/ KEYBT ( 0x6d , 0x4d ) ,
/* , ;*/ KEYBT ( 0x2c , 0x3b ) ,
/* . :*/ KEYBT ( 0x2e , 0x3a ) ,
/* - _*/ KEYBT ( 0x2d , 0x5f ) } ;
const KEYBT GERMAN_LOCALE [ ] = {
/* ^ ? */ KEYBT ( 0x5f , 0xb0 ) ,
/* 1 ! */ KEYBT ( 0x31 , 0x21 ) ,
/* 2 " */ KEYBT ( 0x32 , 0x22 ) ,
/* 3 § */ KEYBT ( 0x33 , 0xa7 ) ,
/* 4 $ */ KEYBT ( 0x34 , 0x24 ) ,
/* 5 % */ KEYBT ( 0x35 , 0x25 ) ,
/* 6 & */ KEYBT ( 0x36 , 0x26 ) ,
/* 7 / */ KEYBT ( 0x37 , 0x2f ) ,
/* 8 ( */ KEYBT ( 0x38 , 0x28 ) ,
/* 9 ) */ KEYBT ( 0x39 , 0x29 ) ,
/* 0 = */ KEYBT ( 0x30 , 0x3d ) ,
/* ? ? */ KEYBT ( 0xdf , 0x3f ) ,
/* ` ? */ KEYBT ( 0x60 , 0xb4 ) ,
/* q Q */ KEYBT ( 0x71 , 0x51 ) ,
/* w W */ KEYBT ( 0x77 , 0x57 ) ,
/* e E */ KEYBT ( 0x65 , 0x45 ) ,
/* r R */ KEYBT ( 0x72 , 0x52 ) ,
/* t T */ KEYBT ( 0x74 , 0x54 ) ,
/* z Z */ KEYBT ( 0x7a , 0x5a ) ,
/* u U */ KEYBT ( 0x75 , 0x55 ) ,
/* i I */ KEYBT ( 0x69 , 0x49 ) ,
/* o O */ KEYBT ( 0x6f , 0x4f ) ,
/* p P */ KEYBT ( 0x70 , 0x50 ) ,
/* ? ? */ KEYBT ( 0xfc , 0xdc ) ,
/* + * */ KEYBT ( 0x2b , 0x2a ) ,
/* a A */ KEYBT ( 0x61 , 0x41 ) ,
/* s S */ KEYBT ( 0x73 , 0x53 ) ,
/* d D */ KEYBT ( 0x64 , 0x44 ) ,
/* f F */ KEYBT ( 0x66 , 0x46 ) ,
/* g G */ KEYBT ( 0x67 , 0x47 ) ,
/* h H */ KEYBT ( 0x68 , 0x48 ) ,
/* j J */ KEYBT ( 0x6a , 0x4a ) ,
/* k K */ KEYBT ( 0x6b , 0x4b ) ,
/* l L */ KEYBT ( 0x6c , 0x4c ) ,
/* ? ? */ KEYBT ( 0xf6 , 0xd6 ) ,
/* ? ? */ KEYBT ( 0xe4 , 0xc4 ) ,
/* ' # */ KEYBT ( 0x27 , 0x23 ) ,
/* y Y */ KEYBT ( 0x79 , 0x59 ) ,
/* x X */ KEYBT ( 0x78 , 0x58 ) ,
/* c C */ KEYBT ( 0x63 , 0x43 ) ,
/* v V */ KEYBT ( 0x76 , 0x56 ) ,
/* b B */ KEYBT ( 0x62 , 0x42 ) ,
/* n N */ KEYBT ( 0x6e , 0x4e ) ,
/* m M */ KEYBT ( 0x6d , 0x4d ) ,
/* , ; */ KEYBT ( 0x2c , 0x3b ) ,
/* . : */ KEYBT ( 0x2e , 0x3a ) ,
/* _ - */ KEYBT ( 0x5f , 0x2d ) } ;
void UBPlatformUtils : : initializeKeyboardLayouts ( )
{
nKeyboardLayouts = 5 ;
keyboardLayouts = new UBKeyboardLocale * [ nKeyboardLayouts ] ;
keyboardLayouts [ 0 ] = new UBKeyboardLocale ( " English " , " en " , " " , new QIcon ( " :/images/flags/en.png " ) , ENGLISH_LOCALE ) ;
keyboardLayouts [ 1 ] = new UBKeyboardLocale ( " Russian " , " ru " , " " , new QIcon ( " :/images/flags/ru.png " ) , RUSSIAN_LOCALE ) ;
keyboardLayouts [ 2 ] = new UBKeyboardLocale ( " French " , " fr " , " " , new QIcon ( " :/images/flags/fr.png " ) , FRENCH_LOCALE ) ;
keyboardLayouts [ 3 ] = new UBKeyboardLocale ( " Swiss French " , " fr " , " " , new QIcon ( " :/images/flags/fr.png " ) , SWISS_FRENCH_LOCALE ) ;
keyboardLayouts [ 4 ] = new UBKeyboardLocale ( " German " , " de " , " " , new QIcon ( " :/images/flags/de.png " ) , GERMAN_LOCALE ) ;
}
void UBPlatformUtils : : destroyKeyboardLayouts ( )
{
for ( int i = 0 ; i < nKeyboardLayouts ; i + + )
delete keyboardLayouts [ i ] ;
delete [ ] keyboardLayouts ;
keyboardLayouts = NULL ;
}
QString UBPlatformUtils : : urlFromClipboard ( )
{
QString qsRet ;
// Not implemented yet
return qsRet ;
}