merged master

This commit is contained in:
John Preston 2015-08-18 19:10:01 +03:00
parent a5c81cfd3b
commit 86f0216447
216 changed files with 52456 additions and 22440 deletions

16
MSVC.md
View file

@ -134,23 +134,23 @@ Open **VS2013 x86 Native Tools Command Prompt.bat** (should be in **\\Program Fi
PKG_CONFIG_PATH="/mingw64/lib/pkgconfig:$PKG_CONFIG_PATH" PKG_CONFIG_PATH="/mingw64/lib/pkgconfig:$PKG_CONFIG_PATH"
./configure --toolchain=msvc --disable-programs --disable-everything --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=wavpack --enable-decoder=opus --enable-decoder=vorbis --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-encoder=libopus --enable-parser=aac --enable-parser=aac_latm --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-demuxer=aac --enable-demuxer=wav --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=mov --enable-muxer=ogg --enable-muxer=opus --extra-ldflags="-libpath:/d/TBuild/Libraries/opus/win32/VS2010/Win32/Release celt.lib silk_common.lib silk_float.lib" ./configure --toolchain=msvc --disable-programs --disable-everything --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=wavpack --enable-decoder=opus --enable-decoder=vorbis --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-decoder=flac --enable-encoder=libopus --enable-parser=aac --enable-parser=aac_latm --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-parser=flac --enable-demuxer=aac --enable-demuxer=wav --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=mov --enable-demuxer=flac --enable-muxer=ogg --enable-muxer=opus --extra-ldflags="-libpath:/d/TBuild/Libraries/opus/win32/VS2010/Win32/Release celt.lib silk_common.lib silk_float.lib"
make make
make install make install
####Qt 5.4.0, slightly patched ####Qt 5.5.0, slightly patched
http://download.qt-project.org/official_releases/qt/5.4/5.4.0/single/qt-everywhere-opensource-src-5.4.0.zip http://download.qt-project.org/official_releases/qt/5.5/5.5.0/single/qt-everywhere-opensource-src-5.5.0.zip
Extract to **D:\TBuild\Libraries\**, rename **qt-everywhere-opensource-src-5.4.0** to **QtStatic** to have **D:\TBuild\Libraries\QtStatic\qtbase\** folder Extract to **D:\TBuild\Libraries\**, rename **qt-everywhere-opensource-src-5.5.0** to **QtStatic** to have **D:\TBuild\Libraries\QtStatic\qtbase\** folder
Apply patch Apply patch
* OR copy (with overwrite!) everything from **D:\TBuild\tdesktop\\\_qt\_5\_4\_0\_patch\** to **D:\TBuild\Libraries\QtStatic\** * OR copy (with overwrite!) everything from **D:\TBuild\tdesktop\\\_qt\_5\_5\_0\_patch\** to **D:\TBuild\Libraries\QtStatic\**
* OR in Git Bash go to **/d/TBuild/Libraries/QtStatic/** and run * OR in Git Bash go to **/d/TBuild/Libraries/QtStatic/** and run
git apply ./../../tdesktop/Telegram/_qt_5_4_0_patch.diff git apply ./../../tdesktop/Telegram/_qt_5_5_0_patch.diff
#####Building library #####Building library
@ -183,8 +183,8 @@ Close all VS2013 instances and install to default location
* Launch VS2013 for configuring Qt Addin * Launch VS2013 for configuring Qt Addin
* QT5 > Qt Options > Add * QT5 > Qt Options > Add
* Version name: **QtStatic.5.4.0** * Version name: **QtStatic.5.5.0**
* Path: **D:\TBuild\Libraries\QtStatic\qtbase** * Path: **D:\TBuild\Libraries\QtStatic\qtbase**
* Default Qt/Win version: **QtStatic.5.4.0** **OK** * Default Qt/Win version: **QtStatic.5.5.0** **OK**
* File > Open > Project/Solution > **D:\TBuild\tdesktop\Telegram.sln** * File > Open > Project/Solution > **D:\TBuild\tdesktop\Telegram.sln**
* Build \ Build Solution (Debug and Release configurations) * Build \ Build Solution (Debug and Release configurations)

View file

@ -50,7 +50,7 @@ Download sources [ffmpeg-2.6.3.tar.bz2](http://ffmpeg.org/releases/ffmpeg-2.6.3.
sudo apt-get -y --force-yes install autoconf automake build-essential libass-dev libfreetype6-dev libgpac-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texi2html zlib1g-dev sudo apt-get -y --force-yes install autoconf automake build-essential libass-dev libfreetype6-dev libgpac-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texi2html zlib1g-dev
sudo apt-get install yasm sudo apt-get install yasm
./configure --prefix=/usr/local --disable-programs --disable-everything --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=wavpack --enable-decoder=opus --enable-decoder=vorbis --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-encoder=libopus --enable-parser=aac --enable-parser=aac_latm --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-demuxer=aac --enable-demuxer=wav --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=mov --enable-muxer=ogg --enable-muxer=opus ./configure --prefix=/usr/local --disable-programs --disable-everything --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=wavpack --enable-decoder=opus --enable-decoder=vorbis --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-decoder=flac --enable-encoder=libopus --enable-parser=aac --enable-parser=aac_latm --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-parser=flac --enable-demuxer=aac --enable-demuxer=wav --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=mov --enable-demuxer=flac --enable-muxer=ogg --enable-muxer=opus
make make
sudo make install sudo make install
@ -76,18 +76,28 @@ then go to **/home/user/TBuild/Libraries/openal-soft/build** and run
make make
sudo make install sudo make install
####Qt 5.4.0, slightly patched ####libxkbcommon (required for Fcitx Qt plugin)
http://download.qt-project.org/official_releases/qt/5.4/5.4.0/single/qt-everywhere-opensource-src-5.4.0.tar.gz In Terminal go to **/home/user/TBuild/Libraries** and run
Extract to **/home/user/TBuild/Libraries**, rename **qt-everywhere-opensource-src-5.4.0** to **QtStatic** to have **/home/user/TBuild/Libraries/QtStatic/qtbase** folder sudo apt-get install xutils-dev bison python-xcbgen
git clone https://github.com/xkbcommon/libxkbcommon.git
./autogen.sh --disable-x11
make
sudo make install
####Qt 5.5.0, slightly patched
http://download.qt-project.org/official_releases/qt/5.5/5.5.0/single/qt-everywhere-opensource-src-5.5.0.tar.gz
Extract to **/home/user/TBuild/Libraries**, rename **qt-everywhere-opensource-src-5.5.0** to **QtStatic** to have **/home/user/TBuild/Libraries/QtStatic/qtbase** folder
Apply patch: Apply patch:
* OR copy (with overwrite!) everything from **/home/user/TBuild/tdesktop/Telegram/\_qt\_5\_4\_0\_patch/** to **/home/user/TBuild/Libraries/QtStatic/** * OR copy (with overwrite!) everything from **/home/user/TBuild/tdesktop/Telegram/\_qt\_5\_5\_0\_patch/** to **/home/user/TBuild/Libraries/QtStatic/**
* OR copy **/home/user/TBuild/tdesktop/Telegram/\_qt\_5\_4\_0\_patch.diff** to **/home/user/TBuild/Libraries/QtStatic/**, go there in Terminal and run * OR copy **/home/user/TBuild/tdesktop/Telegram/\_qt\_5\_5\_0\_patch.diff** to **/home/user/TBuild/Libraries/QtStatic/**, go there in Terminal and run
git apply _qt_5_4_0_patch.diff git apply _qt_5_5_0_patch.diff
#####Building library #####Building library
@ -106,8 +116,8 @@ building (**make** command) will take really long time.
###Building Telegram Desktop ###Building Telegram Desktop
* Launch Qt Creator, all projects will be taken from **/home/user/TBuild/tdesktop/Telegram** * Launch Qt Creator, all projects will be taken from **/home/user/TBuild/tdesktop/Telegram**
* Tools > Options > Build & Run > Qt Versions tab > Add > File System /usr/local/Qt-5.4.0/bin/qmake > **Qt 5.4.0 (Qt-5.4.0)** > Apply * Tools > Options > Build & Run > Qt Versions tab > Add > File System /usr/local/Qt-5.5.0/bin/qmake > **Qt 5.5.0 (Qt-5.5.0)** > Apply
* Tools > Options > Build & Run > Kits tab > Desktop (default) > change **Qt version** to **Qt 5.4.0 (Qt-5.4.0)** > Apply * Tools > Options > Build & Run > Kits tab > Desktop (default) > change **Qt version** to **Qt 5.5.0 (Qt-5.5.0)** > Apply
* Open MetaStyle.pro, configure project with paths **/home/user/TBuild/tdesktop/Linux/DebugIntermediateStyle** and **/home/user/TBuild/tdesktop/Linux/ReleaseIntermediateStyle** and build for Debug * Open MetaStyle.pro, configure project with paths **/home/user/TBuild/tdesktop/Linux/DebugIntermediateStyle** and **/home/user/TBuild/tdesktop/Linux/ReleaseIntermediateStyle** and build for Debug
* Open MetaEmoji.pro, configure project with paths **/home/user/TBuild/tdesktop/Linux/DebugIntermediateEmoji** and **/home/user/TBuild/tdesktop/Linux/ReleaseIntermediateEmoji** and build for Debug * Open MetaEmoji.pro, configure project with paths **/home/user/TBuild/tdesktop/Linux/DebugIntermediateEmoji** and **/home/user/TBuild/tdesktop/Linux/ReleaseIntermediateEmoji** and build for Debug
* Open MetaLang.pro, configure project with paths **/home/user/TBuild/tdesktop/Linux/DebugIntermediateLang** and **/home/user/TBuild/tdesktop/Linux/ReleaseIntermediateLang** and build for Debug * Open MetaLang.pro, configure project with paths **/home/user/TBuild/tdesktop/Linux/DebugIntermediateLang** and **/home/user/TBuild/tdesktop/Linux/ReleaseIntermediateLang** and build for Debug

View file

@ -6,13 +6,15 @@ Source code is published under GPL v3, license is available [here](https://githu
###Supported systems ###Supported systems
* Windows XP - Windows 8.1 (**not** RT) * Windows XP - Windows 10 (**not** RT)
* Mac OS X 10.7 - Mac OS X 10.10 * Mac OS X 10.8 - Mac OS X 10.10
* Mac OS X 10.6 - Mac OS X 10.7 (separate build)
* Ubuntu 12.04 - Ubuntu 14.04 * Ubuntu 12.04 - Ubuntu 14.04
* Fedora 22
###Third-party ###Third-party
* Qt 5.4.0, slightly patched ([LGPL](http://qt-project.org/doc/qt-5/lgpl.html)) * Qt 5.3.2 and 5.5.0, slightly patched ([LGPL](http://qt-project.org/doc/qt-5/lgpl.html))
* OpenSSL 1.0.1g ([OpenSSL License](https://www.openssl.org/source/license.html)) * OpenSSL 1.0.1g ([OpenSSL License](https://www.openssl.org/source/license.html))
* zlib 1.2.8 ([zlib License](http://www.zlib.net/zlib_license.html)) * zlib 1.2.8 ([zlib License](http://www.zlib.net/zlib_license.html))
* libexif 0.6.20 ([LGPL](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html)) * libexif 0.6.20 ([LGPL](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html))
@ -25,7 +27,9 @@ Source code is published under GPL v3, license is available [here](https://githu
###[Build instructions for Visual Studio 2013](https://github.com/telegramdesktop/tdesktop/blob/master/MSVC.md) ###[Build instructions for Visual Studio 2013](https://github.com/telegramdesktop/tdesktop/blob/master/MSVC.md)
###[Build instructions for XCode 6.3.1](https://github.com/telegramdesktop/tdesktop/blob/master/XCODE.md) ###[Build instructions for XCode 6.4](https://github.com/telegramdesktop/tdesktop/blob/master/XCODE.md)
###[Build instructions for XCode 6.4 for OS X 10.6 and 10.7](https://github.com/telegramdesktop/tdesktop/blob/master/XCODEold.md)
###[Build instructions for Qt Creator 3.2.0 Ubuntu](https://github.com/telegramdesktop/tdesktop/blob/master/QTCREATOR.md) ###[Build instructions for Qt Creator 3.2.0 Ubuntu](https://github.com/telegramdesktop/tdesktop/blob/master/QTCREATOR.md)
@ -58,15 +62,12 @@ for Mac:
####MetaEmoji ####MetaEmoji
from two folders creates four sprites and text2emoji replace code
* SourceFiles/art/Emoji
* SourceFiles/art/Emoji_200x
and some inner config creates four sprites and text2emoji replace code
* SourceFiles/art/emoji.png * SourceFiles/art/emoji.png
* SourceFiles/art/emoji_125x.png * SourceFiles/art/emoji_125x.png
* SourceFiles/art/emoji_150x.png * SourceFiles/art/emoji_150x.png
* SourceFiles/art/emoji_200x.png * SourceFiles/art/emoji_200x.png
* SourceFiles/art/emoji_250x.png
* SourceFiles/gui/emoji_config.cpp * SourceFiles/gui/emoji_config.cpp
####MetaStyle ####MetaStyle

View file

@ -1,20 +1,21 @@
AppVersion=`./Version.sh | awk -F " " '{print $1}'` AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'`
AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` AppVersion=`./Version.sh | awk -F " " '{print $2}'`
DevChannel=`./Version.sh | awk -F " " '{print $3}'` AppVersionStr=`./Version.sh | awk -F " " '{print $3}'`
DevChannel=`./Version.sh | awk -F " " '{print $4}'`
DevPostfix='' DevPostfix=''
if [ "$DevChannel" != "0" ]; then if [ "$DevChannel" != "0" ]; then
DevPostfix='.dev' DevPostfix='.dev'
fi fi
if [ ! -f "./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tlinuxupd$AppVersion" ]; then if [ ! -f "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tlinuxupd$AppVersion" ]; then
echo "tlinuxupd$AppVersion not found!"; echo "tlinuxupd$AppVersion not found!";
exit 1 exit 1
fi fi
if [ ! -f "./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.tar.xz" ]; then if [ ! -f "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.tar.xz" ]; then
echo "tsetup.$AppVersionStr$DevPostfix.tar.xz not found!" echo "tsetup.$AppVersionStr$DevPostfix.tar.xz not found!"
exit 1 exit 1
fi fi
scp ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tlinuxupd$AppVersion tmaster:tdesktop/www/tlinux/ scp ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tlinuxupd$AppVersion tmaster:tdesktop/www/tlinux/
scp ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.tar.xz tmaster:tdesktop/www/tlinux/ scp ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.tar.xz tmaster:tdesktop/www/tlinux/

View file

@ -1,21 +1,22 @@
AppVersion=`./Version.sh | awk -F " " '{print $1}'` AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'`
AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` AppVersion=`./Version.sh | awk -F " " '{print $2}'`
DevChannel=`./Version.sh | awk -F " " '{print $3}'` AppVersionStr=`./Version.sh | awk -F " " '{print $3}'`
DevChannel=`./Version.sh | awk -F " " '{print $4}'`
DevPostfix='' DevPostfix=''
if [ "$DevChannel" != "0" ]; then if [ "$DevChannel" != "0" ]; then
DevPostfix='.dev' DevPostfix='.dev'
fi fi
if [ ! -f "./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tlinux32upd$AppVersion" ]; then if [ ! -f "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tlinux32upd$AppVersion" ]; then
echo "tlinux32upd$AppVersion not found!" echo "tlinux32upd$AppVersion not found!"
exit 1 exit 1
fi fi
if [ ! -f "./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.tar.xz" ]; then if [ ! -f "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.tar.xz" ]; then
echo "tsetup32.$AppVersionStr$DevPostfix.zip not found!" echo "tsetup32.$AppVersionStr$DevPostfix.zip not found!"
exit 1 exit 1
fi fi
scp ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tlinux32upd$AppVersion tmaster:tdesktop/www/tlinux32/ scp ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tlinux32upd$AppVersion tmaster:tdesktop/www/tlinux32/
scp ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.tar.xz tmaster:tdesktop/www/tlinux32/ scp ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.tar.xz tmaster:tdesktop/www/tlinux32/

View file

@ -1,38 +1,65 @@
AppVersion=`./Version.sh | awk -F " " '{print $1}'` AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'`
AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` AppVersion=`./Version.sh | awk -F " " '{print $2}'`
DevChannel=`./Version.sh | awk -F " " '{print $3}'` AppVersionStr=`./Version.sh | awk -F " " '{print $3}'`
DevChannel=`./Version.sh | awk -F " " '{print $4}'`
DevPostfix='' DevPostfix=''
if [ "$DevChannel" != "0" ]; then if [ "$DevChannel" != "0" ]; then
DevPostfix='.dev' DevPostfix='.dev'
fi fi
if [ ! -f "./../Mac/Release/deploy/$AppVersionStr$DevPostfix/tmacupd$AppVersion" ]; then if [ ! -f "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmacupd$AppVersion" ]; then
echo "tmacupd$AppVersion not found!" echo "tmacupd$AppVersion not found!"
exit 1 exit 1
fi fi
if [ ! -f "./../Mac/Release/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg" ]; then if [ ! -f "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg" ]; then
echo "tsetup.$AppVersionStr$DevPostfix.dmg not found!" echo "tsetup.$AppVersionStr$DevPostfix.dmg not found!"
exit 1 exit 1
fi fi
if [ ! -f "./../../tother/tsetup/tupdate$AppVersion" ]; then if [ ! -f "./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmac32upd$AppVersion" ]; then
echo "tmac32upd$AppVersion not found!"
exit 1
fi
if [ ! -f "./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.dmg" ]; then
echo "tsetup32.$AppVersionStr$DevPostfix.dmg not found!"
exit 1
fi
if [ ! -f "./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tupdate$AppVersion" ]; then
echo "tupdate$AppVersion not found!" echo "tupdate$AppVersion not found!"
exit 1 exit 1
fi fi
if [ ! -f "./../../tother/tsetup/tportable.$AppVersionStr$DevPostfix.zip" ]; then if [ ! -f "./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip" ]; then
echo "tportable.$AppVersionStr$DevPostfix.zip not found!" echo "tportable.$AppVersionStr$DevPostfix.zip not found!"
exit 1 exit 1
fi fi
if [ ! -f "./../../tother/tsetup/tsetup.$AppVersionStr$DevPostfix.exe" ]; then if [ ! -f "./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe" ]; then
echo "tsetup.$AppVersionStr$DevPostfix.exe not found!" echo "tsetup.$AppVersionStr$DevPostfix.exe not found!"
exit 1 exit 1
fi fi
scp ./../Mac/Release/deploy/$AppVersionStr$DevPostfix/tmacupd$AppVersion tmaster:tdesktop/www/tmac/ if [ ! -d "./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor" ]; then
scp ./../Mac/Release/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg tmaster:tdesktop/www/tmac/ mkdir "./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor"
scp ./../../tother/tsetup/tupdate$AppVersion tmaster:tdesktop/www/tsetup/ fi
scp ./../../tother/tsetup/tportable.$AppVersionStr$DevPostfix.zip tmaster:tdesktop/www/tsetup/
scp ./../../tother/tsetup/tsetup.$AppVersionStr$DevPostfix.exe tmaster:tdesktop/www/tsetup/ scp ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmacupd$AppVersion tmaster:tdesktop/www/tmac/
scp ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg tmaster:tdesktop/www/tmac/
scp ./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmac32upd$AppVersion tmaster:tdesktop/www/tmac32/
scp ./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.dmg tmaster:tdesktop/www/tmac32/
scp ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tupdate$AppVersion tmaster:tdesktop/www/tsetup/
scp ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip tmaster:tdesktop/www/tsetup/
scp ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe tmaster:tdesktop/www/tsetup/
mv -v ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/
cp -v ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmacupd$AppVersion ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/
cp -v ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/
cp -rv ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram.app.dSYM ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/
cp -v ./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmac32upd$AppVersion ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/
cp -v ./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.dmg ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/
cp -rv ./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram.app.dSYM ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram32.app.dSYM

View file

@ -1,26 +1,39 @@
AppVersion=`./Version.sh | awk -F " " '{print $1}'` AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'`
AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` AppVersion=`./Version.sh | awk -F " " '{print $2}'`
DevChannel=`./Version.sh | awk -F " " '{print $3}'` AppVersionStr=`./Version.sh | awk -F " " '{print $3}'`
DevChannel=`./Version.sh | awk -F " " '{print $4}'`
DevPostfix='' DevPostfix=''
if [ "$DevChannel" != "0" ]; then if [ "$DevChannel" != "0" ]; then
DevPostfix='.dev' DevPostfix='.dev'
fi fi
if [ ! -f "./../Win32/Deploy/deploy/$AppVersionStr$DevPostfix/tupdate$AppVersion" ]; then if [ ! -f "./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tupdate$AppVersion" ]; then
echo "tupdate$AppVersion not found!" echo "tupdate$AppVersion not found!"
exit 1 exit 1
fi fi
if [ ! -f "./../Win32/Deploy/deploy/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip" ]; then if [ ! -f "./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip" ]; then
echo "tportable.$AppVersionStr$DevPostfix.zip not found!" echo "tportable.$AppVersionStr$DevPostfix.zip not found!"
exit 1 exit 1
fi fi
if [ ! -f "./../Win32/Deploy/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe" ]; then if [ ! -f "./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe" ]; then
echo "tsetup.$AppVersionStr$DevPostfix.exe not found!" echo "tsetup.$AppVersionStr$DevPostfix.exe not found!"
exit 1 exit 1
fi fi
cp -v ./../Win32/Deploy/deploy/$AppVersionStr$DevPostfix/tupdate$AppVersion /z/TBuild/tother/tsetup/ if [ ! -d "/z/TBuild/tother/tsetup/$AppVersionStrMajor" ]; then
cp -v ./../Win32/Deploy/deploy/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip /z/TBuild/tother/tsetup/ mkdir "/z/TBuild/tother/tsetup/$AppVersionStrMajor"
cp -v ./../Win32/Deploy/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe /z/TBuild/tother/tsetup/ fi
if [ ! -d "/z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix" ]; then
mkdir "/z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix"
fi
cp -v ./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tupdate$AppVersion /z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/
cp -v ./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip /z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/
cp -v ./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe /z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/
cp -v ./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram.pdb /z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/
cp -v ./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Updater.exe /z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/
cp -v ./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Updater.pdb /z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/

View file

@ -27,7 +27,7 @@ HEADERS += \
./SourceFiles/_other/memain.h \ ./SourceFiles/_other/memain.h \
./SourceFiles/_other/genemoji.h \ ./SourceFiles/_other/genemoji.h \
INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui\ INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui\
./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore\ ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore\
./../../Libraries/QtStatic/qtbase/include\ ./../../Libraries/QtStatic/qtbase/include\

View file

@ -105,7 +105,7 @@
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile> <OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;qtpcred.lib;qtfreetyped.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile> <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
<ProfileGuidedDatabase>$(IntDir)$(TargetName).pgd</ProfileGuidedDatabase> <ProfileGuidedDatabase>$(IntDir)$(TargetName).pgd</ProfileGuidedDatabase>
@ -123,7 +123,7 @@
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile> <OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;glu32.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;glu32.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>false</GenerateDebugInformation> <GenerateDebugInformation>false</GenerateDebugInformation>
<ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile> <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
<ProfileGuidedDatabase>$(IntDir)$(TargetName).pgd</ProfileGuidedDatabase> <ProfileGuidedDatabase>$(IntDir)$(TargetName).pgd</ProfileGuidedDatabase>
@ -142,7 +142,7 @@
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile> <OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;glu32.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;glu32.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>false</GenerateDebugInformation> <GenerateDebugInformation>false</GenerateDebugInformation>
<ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile> <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
<ProfileGuidedDatabase>$(IntDir)$(TargetName).pgd</ProfileGuidedDatabase> <ProfileGuidedDatabase>$(IntDir)$(TargetName).pgd</ProfileGuidedDatabase>

View file

@ -21,6 +21,7 @@
/* End PBXAggregateTarget section */ /* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07D795491B5544B200DE9598 /* qtpcre */; };
1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; }; 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; };
1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; }; 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; };
328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; }; 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; };
@ -62,160 +63,161 @@
/* End PBXContainerItemProxy section */ /* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.4.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.5.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = "<absolute>"; }; 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = "<absolute>"; };
075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = "<absolute>"; }; 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = "<absolute>"; };
0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/unix.conf"; sourceTree = "<absolute>"; }; 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.5.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<group>"; };
111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = "<absolute>"; }; 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/unix.conf"; sourceTree = "<absolute>"; };
16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = "<absolute>"; }; 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = "<absolute>"; };
16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = "<absolute>"; };
1F47C130E1F45B4A5A91DB5E /* genemoji.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = genemoji.cpp; path = SourceFiles/_other/genemoji.cpp; sourceTree = "<absolute>"; }; 1F47C130E1F45B4A5A91DB5E /* genemoji.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = genemoji.cpp; path = SourceFiles/_other/genemoji.cpp; sourceTree = "<absolute>"; };
1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = "<absolute>"; }; 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = "<absolute>"; };
23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = "<absolute>"; }; 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = "<absolute>"; };
2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = "<absolute>"; }; 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = "<absolute>"; };
247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = "<absolute>"; }; 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = "<absolute>"; };
24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = "<absolute>"; }; 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = "<absolute>"; };
28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = "<absolute>"; }; 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = "<absolute>"; };
293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = "<absolute>"; }; 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = "<absolute>"; };
2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = "<absolute>"; }; 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = "<absolute>"; };
2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = "<absolute>"; }; 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = "<absolute>"; };
311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = "<absolute>"; }; 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = "<absolute>"; };
31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = "<absolute>"; }; 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = "<absolute>"; };
346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = "<absolute>"; }; 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = "<absolute>"; };
360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = "<absolute>"; }; 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = "<absolute>"; };
3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = "<absolute>"; }; 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = "<absolute>"; };
382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = "<absolute>"; }; 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = "<absolute>"; };
3AC2626B26B65AA88F06BFB5 /* memain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = memain.cpp; path = SourceFiles/_other/memain.cpp; sourceTree = "<absolute>"; }; 3AC2626B26B65AA88F06BFB5 /* memain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = memain.cpp; path = SourceFiles/_other/memain.cpp; sourceTree = "<absolute>"; };
3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = "<absolute>"; }; 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = "<absolute>"; };
45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf"; sourceTree = "<absolute>"; }; 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf"; sourceTree = "<absolute>"; };
45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = "<absolute>"; }; 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = "<absolute>"; };
4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.4.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.5.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = "<absolute>"; }; 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = "<absolute>"; };
4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; }; 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; };
4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = "<absolute>"; }; 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = "<absolute>"; };
5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = "<absolute>"; }; 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = "<absolute>"; };
58308B26DE991A86E8589883 /* genemoji.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = genemoji.h; path = SourceFiles/_other/genemoji.h; sourceTree = "<absolute>"; }; 58308B26DE991A86E8589883 /* genemoji.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = genemoji.h; path = SourceFiles/_other/genemoji.h; sourceTree = "<absolute>"; };
5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.4.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.5.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = "<absolute>"; }; 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = "<absolute>"; };
5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = "<absolute>"; }; 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = "<absolute>"; };
5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = "<absolute>"; }; 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = "<absolute>"; };
6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = "<absolute>"; }; 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = "<absolute>"; };
63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf"; sourceTree = "<absolute>"; }; 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf"; sourceTree = "<absolute>"; };
669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf"; sourceTree = "<absolute>"; }; 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf"; sourceTree = "<absolute>"; };
69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = "<absolute>"; }; 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = "<absolute>"; };
6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = "<absolute>"; }; 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = "<absolute>"; };
6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qdevice.pri"; sourceTree = "<absolute>"; }; 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qdevice.pri"; sourceTree = "<absolute>"; };
74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = "<absolute>"; }; 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = "<absolute>"; };
77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = "<absolute>"; }; 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = "<absolute>"; };
7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = "<absolute>"; }; 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = "<absolute>"; };
7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = "<absolute>"; }; 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = "<absolute>"; };
7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = "<absolute>"; }; 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = "<absolute>"; };
7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = "<absolute>"; }; 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = "<absolute>"; };
7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = "<absolute>"; }; 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = "<absolute>"; };
817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/macx.conf"; sourceTree = "<absolute>"; }; 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/macx.conf"; sourceTree = "<absolute>"; };
82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = "<absolute>"; }; 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = "<absolute>"; };
83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = "<absolute>"; }; 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = "<absolute>"; };
85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = "<absolute>"; }; 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = "<absolute>"; };
87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = "<absolute>"; }; 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = "<absolute>"; };
87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = "<absolute>"; }; 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = "<absolute>"; };
8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = "<absolute>"; }; 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = "<absolute>"; };
892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = "<absolute>"; }; 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = "<absolute>"; };
89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = "<absolute>"; }; 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = "<absolute>"; };
8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = "<absolute>"; }; 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = "<absolute>"; };
8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = "<absolute>"; }; 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = "<absolute>"; };
8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = "<absolute>"; }; 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = "<absolute>"; };
8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang.conf"; sourceTree = "<absolute>"; }; 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang.conf"; sourceTree = "<absolute>"; };
8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; }; 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = "<absolute>"; }; 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = "<absolute>"; };
8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = "<absolute>"; }; 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = "<absolute>"; };
8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = "<absolute>"; }; 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = "<absolute>"; };
8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = "<absolute>"; }; 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = "<absolute>"; };
93E4BE1A02365B73BAF00B73 /* moc_genemoji.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_genemoji.cpp; path = GeneratedFiles/Debug/moc_genemoji.cpp; sourceTree = "<absolute>"; }; 93E4BE1A02365B73BAF00B73 /* moc_genemoji.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_genemoji.cpp; path = GeneratedFiles/Debug/moc_genemoji.cpp; sourceTree = "<absolute>"; };
946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = "<absolute>"; }; 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = "<absolute>"; };
9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; }; 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; };
9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = "<absolute>"; }; 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = "<absolute>"; };
9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; 9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = "<absolute>"; }; A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = "<absolute>"; };
A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; };
A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = "<absolute>"; }; A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = "<absolute>"; };
A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = "<absolute>"; }; A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = "<absolute>"; };
A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = "<absolute>"; }; A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = "<absolute>"; };
A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = "<absolute>"; }; A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = "<absolute>"; };
AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = "<absolute>"; }; AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = "<absolute>"; };
AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = "<absolute>"; }; AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = "<absolute>"; };
AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = "<absolute>"; }; AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = "<absolute>"; };
ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = "<absolute>"; }; ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = "<absolute>"; };
ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = "<absolute>"; }; ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = "<absolute>"; };
ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = "<absolute>"; }; ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = "<absolute>"; };
AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = "<absolute>"; }; AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = "<absolute>"; };
B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = "<absolute>"; }; B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = "<absolute>"; };
B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = "<absolute>"; }; B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = "<absolute>"; };
B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = "<absolute>"; }; B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = "<absolute>"; };
B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = "<absolute>"; }; B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = "<absolute>"; };
B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = "<absolute>"; }; B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = "<absolute>"; };
B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = "<absolute>"; }; B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = "<absolute>"; };
B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = "<absolute>"; }; B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = "<absolute>"; };
B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = "<absolute>"; }; B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = "<absolute>"; };
B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = "<absolute>"; }; B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = "<absolute>"; };
BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = "<absolute>"; }; BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = "<absolute>"; };
BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = "<absolute>"; }; BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = "<absolute>"; };
BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = "<absolute>"; }; BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = "<absolute>"; };
BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = "<absolute>"; }; BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = "<absolute>"; };
C3345709A0BD182590087379 /* MetaEmoji.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MetaEmoji.app; sourceTree = BUILT_PRODUCTS_DIR; }; C3345709A0BD182590087379 /* MetaEmoji.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MetaEmoji.app; sourceTree = BUILT_PRODUCTS_DIR; };
C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = "<absolute>"; }; C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = "<absolute>"; };
C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = "<absolute>"; }; C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = "<absolute>"; };
C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = "<absolute>"; }; C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = "<absolute>"; };
CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = "<absolute>"; }; CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = "<absolute>"; };
CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = "<absolute>"; }; CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = "<absolute>"; };
CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = "<absolute>"; }; CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = "<absolute>"; };
CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = "<absolute>"; }; CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = "<absolute>"; };
CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = "<absolute>"; }; CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = "<absolute>"; };
D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = "<absolute>"; }; D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = "<absolute>"; };
D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = "<absolute>"; }; D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = "<absolute>"; };
D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = "<absolute>"; }; D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = "<absolute>"; };
D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qconfig.pri"; sourceTree = "<absolute>"; }; D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qconfig.pri"; sourceTree = "<absolute>"; };
D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = "<absolute>"; }; D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = "<absolute>"; };
D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.4.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.5.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.4.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.5.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = "<absolute>"; }; D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = "<absolute>"; };
D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = "<absolute>"; }; D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = "<absolute>"; };
D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = "<absolute>"; }; D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = "<absolute>"; };
DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = "<absolute>"; }; DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = "<absolute>"; };
DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = "<absolute>"; }; DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = "<absolute>"; };
DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; };
E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = "<absolute>"; }; E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = "<absolute>"; };
E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = "<absolute>"; }; E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = "<absolute>"; };
E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = "<absolute>"; }; E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = "<absolute>"; };
E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = "<absolute>"; }; E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = "<absolute>"; };
E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = "<absolute>"; }; E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = "<absolute>"; };
E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = "<absolute>"; }; E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = "<absolute>"; };
E981470FA003A8DCE3C52E59 /* memain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = memain.h; path = SourceFiles/_other/memain.h; sourceTree = "<absolute>"; }; E981470FA003A8DCE3C52E59 /* memain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = memain.h; path = SourceFiles/_other/memain.h; sourceTree = "<absolute>"; };
EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = "<absolute>"; }; EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = "<absolute>"; };
EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = "<absolute>"; }; EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = "<absolute>"; };
EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = "<absolute>"; }; EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = "<absolute>"; };
EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/mac.conf"; sourceTree = "<absolute>"; }; EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/mac.conf"; sourceTree = "<absolute>"; };
F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = "<absolute>"; }; F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = "<absolute>"; };
F13124A218B58585B027D96A /* MetaEmoji.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = MetaEmoji.pro; sourceTree = "<absolute>"; }; F13124A218B58585B027D96A /* MetaEmoji.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = MetaEmoji.pro; sourceTree = "<absolute>"; };
F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = "<absolute>"; }; F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = "<absolute>"; };
F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf"; sourceTree = "<absolute>"; }; F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf"; sourceTree = "<absolute>"; };
F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = "<absolute>"; }; F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = "<absolute>"; };
F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = "<absolute>"; }; F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = "<absolute>"; };
F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = "<absolute>"; }; F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = "<absolute>"; };
F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = "<absolute>"; }; F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = "<absolute>"; };
FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = "<absolute>"; }; FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = "<absolute>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@ -247,6 +249,7 @@
F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */, F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */,
9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */, 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */,
8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */, 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */,
07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */,
B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */, B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */,
); );
name = "Link Binary With Libraries"; name = "Link Binary With Libraries";
@ -294,127 +297,127 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
F13124A218B58585B027D96A /* MetaEmoji.pro */, F13124A218B58585B027D96A /* MetaEmoji.pro */,
6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */, 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */,
669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */, 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */,
0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */, 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */,
EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */, EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */,
817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */, 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */,
45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */, 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */,
A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */, A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */,
8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */, 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */,
F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */, F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */,
D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */, D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */,
ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */, ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */,
2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */,
BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */,
CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */, CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */,
77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */, 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */,
7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */, 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */,
7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */, 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */,
5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */, 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */,
7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */, 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */,
89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */, 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */,
F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */, F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */,
7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */, 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */,
69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */,
360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */, 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */,
4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */, 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */,
23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */, 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */,
D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */, D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */,
FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */, FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */,
D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */, D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */,
A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */, A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */,
33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */, 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */,
D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */, D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */,
E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */, E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */,
28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */,
D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */,
293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */, 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */,
382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */, 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */,
8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */, 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */,
B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */, B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */,
5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */, 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */,
E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */, E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */,
E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */, E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */,
5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */,
8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */,
F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */, F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */,
E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */, E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */,
6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */, 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */,
D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */, D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */,
B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */, B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */,
6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */, 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */,
4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */,
DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */, DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */,
ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */, ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */,
5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */,
16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */, 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */,
8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */, 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */,
82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */,
D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */, D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */,
B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */,
CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */, CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */,
C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */, C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */,
CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */, CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */,
A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */, A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */,
85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */, 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */,
BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */, BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */,
BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */, BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */,
311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */, 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */,
7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */, 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */,
075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */, 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */,
ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */, ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */,
8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */, 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */,
DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */, DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */,
8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */, 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */,
E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */, E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */,
B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */, B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */,
8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */, 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */,
87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */, 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */,
A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */, A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */,
8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */, 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */,
AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */, AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */,
E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */, E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */,
2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */,
F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */,
D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */,
1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */,
F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */,
AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */, AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */,
EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */,
111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */, 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */,
3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */,
2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */,
EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */, EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */,
C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */, C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */,
45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */, 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */,
B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */, B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */,
F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */,
B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */,
EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */,
3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */,
946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */, 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */,
CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */,
9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */,
B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */, B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */,
F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */, F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */,
CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */,
247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */,
87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */,
24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */,
060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */, 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */,
BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */, BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */,
B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */,
74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */,
C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */,
AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */,
8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */,
892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */,
A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */,
346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */, 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */,
B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */, B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */,
63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */, 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */,
85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */, 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */,
AB745978DF0F41D1801ABDA6 /* .qmake.stash */, AB745978DF0F41D1801ABDA6 /* .qmake.stash */,
); );
name = "Supporting Files"; name = "Supporting Files";
@ -431,6 +434,7 @@
AF39DD055C3EF8226FBE929D /* Frameworks */ = { AF39DD055C3EF8226FBE929D /* Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
07D795491B5544B200DE9598 /* qtpcre */,
AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */, AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */,
DFD7912080BC557230093752 /* ApplicationServices.framework */, DFD7912080BC557230093752 /* ApplicationServices.framework */,
9742F24EE18EA44D52824F1E /* CoreServices.framework */, 9742F24EE18EA44D52824F1E /* CoreServices.framework */,
@ -598,25 +602,25 @@
GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_FUNCTION = NO;
GCC_WARN_UNUSED_VARIABLE = NO; GCC_WARN_UNUSED_VARIABLE = NO;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui,
../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore,
../../Libraries/QtStatic/qtbase/include, ../../Libraries/QtStatic/qtbase/include,
"/usr/local/Qt-5.4.0/include", "/usr/local/Qt-5.5.0/include",
"/usr/local/Qt-5.4.0/include/QtGui", "/usr/local/Qt-5.5.0/include/QtGui",
"/usr/local/Qt-5.4.0/include/QtCore", "/usr/local/Qt-5.5.0/include/QtCore",
GeneratedFiles/Debug, GeneratedFiles/Debug,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers,
"/usr/local/Qt-5.4.0/mkspecs/macx-clang", "/usr/local/Qt-5.5.0/mkspecs/macx-clang",
); );
INFOPLIST_FILE = Emoji.plist; INFOPLIST_FILE = Emoji.plist;
INSTALL_DIR = ../Mac/ReleaseEmoji/; INSTALL_DIR = ../Mac/ReleaseEmoji/;
LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++";
LIBRARY_SEARCH_PATHS = ( LIBRARY_SEARCH_PATHS = (
/System/Library/Frameworks/, /System/Library/Frameworks/,
"/usr/local/Qt-5.4.0/lib", "/usr/local/Qt-5.5.0/lib",
"/usr/local/Qt-5.4.0/plugins/platforms", "/usr/local/Qt-5.5.0/plugins/platforms",
"/usr/local/Qt-5.4.0/plugins/imageformats", "/usr/local/Qt-5.5.0/plugins/imageformats",
); );
MACOSX_DEPLOYMENT_TARGET = 10.7; MACOSX_DEPLOYMENT_TARGET = 10.7;
OBJROOT = ./../Mac/ReleaseIntermediateEmoji/; OBJROOT = ./../Mac/ReleaseIntermediateEmoji/;
@ -645,10 +649,10 @@
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-headerpad_max_install_names", "-headerpad_max_install_names",
"-stdlib=libc++", "-stdlib=libc++",
"-L/usr/local/Qt-5.4.0/lib", "-L/usr/local/Qt-5.5.0/lib",
"-L/usr/local/Qt-5.4.0/plugins/platforms", "-L/usr/local/Qt-5.5.0/plugins/platforms",
"-lcups", "-lcups",
"-L/usr/local/Qt-5.4.0/plugins/imageformats", "-L/usr/local/Qt-5.5.0/plugins/imageformats",
"-lz", "-lz",
"-lm", "-lm",
); );
@ -688,25 +692,25 @@
GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_FUNCTION = NO;
GCC_WARN_UNUSED_VARIABLE = NO; GCC_WARN_UNUSED_VARIABLE = NO;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui,
../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore,
../../Libraries/QtStatic/qtbase/include, ../../Libraries/QtStatic/qtbase/include,
"/usr/local/Qt-5.4.0/include", "/usr/local/Qt-5.5.0/include",
"/usr/local/Qt-5.4.0/include/QtGui", "/usr/local/Qt-5.5.0/include/QtGui",
"/usr/local/Qt-5.4.0/include/QtCore", "/usr/local/Qt-5.5.0/include/QtCore",
GeneratedFiles/Debug, GeneratedFiles/Debug,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers,
"/usr/local/Qt-5.4.0/mkspecs/macx-clang", "/usr/local/Qt-5.5.0/mkspecs/macx-clang",
); );
INFOPLIST_FILE = Emoji.plist; INFOPLIST_FILE = Emoji.plist;
INSTALL_DIR = ../Mac/DebugEmoji/; INSTALL_DIR = ../Mac/DebugEmoji/;
LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++";
LIBRARY_SEARCH_PATHS = ( LIBRARY_SEARCH_PATHS = (
/System/Library/Frameworks/, /System/Library/Frameworks/,
"/usr/local/Qt-5.4.0/lib", "/usr/local/Qt-5.5.0/lib",
"/usr/local/Qt-5.4.0/plugins/platforms", "/usr/local/Qt-5.5.0/plugins/platforms",
"/usr/local/Qt-5.4.0/plugins/imageformats", "/usr/local/Qt-5.5.0/plugins/imageformats",
); );
MACOSX_DEPLOYMENT_TARGET = 10.7; MACOSX_DEPLOYMENT_TARGET = 10.7;
OBJROOT = ./../Mac/DebugIntermediateEmoji/; OBJROOT = ./../Mac/DebugIntermediateEmoji/;
@ -736,10 +740,10 @@
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-headerpad_max_install_names", "-headerpad_max_install_names",
"-stdlib=libc++", "-stdlib=libc++",
"-L/usr/local/Qt-5.4.0/lib", "-L/usr/local/Qt-5.5.0/lib",
"-L/usr/local/Qt-5.4.0/plugins/platforms", "-L/usr/local/Qt-5.5.0/plugins/platforms",
"-lcups", "-lcups",
"-L/usr/local/Qt-5.4.0/plugins/imageformats", "-L/usr/local/Qt-5.5.0/plugins/imageformats",
"-lz", "-lz",
"-lm", "-lm",
); );

View file

@ -1,21 +1,21 @@
############################################################################# #############################################################################
# Makefile for building: ../Mac/DebugEmoji/MetaEmoji.app/Contents/MacOS/MetaEmoji # Makefile for building: ../Mac/DebugEmoji/MetaEmoji.app/Contents/MacOS/MetaEmoji
# Generated by qmake (3.0) (Qt 5.4.0) # Generated by qmake (3.0) (Qt 5.5.0)
# Project: MetaEmoji.pro # Project: MetaEmoji.pro
# Template: app # Template: app
# Command: /usr/local/Qt-5.4.0/bin/qmake -spec macx-xcode -o MetaEmoji.xcodeproj/project.pbxproj MetaEmoji.pro # Command: /usr/local/Qt-5.5.0/bin/qmake -spec macx-xcode -o MetaEmoji.xcodeproj/project.pbxproj MetaEmoji.pro
############################################################################# #############################################################################
MAKEFILE = project.pbxproj MAKEFILE = project.pbxproj
MOC = /usr/local/Qt-5.4.0/bin/moc MOC = /usr/local/Qt-5.5.0/bin/moc
UIC = UIC =
LEX = flex LEX = flex
LEXFLAGS = LEXFLAGS =
YACC = yacc YACC = yacc
YACCFLAGS = -d YACCFLAGS = -d
DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB
INCPATH = -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers INCPATH = -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers
DEL_FILE = rm -f DEL_FILE = rm -f
MOVE = mv -f MOVE = mv -f
@ -54,7 +54,7 @@ GeneratedFiles/Debug/moc_genemoji.cpp: ../../Libraries/QtStatic/qtbase/include/Q
../../Libraries/QtStatic/qtbase/include/QtCore/QCoreApplication \ ../../Libraries/QtStatic/qtbase/include/QtCore/QCoreApplication \
../../Libraries/QtStatic/qtbase/include/QtGui/QGuiApplication \ ../../Libraries/QtStatic/qtbase/include/QtGui/QGuiApplication \
SourceFiles/_other/genemoji.h SourceFiles/_other/genemoji.h
/usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/_other/genemoji.h -o GeneratedFiles/Debug/moc_genemoji.cpp /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/_other/genemoji.h -o GeneratedFiles/Debug/moc_genemoji.cpp
compiler_moc_source_make_all: compiler_moc_source_make_all:
compiler_moc_source_clean: compiler_moc_source_clean:

View file

@ -27,7 +27,7 @@ HEADERS += \
./SourceFiles/_other/mlmain.h \ ./SourceFiles/_other/mlmain.h \
./SourceFiles/_other/genlang.h \ ./SourceFiles/_other/genlang.h \
INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui\ INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui\
./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore\ ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore\
./../../Libraries/QtStatic/qtbase/include\ ./../../Libraries/QtStatic/qtbase/include\

View file

@ -105,7 +105,7 @@
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile> <OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;qtpcred.lib;qtfreetyped.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile> <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
<ProfileGuidedDatabase>$(IntDir)$(TargetName).pgd</ProfileGuidedDatabase> <ProfileGuidedDatabase>$(IntDir)$(TargetName).pgd</ProfileGuidedDatabase>
@ -123,7 +123,7 @@
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile> <OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>false</GenerateDebugInformation> <GenerateDebugInformation>false</GenerateDebugInformation>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
@ -140,7 +140,7 @@
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile> <OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>false</GenerateDebugInformation> <GenerateDebugInformation>false</GenerateDebugInformation>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>

View file

@ -23,6 +23,7 @@
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
0E4EEB1BFC9FA7662AD934C6 /* moc_genlang.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 680437016D61255E7F889A94 /* moc_genlang.cpp */; settings = {ATTRIBUTES = (); }; }; 0E4EEB1BFC9FA7662AD934C6 /* moc_genlang.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 680437016D61255E7F889A94 /* moc_genlang.cpp */; settings = {ATTRIBUTES = (); }; };
07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07D795491B5544B200DE9598 /* qtpcre */; };
1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; }; 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; };
1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; }; 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; };
328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; }; 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; };
@ -63,160 +64,161 @@
/* End PBXContainerItemProxy section */ /* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.4.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.5.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = "<absolute>"; }; 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = "<absolute>"; };
075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = "<absolute>"; }; 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = "<absolute>"; };
0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/unix.conf"; sourceTree = "<absolute>"; }; 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.5.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<group>"; };
111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = "<absolute>"; }; 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/unix.conf"; sourceTree = "<absolute>"; };
16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = "<absolute>"; }; 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = "<absolute>"; };
1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = "<absolute>"; }; 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = "<absolute>"; };
23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = "<absolute>"; }; 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = "<absolute>"; };
2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = "<absolute>"; }; 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = "<absolute>"; };
247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = "<absolute>"; }; 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = "<absolute>"; };
24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = "<absolute>"; }; 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = "<absolute>"; };
28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = "<absolute>"; }; 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = "<absolute>"; };
293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = "<absolute>"; }; 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = "<absolute>"; };
2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = "<absolute>"; }; 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = "<absolute>"; };
2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = "<absolute>"; }; 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = "<absolute>"; };
311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = "<absolute>"; }; 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = "<absolute>"; };
31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = "<absolute>"; };
31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
33A9E861B2FAD8C39E154E7C /* MetaLang.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = MetaLang.pro; sourceTree = "<absolute>"; }; 33A9E861B2FAD8C39E154E7C /* MetaLang.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = MetaLang.pro; sourceTree = "<absolute>"; };
33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = "<absolute>"; }; 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = "<absolute>"; };
346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = "<absolute>"; }; 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = "<absolute>"; };
360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = "<absolute>"; }; 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = "<absolute>"; };
3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = "<absolute>"; }; 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = "<absolute>"; };
382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = "<absolute>"; }; 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = "<absolute>"; };
3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = "<absolute>"; }; 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = "<absolute>"; };
45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf"; sourceTree = "<absolute>"; }; 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf"; sourceTree = "<absolute>"; };
45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = "<absolute>"; }; 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = "<absolute>"; };
4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.4.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.5.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = "<absolute>"; }; 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = "<absolute>"; };
4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; }; 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; };
4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = "<absolute>"; }; 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = "<absolute>"; };
54D6D1A7260739988F6FC406 /* genlang.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = genlang.h; path = SourceFiles/_other/genlang.h; sourceTree = "<absolute>"; }; 54D6D1A7260739988F6FC406 /* genlang.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = genlang.h; path = SourceFiles/_other/genlang.h; sourceTree = "<absolute>"; };
5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = "<absolute>"; }; 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = "<absolute>"; };
5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.4.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.5.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = "<absolute>"; }; 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = "<absolute>"; };
5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = "<absolute>"; }; 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = "<absolute>"; };
5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = "<absolute>"; }; 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = "<absolute>"; };
6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = "<absolute>"; }; 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = "<absolute>"; };
63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf"; sourceTree = "<absolute>"; }; 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf"; sourceTree = "<absolute>"; };
669AB12AE74AC219B4669D79 /* genlang.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = genlang.cpp; path = SourceFiles/_other/genlang.cpp; sourceTree = "<absolute>"; }; 669AB12AE74AC219B4669D79 /* genlang.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = genlang.cpp; path = SourceFiles/_other/genlang.cpp; sourceTree = "<absolute>"; };
669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf"; sourceTree = "<absolute>"; }; 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf"; sourceTree = "<absolute>"; };
680437016D61255E7F889A94 /* moc_genlang.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_genlang.cpp; path = GeneratedFiles/Debug/moc_genlang.cpp; sourceTree = "<absolute>"; }; 680437016D61255E7F889A94 /* moc_genlang.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_genlang.cpp; path = GeneratedFiles/Debug/moc_genlang.cpp; sourceTree = "<absolute>"; };
69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = "<absolute>"; }; 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = "<absolute>"; };
6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = "<absolute>"; }; 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = "<absolute>"; };
6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qdevice.pri"; sourceTree = "<absolute>"; }; 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qdevice.pri"; sourceTree = "<absolute>"; };
74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = "<absolute>"; }; 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = "<absolute>"; };
77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = "<absolute>"; }; 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = "<absolute>"; };
7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = "<absolute>"; }; 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = "<absolute>"; };
7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = "<absolute>"; }; 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = "<absolute>"; };
7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = "<absolute>"; }; 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = "<absolute>"; };
7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = "<absolute>"; }; 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = "<absolute>"; };
7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = "<absolute>"; }; 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = "<absolute>"; };
817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/macx.conf"; sourceTree = "<absolute>"; }; 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/macx.conf"; sourceTree = "<absolute>"; };
82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = "<absolute>"; }; 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = "<absolute>"; };
83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
83FFCB79DDEB015B4A5CB301 /* MetaLang.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MetaLang.app; sourceTree = BUILT_PRODUCTS_DIR; }; 83FFCB79DDEB015B4A5CB301 /* MetaLang.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MetaLang.app; sourceTree = BUILT_PRODUCTS_DIR; };
85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = "<absolute>"; }; 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = "<absolute>"; };
85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = "<absolute>"; }; 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = "<absolute>"; };
87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = "<absolute>"; }; 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = "<absolute>"; };
87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = "<absolute>"; }; 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = "<absolute>"; };
8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = "<absolute>"; }; 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = "<absolute>"; };
892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = "<absolute>"; }; 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = "<absolute>"; };
89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = "<absolute>"; }; 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = "<absolute>"; };
8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = "<absolute>"; }; 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = "<absolute>"; };
8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = "<absolute>"; }; 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = "<absolute>"; };
8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = "<absolute>"; }; 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = "<absolute>"; };
8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang.conf"; sourceTree = "<absolute>"; }; 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang.conf"; sourceTree = "<absolute>"; };
8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; }; 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = "<absolute>"; }; 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = "<absolute>"; };
8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = "<absolute>"; }; 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = "<absolute>"; };
8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = "<absolute>"; }; 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = "<absolute>"; };
8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = "<absolute>"; }; 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = "<absolute>"; };
946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = "<absolute>"; }; 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = "<absolute>"; };
9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; }; 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; };
9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = "<absolute>"; }; 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = "<absolute>"; };
9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; 9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = "<absolute>"; }; A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = "<absolute>"; };
A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; };
A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = "<absolute>"; }; A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = "<absolute>"; };
A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = "<absolute>"; }; A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = "<absolute>"; };
A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = "<absolute>"; }; A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = "<absolute>"; };
A83296E7180A28ABB0FD85D2 /* mlmain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mlmain.cpp; path = SourceFiles/_other/mlmain.cpp; sourceTree = "<absolute>"; }; A83296E7180A28ABB0FD85D2 /* mlmain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mlmain.cpp; path = SourceFiles/_other/mlmain.cpp; sourceTree = "<absolute>"; };
A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = "<absolute>"; }; A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = "<absolute>"; };
AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = "<absolute>"; }; AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = "<absolute>"; };
AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = "<absolute>"; }; AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = "<absolute>"; };
AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = "<absolute>"; }; AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = "<absolute>"; };
ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = "<absolute>"; }; ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = "<absolute>"; };
ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = "<absolute>"; }; ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = "<absolute>"; };
ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = "<absolute>"; }; ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = "<absolute>"; };
AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = "<absolute>"; }; AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = "<absolute>"; };
B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = "<absolute>"; }; B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = "<absolute>"; };
B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = "<absolute>"; }; B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = "<absolute>"; };
B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = "<absolute>"; }; B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = "<absolute>"; };
B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = "<absolute>"; }; B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = "<absolute>"; };
B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = "<absolute>"; }; B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = "<absolute>"; };
B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = "<absolute>"; }; B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = "<absolute>"; };
B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = "<absolute>"; }; B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = "<absolute>"; };
B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = "<absolute>"; }; B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = "<absolute>"; };
B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = "<absolute>"; }; B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = "<absolute>"; };
BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = "<absolute>"; }; BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = "<absolute>"; };
BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = "<absolute>"; }; BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = "<absolute>"; };
BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = "<absolute>"; }; BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = "<absolute>"; };
BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = "<absolute>"; }; BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = "<absolute>"; };
C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = "<absolute>"; }; C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = "<absolute>"; };
C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = "<absolute>"; }; C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = "<absolute>"; };
C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = "<absolute>"; }; C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = "<absolute>"; };
CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = "<absolute>"; }; CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = "<absolute>"; };
CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = "<absolute>"; }; CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = "<absolute>"; };
CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = "<absolute>"; }; CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = "<absolute>"; };
CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = "<absolute>"; }; CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = "<absolute>"; };
CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = "<absolute>"; }; CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = "<absolute>"; };
D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = "<absolute>"; }; D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = "<absolute>"; };
D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = "<absolute>"; }; D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = "<absolute>"; };
D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = "<absolute>"; }; D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = "<absolute>"; };
D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qconfig.pri"; sourceTree = "<absolute>"; }; D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qconfig.pri"; sourceTree = "<absolute>"; };
D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = "<absolute>"; }; D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = "<absolute>"; };
D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.4.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.5.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.4.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.5.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = "<absolute>"; }; D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = "<absolute>"; };
D7D645CBFF3B86CF39CEF3DA /* mlmain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mlmain.h; path = SourceFiles/_other/mlmain.h; sourceTree = "<absolute>"; }; D7D645CBFF3B86CF39CEF3DA /* mlmain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mlmain.h; path = SourceFiles/_other/mlmain.h; sourceTree = "<absolute>"; };
D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = "<absolute>"; }; D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = "<absolute>"; };
D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = "<absolute>"; }; D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = "<absolute>"; };
DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = "<absolute>"; }; DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = "<absolute>"; };
DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = "<absolute>"; }; DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = "<absolute>"; };
DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; };
E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = "<absolute>"; }; E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = "<absolute>"; };
E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = "<absolute>"; }; E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = "<absolute>"; };
E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = "<absolute>"; }; E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = "<absolute>"; };
E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = "<absolute>"; }; E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = "<absolute>"; };
E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = "<absolute>"; }; E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = "<absolute>"; };
E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = "<absolute>"; }; E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = "<absolute>"; };
EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = "<absolute>"; }; EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = "<absolute>"; };
EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = "<absolute>"; }; EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = "<absolute>"; };
EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = "<absolute>"; }; EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = "<absolute>"; };
EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/mac.conf"; sourceTree = "<absolute>"; }; EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/mac.conf"; sourceTree = "<absolute>"; };
F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = "<absolute>"; }; F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = "<absolute>"; };
F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = "<absolute>"; }; F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = "<absolute>"; };
F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf"; sourceTree = "<absolute>"; }; F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf"; sourceTree = "<absolute>"; };
F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = "<absolute>"; }; F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = "<absolute>"; };
F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = "<absolute>"; }; F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = "<absolute>"; };
F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = "<absolute>"; }; F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = "<absolute>"; };
F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = "<absolute>"; }; F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = "<absolute>"; };
FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = "<absolute>"; }; FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = "<absolute>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@ -248,6 +250,7 @@
F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */, F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */,
9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */, 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */,
8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */, 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */,
07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */,
B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */, B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */,
); );
name = "Link Binary With Libraries"; name = "Link Binary With Libraries";
@ -295,127 +298,127 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
33A9E861B2FAD8C39E154E7C /* MetaLang.pro */, 33A9E861B2FAD8C39E154E7C /* MetaLang.pro */,
6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */, 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */,
669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */, 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */,
0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */, 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */,
EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */, EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */,
817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */, 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */,
45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */, 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */,
A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */, A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */,
8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */, 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */,
F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */, F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */,
D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */, D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */,
ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */, ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */,
2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */,
BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */,
CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */, CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */,
77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */, 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */,
7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */, 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */,
7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */, 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */,
5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */, 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */,
7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */, 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */,
89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */, 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */,
F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */, F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */,
7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */, 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */,
69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */,
360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */, 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */,
4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */, 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */,
23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */, 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */,
D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */, D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */,
FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */, FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */,
D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */, D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */,
A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */, A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */,
33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */, 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */,
D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */, D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */,
E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */, E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */,
28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */,
D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */,
293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */, 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */,
382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */, 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */,
8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */, 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */,
B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */, B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */,
5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */, 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */,
E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */, E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */,
E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */, E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */,
5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */,
8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */,
F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */, F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */,
E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */, E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */,
6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */, 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */,
D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */, D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */,
B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */, B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */,
6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */, 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */,
4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */,
DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */, DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */,
ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */, ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */,
5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */,
16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */, 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */,
8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */, 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */,
82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */,
D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */, D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */,
B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */,
CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */, CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */,
C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */, C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */,
CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */, CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */,
A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */, A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */,
85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */, 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */,
BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */, BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */,
BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */, BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */,
311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */, 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */,
7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */, 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */,
075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */, 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */,
ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */, ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */,
8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */, 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */,
DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */, DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */,
8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */, 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */,
E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */, E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */,
B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */, B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */,
8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */, 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */,
87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */, 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */,
A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */, A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */,
8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */, 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */,
AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */, AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */,
E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */, E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */,
2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */,
F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */,
D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */,
1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */,
F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */,
AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */, AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */,
EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */,
111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */, 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */,
3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */,
2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */,
EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */, EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */,
C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */, C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */,
45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */, 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */,
B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */, B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */,
F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */,
B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */,
EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */,
3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */,
946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */, 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */,
CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */,
9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */,
B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */, B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */,
F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */, F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */,
CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */,
247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */,
87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */,
24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */,
060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */, 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */,
BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */, BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */,
B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */,
74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */,
C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */,
AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */,
8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */,
892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */,
A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */,
346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */, 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */,
B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */, B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */,
63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */, 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */,
85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */, 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */,
AB745978DF0F41D1801ABDA6 /* .qmake.stash */, AB745978DF0F41D1801ABDA6 /* .qmake.stash */,
); );
name = "Supporting Files"; name = "Supporting Files";
@ -432,6 +435,7 @@
AF39DD055C3EF8226FBE929D /* Frameworks */ = { AF39DD055C3EF8226FBE929D /* Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
07D795491B5544B200DE9598 /* qtpcre */,
AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */, AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */,
DFD7912080BC557230093752 /* ApplicationServices.framework */, DFD7912080BC557230093752 /* ApplicationServices.framework */,
9742F24EE18EA44D52824F1E /* CoreServices.framework */, 9742F24EE18EA44D52824F1E /* CoreServices.framework */,
@ -516,7 +520,7 @@
6DB9C3763D02B1415CD9D565 /* Project object */ = { 6DB9C3763D02B1415CD9D565 /* Project object */ = {
isa = PBXProject; isa = PBXProject;
attributes = { attributes = {
LastUpgradeCheck = 0610; LastUpgradeCheck = 0640;
}; };
buildConfigurationList = DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "MetaLang" */; buildConfigurationList = DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "MetaLang" */;
compatibilityVersion = "Xcode 3.2"; compatibilityVersion = "Xcode 3.2";
@ -603,6 +607,7 @@
ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_STRICT_OBJC_MSGSEND = YES;
FRAMEWORK_SEARCH_PATHS = ""; FRAMEWORK_SEARCH_PATHS = "";
GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
@ -611,25 +616,25 @@
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui,
../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore,
../../Libraries/QtStatic/qtbase/include, ../../Libraries/QtStatic/qtbase/include,
"/usr/local/Qt-5.4.0/include", "/usr/local/Qt-5.5.0/include",
"/usr/local/Qt-5.4.0/include/QtGui", "/usr/local/Qt-5.5.0/include/QtGui",
"/usr/local/Qt-5.4.0/include/QtCore", "/usr/local/Qt-5.5.0/include/QtCore",
GeneratedFiles/Debug, GeneratedFiles/Debug,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers,
"/usr/local/Qt-5.4.0/mkspecs/macx-clang", "/usr/local/Qt-5.5.0/mkspecs/macx-clang",
); );
INFOPLIST_FILE = Lang.plist; INFOPLIST_FILE = Lang.plist;
INSTALL_DIR = ../Mac/ReleaseLang/; INSTALL_DIR = ../Mac/ReleaseLang/;
LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++";
LIBRARY_SEARCH_PATHS = ( LIBRARY_SEARCH_PATHS = (
/System/Library/Frameworks/, /System/Library/Frameworks/,
"/usr/local/Qt-5.4.0/lib", "/usr/local/Qt-5.5.0/lib",
"/usr/local/Qt-5.4.0/plugins/platforms", "/usr/local/Qt-5.5.0/plugins/platforms",
"/usr/local/Qt-5.4.0/plugins/imageformats", "/usr/local/Qt-5.5.0/plugins/imageformats",
); );
MACOSX_DEPLOYMENT_TARGET = 10.7; MACOSX_DEPLOYMENT_TARGET = 10.7;
OBJROOT = ./../Mac/ReleaseIntermediateLang; OBJROOT = ./../Mac/ReleaseIntermediateLang;
@ -658,10 +663,10 @@
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-headerpad_max_install_names", "-headerpad_max_install_names",
"-stdlib=libc++", "-stdlib=libc++",
"-L/usr/local/Qt-5.4.0/lib", "-L/usr/local/Qt-5.5.0/lib",
"-L/usr/local/Qt-5.4.0/plugins/platforms", "-L/usr/local/Qt-5.5.0/plugins/platforms",
"-lcups", "-lcups",
"-L/usr/local/Qt-5.4.0/plugins/imageformats", "-L/usr/local/Qt-5.5.0/plugins/imageformats",
"-lz", "-lz",
"-lm", "-lm",
); );
@ -691,6 +696,7 @@
ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_STRICT_OBJC_MSGSEND = YES;
FRAMEWORK_SEARCH_PATHS = ""; FRAMEWORK_SEARCH_PATHS = "";
GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0; GCC_OPTIMIZATION_LEVEL = 0;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@ -700,25 +706,25 @@
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui,
../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore,
../../Libraries/QtStatic/qtbase/include, ../../Libraries/QtStatic/qtbase/include,
"/usr/local/Qt-5.4.0/include", "/usr/local/Qt-5.5.0/include",
"/usr/local/Qt-5.4.0/include/QtGui", "/usr/local/Qt-5.5.0/include/QtGui",
"/usr/local/Qt-5.4.0/include/QtCore", "/usr/local/Qt-5.5.0/include/QtCore",
GeneratedFiles/Debug, GeneratedFiles/Debug,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers,
"/usr/local/Qt-5.4.0/mkspecs/macx-clang", "/usr/local/Qt-5.5.0/mkspecs/macx-clang",
); );
INFOPLIST_FILE = Lang.plist; INFOPLIST_FILE = Lang.plist;
INSTALL_DIR = ../Mac/DebugLang/; INSTALL_DIR = ../Mac/DebugLang/;
LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++";
LIBRARY_SEARCH_PATHS = ( LIBRARY_SEARCH_PATHS = (
/System/Library/Frameworks/, /System/Library/Frameworks/,
"/usr/local/Qt-5.4.0/lib", "/usr/local/Qt-5.5.0/lib",
"/usr/local/Qt-5.4.0/plugins/platforms", "/usr/local/Qt-5.5.0/plugins/platforms",
"/usr/local/Qt-5.4.0/plugins/imageformats", "/usr/local/Qt-5.5.0/plugins/imageformats",
); );
MACOSX_DEPLOYMENT_TARGET = 10.7; MACOSX_DEPLOYMENT_TARGET = 10.7;
OBJROOT = ./../Mac/DebugIntermediateLang; OBJROOT = ./../Mac/DebugIntermediateLang;
@ -748,10 +754,10 @@
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-headerpad_max_install_names", "-headerpad_max_install_names",
"-stdlib=libc++", "-stdlib=libc++",
"-L/usr/local/Qt-5.4.0/lib", "-L/usr/local/Qt-5.5.0/lib",
"-L/usr/local/Qt-5.4.0/plugins/platforms", "-L/usr/local/Qt-5.5.0/plugins/platforms",
"-lcups", "-lcups",
"-L/usr/local/Qt-5.4.0/plugins/imageformats", "-L/usr/local/Qt-5.5.0/plugins/imageformats",
"-lz", "-lz",
"-lm", "-lm",
); );
@ -769,15 +775,15 @@
COPY_PHASE_STRIP = YES; COPY_PHASE_STRIP = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui,
./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore,
./../../Libraries/QtStatic/qtbase/include, ./../../Libraries/QtStatic/qtbase/include,
"/usr/local/Qt-5.4.0/include", "/usr/local/Qt-5.5.0/include",
"/usr/local/Qt-5.4.0/include/QtGui", "/usr/local/Qt-5.5.0/include/QtGui",
"/usr/local/Qt-5.4.0/include/QtCore", "/usr/local/Qt-5.5.0/include/QtCore",
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers,
"/usr/local/Qt-5.4.0/mkspecs/macx-clang", "/usr/local/Qt-5.5.0/mkspecs/macx-clang",
); );
INSTALL_DIR = ../Mac/ReleaseLang/; INSTALL_DIR = ../Mac/ReleaseLang/;
PRODUCT_NAME = MetaLang; PRODUCT_NAME = MetaLang;
@ -795,15 +801,15 @@
GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_OPTIMIZATION_LEVEL = 0; GCC_OPTIMIZATION_LEVEL = 0;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui,
./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore,
./../../Libraries/QtStatic/qtbase/include, ./../../Libraries/QtStatic/qtbase/include,
"/usr/local/Qt-5.4.0/include", "/usr/local/Qt-5.5.0/include",
"/usr/local/Qt-5.4.0/include/QtGui", "/usr/local/Qt-5.5.0/include/QtGui",
"/usr/local/Qt-5.4.0/include/QtCore", "/usr/local/Qt-5.5.0/include/QtCore",
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers,
"/usr/local/Qt-5.4.0/mkspecs/macx-clang", "/usr/local/Qt-5.5.0/mkspecs/macx-clang",
); );
INSTALL_DIR = ../Mac/DebugLang/; INSTALL_DIR = ../Mac/DebugLang/;
PRODUCT_NAME = MetaLang; PRODUCT_NAME = MetaLang;

View file

@ -1,21 +1,21 @@
############################################################################# #############################################################################
# Makefile for building: ../Mac/DebugLang/MetaLang.app/Contents/MacOS/MetaLang # Makefile for building: ../Mac/DebugLang/MetaLang.app/Contents/MacOS/MetaLang
# Generated by qmake (3.0) (Qt 5.4.0) # Generated by qmake (3.0) (Qt 5.5.0)
# Project: MetaLang.pro # Project: MetaLang.pro
# Template: app # Template: app
# Command: /usr/local/Qt-5.4.0/bin/qmake -spec macx-xcode -o MetaLang.xcodeproj/project.pbxproj MetaLang.pro # Command: /usr/local/Qt-5.5.0/bin/qmake -spec macx-xcode -o MetaLang.xcodeproj/project.pbxproj MetaLang.pro
############################################################################# #############################################################################
MAKEFILE = project.pbxproj MAKEFILE = project.pbxproj
MOC = /usr/local/Qt-5.4.0/bin/moc MOC = /usr/local/Qt-5.5.0/bin/moc
UIC = UIC =
LEX = flex LEX = flex
LEXFLAGS = LEXFLAGS =
YACC = yacc YACC = yacc
YACCFLAGS = -d YACCFLAGS = -d
DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB
INCPATH = -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers INCPATH = -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers
DEL_FILE = rm -f DEL_FILE = rm -f
MOVE = mv -f MOVE = mv -f
@ -52,7 +52,7 @@ GeneratedFiles/Debug/moc_genlang.cpp: ../../Libraries/QtStatic/qtbase/include/Qt
../../Libraries/QtStatic/qtbase/include/QtCore/QCoreApplication \ ../../Libraries/QtStatic/qtbase/include/QtCore/QCoreApplication \
../../Libraries/QtStatic/qtbase/include/QtGui/QGuiApplication \ ../../Libraries/QtStatic/qtbase/include/QtGui/QGuiApplication \
SourceFiles/_other/genlang.h SourceFiles/_other/genlang.h
/usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/_other/genlang.h -o GeneratedFiles/Debug/moc_genlang.cpp /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/_other/genlang.h -o GeneratedFiles/Debug/moc_genlang.cpp
compiler_moc_source_make_all: compiler_moc_source_make_all:
compiler_moc_source_clean: compiler_moc_source_clean:

View file

@ -27,7 +27,7 @@ HEADERS += \
./SourceFiles/_other/msmain.h \ ./SourceFiles/_other/msmain.h \
./SourceFiles/_other/genstyles.h \ ./SourceFiles/_other/genstyles.h \
INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui\ INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui\
./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore\ ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore\
./../../Libraries/QtStatic/qtbase/include\ ./../../Libraries/QtStatic/qtbase/include\

View file

@ -126,7 +126,7 @@
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile> <OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;qtpcred.lib;qtfreetyped.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile> <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
<ProfileGuidedDatabase>$(IntDir)$(TargetName).pgd</ProfileGuidedDatabase> <ProfileGuidedDatabase>$(IntDir)$(TargetName).pgd</ProfileGuidedDatabase>
@ -145,7 +145,7 @@
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile> <OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>false</GenerateDebugInformation> <GenerateDebugInformation>false</GenerateDebugInformation>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
@ -162,7 +162,7 @@
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile> <OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>false</GenerateDebugInformation> <GenerateDebugInformation>false</GenerateDebugInformation>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>

View file

@ -22,6 +22,7 @@
/* End PBXAggregateTarget section */ /* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07D795491B5544B200DE9598 /* qtpcre */; };
1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; }; 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; };
1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; }; 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; };
328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; }; 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; };
@ -63,160 +64,161 @@
/* End PBXContainerItemProxy section */ /* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.4.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.5.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = "<absolute>"; }; 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = "<absolute>"; };
075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = "<absolute>"; }; 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = "<absolute>"; };
0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/unix.conf"; sourceTree = "<absolute>"; }; 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.5.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<group>"; };
0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/unix.conf"; sourceTree = "<absolute>"; };
10F719DFC6D0B05605ED1C16 /* MetaStyle.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = MetaStyle.pro; sourceTree = "<absolute>"; }; 10F719DFC6D0B05605ED1C16 /* MetaStyle.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = MetaStyle.pro; sourceTree = "<absolute>"; };
111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = "<absolute>"; }; 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = "<absolute>"; };
16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = "<absolute>"; }; 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = "<absolute>"; };
1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = "<absolute>"; }; 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = "<absolute>"; };
23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = "<absolute>"; }; 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = "<absolute>"; };
2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = "<absolute>"; }; 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = "<absolute>"; };
247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = "<absolute>"; }; 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = "<absolute>"; };
24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = "<absolute>"; }; 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = "<absolute>"; };
28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = "<absolute>"; }; 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = "<absolute>"; };
293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = "<absolute>"; }; 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = "<absolute>"; };
2CBD32689B153445ED220FAE /* MetaStyle.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MetaStyle.app; sourceTree = BUILT_PRODUCTS_DIR; }; 2CBD32689B153445ED220FAE /* MetaStyle.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MetaStyle.app; sourceTree = BUILT_PRODUCTS_DIR; };
2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = "<absolute>"; }; 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = "<absolute>"; };
2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = "<absolute>"; }; 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = "<absolute>"; };
311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = "<absolute>"; }; 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = "<absolute>"; };
31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = "<absolute>"; }; 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = "<absolute>"; };
346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = "<absolute>"; }; 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = "<absolute>"; };
360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = "<absolute>"; }; 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = "<absolute>"; };
3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = "<absolute>"; }; 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = "<absolute>"; };
382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = "<absolute>"; }; 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = "<absolute>"; };
3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = "<absolute>"; }; 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = "<absolute>"; };
45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf"; sourceTree = "<absolute>"; }; 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf"; sourceTree = "<absolute>"; };
45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = "<absolute>"; }; 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = "<absolute>"; };
4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.4.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.5.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = "<absolute>"; }; 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = "<absolute>"; };
4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; }; 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; };
4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = "<absolute>"; }; 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = "<absolute>"; };
5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = "<absolute>"; }; 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = "<absolute>"; };
5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.4.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.5.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = "<absolute>"; }; 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = "<absolute>"; };
5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = "<absolute>"; }; 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = "<absolute>"; };
5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = "<absolute>"; }; 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = "<absolute>"; };
6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = "<absolute>"; }; 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = "<absolute>"; };
63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf"; sourceTree = "<absolute>"; }; 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf"; sourceTree = "<absolute>"; };
669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf"; sourceTree = "<absolute>"; }; 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf"; sourceTree = "<absolute>"; };
69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = "<absolute>"; }; 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = "<absolute>"; };
6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = "<absolute>"; }; 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = "<absolute>"; };
6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qdevice.pri"; sourceTree = "<absolute>"; }; 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qdevice.pri"; sourceTree = "<absolute>"; };
6FF81CB4A724CE1990CEE99A /* msmain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = msmain.h; path = SourceFiles/_other/msmain.h; sourceTree = "<absolute>"; }; 6FF81CB4A724CE1990CEE99A /* msmain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = msmain.h; path = SourceFiles/_other/msmain.h; sourceTree = "<absolute>"; };
74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = "<absolute>"; }; 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = "<absolute>"; };
77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = "<absolute>"; }; 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = "<absolute>"; };
7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = "<absolute>"; }; 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = "<absolute>"; };
7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = "<absolute>"; }; 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = "<absolute>"; };
7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = "<absolute>"; }; 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = "<absolute>"; };
7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = "<absolute>"; }; 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = "<absolute>"; };
7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = "<absolute>"; }; 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = "<absolute>"; };
817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/macx.conf"; sourceTree = "<absolute>"; }; 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/macx.conf"; sourceTree = "<absolute>"; };
82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = "<absolute>"; }; 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = "<absolute>"; };
83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = "<absolute>"; }; 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = "<absolute>"; };
85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = "<absolute>"; }; 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = "<absolute>"; };
861D2151FB56504EB72BDB6E /* moc_genstyles.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_genstyles.cpp; path = GeneratedFiles/Debug/moc_genstyles.cpp; sourceTree = "<absolute>"; }; 861D2151FB56504EB72BDB6E /* moc_genstyles.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_genstyles.cpp; path = GeneratedFiles/Debug/moc_genstyles.cpp; sourceTree = "<absolute>"; };
87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = "<absolute>"; }; 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = "<absolute>"; };
87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = "<absolute>"; }; 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = "<absolute>"; };
8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = "<absolute>"; }; 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = "<absolute>"; };
892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = "<absolute>"; }; 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = "<absolute>"; };
89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = "<absolute>"; }; 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = "<absolute>"; };
8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = "<absolute>"; }; 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = "<absolute>"; };
8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = "<absolute>"; }; 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = "<absolute>"; };
8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = "<absolute>"; }; 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = "<absolute>"; };
8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang.conf"; sourceTree = "<absolute>"; }; 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang.conf"; sourceTree = "<absolute>"; };
8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; }; 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = "<absolute>"; }; 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = "<absolute>"; };
8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = "<absolute>"; }; 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = "<absolute>"; };
8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = "<absolute>"; }; 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = "<absolute>"; };
8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = "<absolute>"; }; 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = "<absolute>"; };
946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = "<absolute>"; }; 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = "<absolute>"; };
9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; }; 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; };
9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = "<absolute>"; }; 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = "<absolute>"; };
9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; 9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = "<absolute>"; }; A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = "<absolute>"; };
A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; };
A35D133D7C0EFB42FA85D194 /* genstyles.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = genstyles.h; path = SourceFiles/_other/genstyles.h; sourceTree = "<absolute>"; }; A35D133D7C0EFB42FA85D194 /* genstyles.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = genstyles.h; path = SourceFiles/_other/genstyles.h; sourceTree = "<absolute>"; };
A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = "<absolute>"; }; A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = "<absolute>"; };
A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = "<absolute>"; }; A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = "<absolute>"; };
A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = "<absolute>"; }; A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = "<absolute>"; };
A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = "<absolute>"; }; A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = "<absolute>"; };
AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = "<absolute>"; }; AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = "<absolute>"; };
AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = "<absolute>"; }; AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = "<absolute>"; };
AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = "<absolute>"; }; AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = "<absolute>"; };
ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = "<absolute>"; }; ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = "<absolute>"; };
ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = "<absolute>"; }; ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = "<absolute>"; };
ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = "<absolute>"; }; ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = "<absolute>"; };
AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = "<absolute>"; }; AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = "<absolute>"; };
B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = "<absolute>"; }; B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = "<absolute>"; };
B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = "<absolute>"; }; B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = "<absolute>"; };
B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = "<absolute>"; }; B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = "<absolute>"; };
B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = "<absolute>"; }; B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = "<absolute>"; };
B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = "<absolute>"; }; B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = "<absolute>"; };
B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = "<absolute>"; }; B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = "<absolute>"; };
B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = "<absolute>"; }; B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = "<absolute>"; };
B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = "<absolute>"; }; B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = "<absolute>"; };
B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = "<absolute>"; }; B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = "<absolute>"; };
BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = "<absolute>"; }; BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = "<absolute>"; };
BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = "<absolute>"; }; BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = "<absolute>"; };
BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = "<absolute>"; }; BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = "<absolute>"; };
BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = "<absolute>"; }; BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = "<absolute>"; };
C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = "<absolute>"; }; C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = "<absolute>"; };
C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = "<absolute>"; }; C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = "<absolute>"; };
C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = "<absolute>"; }; C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = "<absolute>"; };
CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = "<absolute>"; }; CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = "<absolute>"; };
CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = "<absolute>"; }; CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = "<absolute>"; };
CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = "<absolute>"; }; CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = "<absolute>"; };
CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = "<absolute>"; }; CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = "<absolute>"; };
CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = "<absolute>"; }; CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = "<absolute>"; };
D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = "<absolute>"; }; D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = "<absolute>"; };
D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = "<absolute>"; }; D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = "<absolute>"; };
D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = "<absolute>"; }; D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = "<absolute>"; };
D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qconfig.pri"; sourceTree = "<absolute>"; }; D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qconfig.pri"; sourceTree = "<absolute>"; };
D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = "<absolute>"; }; D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = "<absolute>"; };
D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.4.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.5.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.4.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.5.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = "<absolute>"; }; D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = "<absolute>"; };
D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = "<absolute>"; }; D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = "<absolute>"; };
D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = "<absolute>"; }; D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = "<absolute>"; };
DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = "<absolute>"; }; DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = "<absolute>"; };
DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = "<absolute>"; }; DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = "<absolute>"; };
DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; };
E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = "<absolute>"; }; E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = "<absolute>"; };
E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = "<absolute>"; }; E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = "<absolute>"; };
E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = "<absolute>"; }; E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = "<absolute>"; };
E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = "<absolute>"; }; E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = "<absolute>"; };
E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = "<absolute>"; }; E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = "<absolute>"; };
E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = "<absolute>"; }; E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = "<absolute>"; };
EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = "<absolute>"; }; EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = "<absolute>"; };
EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = "<absolute>"; }; EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = "<absolute>"; };
EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = "<absolute>"; }; EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = "<absolute>"; };
EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/mac.conf"; sourceTree = "<absolute>"; }; EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/mac.conf"; sourceTree = "<absolute>"; };
EF5243ECB3132AF2796F09DF /* msmain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = msmain.cpp; path = SourceFiles/_other/msmain.cpp; sourceTree = "<absolute>"; }; EF5243ECB3132AF2796F09DF /* msmain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = msmain.cpp; path = SourceFiles/_other/msmain.cpp; sourceTree = "<absolute>"; };
F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = "<absolute>"; }; F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = "<absolute>"; };
F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = "<absolute>"; }; F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = "<absolute>"; };
F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf"; sourceTree = "<absolute>"; }; F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf"; sourceTree = "<absolute>"; };
F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = "<absolute>"; }; F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = "<absolute>"; };
F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = "<absolute>"; }; F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = "<absolute>"; };
F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = "<absolute>"; }; F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = "<absolute>"; };
F8BC976260B6D624F23C32D6 /* genstyles.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = genstyles.cpp; path = SourceFiles/_other/genstyles.cpp; sourceTree = "<absolute>"; }; F8BC976260B6D624F23C32D6 /* genstyles.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = genstyles.cpp; path = SourceFiles/_other/genstyles.cpp; sourceTree = "<absolute>"; };
F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = "<absolute>"; }; F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = "<absolute>"; };
FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = "<absolute>"; }; FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = "<absolute>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@ -248,6 +250,7 @@
F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */, F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */,
9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */, 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */,
8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */, 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */,
07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */,
B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */, B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */,
); );
name = "Link Binary With Libraries"; name = "Link Binary With Libraries";
@ -295,127 +298,127 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
10F719DFC6D0B05605ED1C16 /* MetaStyle.pro */, 10F719DFC6D0B05605ED1C16 /* MetaStyle.pro */,
6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */, 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */,
669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */, 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */,
0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */, 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */,
EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */, EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */,
817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */, 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */,
45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */, 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */,
A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */, A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */,
8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */, 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */,
F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */, F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */,
D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */, D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */,
ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */, ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */,
2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */,
BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */,
CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */, CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */,
77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */, 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */,
7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */, 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */,
7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */, 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */,
5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */, 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */,
7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */, 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */,
89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */, 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */,
F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */, F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */,
7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */, 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */,
69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */,
360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */, 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */,
4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */, 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */,
23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */, 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */,
D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */, D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */,
FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */, FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */,
D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */, D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */,
A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */, A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */,
33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */, 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */,
D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */, D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */,
E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */, E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */,
28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */,
D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */,
293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */, 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */,
382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */, 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */,
8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */, 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */,
B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */, B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */,
5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */, 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */,
E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */, E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */,
E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */, E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */,
5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */,
8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */,
F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */, F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */,
E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */, E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */,
6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */, 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */,
D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */, D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */,
B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */, B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */,
6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */, 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */,
4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */,
DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */, DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */,
ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */, ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */,
5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */,
16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */, 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */,
8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */, 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */,
82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */,
D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */, D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */,
B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */,
CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */, CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */,
C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */, C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */,
CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */, CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */,
A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */, A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */,
85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */, 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */,
BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */, BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */,
BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */, BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */,
311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */, 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */,
7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */, 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */,
075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */, 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */,
ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */, ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */,
8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */, 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */,
DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */, DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */,
8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */, 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */,
E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */, E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */,
B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */, B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */,
8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */, 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */,
87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */, 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */,
A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */, A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */,
8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */, 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */,
AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */, AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */,
E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */, E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */,
2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */,
F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */,
D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */,
1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */,
F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */,
AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */, AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */,
EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */,
111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */, 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */,
3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */,
2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */,
EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */, EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */,
C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */, C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */,
45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */, 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */,
B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */, B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */,
F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */,
B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */,
EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */,
3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */,
946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */, 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */,
CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */,
9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */,
B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */, B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */,
F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */, F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */,
CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */,
247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */,
87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */,
24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */,
060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */, 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */,
BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */, BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */,
B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */,
74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */,
C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */,
AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */,
8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */,
892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */,
A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */,
346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */, 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */,
B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */, B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */,
63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */, 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */,
85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */, 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */,
AB745978DF0F41D1801ABDA6 /* .qmake.stash */, AB745978DF0F41D1801ABDA6 /* .qmake.stash */,
); );
name = "Supporting Files"; name = "Supporting Files";
@ -432,6 +435,7 @@
AF39DD055C3EF8226FBE929D /* Frameworks */ = { AF39DD055C3EF8226FBE929D /* Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
07D795491B5544B200DE9598 /* qtpcre */,
AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */, AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */,
DFD7912080BC557230093752 /* ApplicationServices.framework */, DFD7912080BC557230093752 /* ApplicationServices.framework */,
9742F24EE18EA44D52824F1E /* CoreServices.framework */, 9742F24EE18EA44D52824F1E /* CoreServices.framework */,
@ -612,25 +616,25 @@
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui,
../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore,
../../Libraries/QtStatic/qtbase/include, ../../Libraries/QtStatic/qtbase/include,
"/usr/local/Qt-5.4.0/include", "/usr/local/Qt-5.5.0/include",
"/usr/local/Qt-5.4.0/include/QtGui", "/usr/local/Qt-5.5.0/include/QtGui",
"/usr/local/Qt-5.4.0/include/QtCore", "/usr/local/Qt-5.5.0/include/QtCore",
GeneratedFiles/Debug, GeneratedFiles/Debug,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers,
"/usr/local/Qt-5.4.0/mkspecs/macx-clang", "/usr/local/Qt-5.5.0/mkspecs/macx-clang",
); );
INFOPLIST_FILE = Style.plist; INFOPLIST_FILE = Style.plist;
INSTALL_DIR = ../Mac/ReleaseStyle/; INSTALL_DIR = ../Mac/ReleaseStyle/;
LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++";
LIBRARY_SEARCH_PATHS = ( LIBRARY_SEARCH_PATHS = (
/System/Library/Frameworks/, /System/Library/Frameworks/,
"/usr/local/Qt-5.4.0/lib", "/usr/local/Qt-5.5.0/lib",
"/usr/local/Qt-5.4.0/plugins/platforms", "/usr/local/Qt-5.5.0/plugins/platforms",
"/usr/local/Qt-5.4.0/plugins/imageformats", "/usr/local/Qt-5.5.0/plugins/imageformats",
); );
MACOSX_DEPLOYMENT_TARGET = 10.7; MACOSX_DEPLOYMENT_TARGET = 10.7;
OBJROOT = ./../Mac/ReleaseIntermediateStyle; OBJROOT = ./../Mac/ReleaseIntermediateStyle;
@ -659,10 +663,10 @@
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-headerpad_max_install_names", "-headerpad_max_install_names",
"-stdlib=libc++", "-stdlib=libc++",
"-L/usr/local/Qt-5.4.0/lib", "-L/usr/local/Qt-5.5.0/lib",
"-L/usr/local/Qt-5.4.0/plugins/platforms", "-L/usr/local/Qt-5.5.0/plugins/platforms",
"-lcups", "-lcups",
"-L/usr/local/Qt-5.4.0/plugins/imageformats", "-L/usr/local/Qt-5.5.0/plugins/imageformats",
"-lz", "-lz",
"-lm", "-lm",
); );
@ -702,25 +706,25 @@
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui,
../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore,
../../Libraries/QtStatic/qtbase/include, ../../Libraries/QtStatic/qtbase/include,
"/usr/local/Qt-5.4.0/include", "/usr/local/Qt-5.5.0/include",
"/usr/local/Qt-5.4.0/include/QtGui", "/usr/local/Qt-5.5.0/include/QtGui",
"/usr/local/Qt-5.4.0/include/QtCore", "/usr/local/Qt-5.5.0/include/QtCore",
GeneratedFiles/Debug, GeneratedFiles/Debug,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers,
"/usr/local/Qt-5.4.0/mkspecs/macx-clang", "/usr/local/Qt-5.5.0/mkspecs/macx-clang",
); );
INFOPLIST_FILE = Style.plist; INFOPLIST_FILE = Style.plist;
INSTALL_DIR = ../Mac/DebugStyle/; INSTALL_DIR = ../Mac/DebugStyle/;
LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++";
LIBRARY_SEARCH_PATHS = ( LIBRARY_SEARCH_PATHS = (
/System/Library/Frameworks/, /System/Library/Frameworks/,
"/usr/local/Qt-5.4.0/lib", "/usr/local/Qt-5.5.0/lib",
"/usr/local/Qt-5.4.0/plugins/platforms", "/usr/local/Qt-5.5.0/plugins/platforms",
"/usr/local/Qt-5.4.0/plugins/imageformats", "/usr/local/Qt-5.5.0/plugins/imageformats",
); );
MACOSX_DEPLOYMENT_TARGET = 10.7; MACOSX_DEPLOYMENT_TARGET = 10.7;
OBJROOT = ./../Mac/DebugIntermediateStyle; OBJROOT = ./../Mac/DebugIntermediateStyle;
@ -750,10 +754,10 @@
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-headerpad_max_install_names", "-headerpad_max_install_names",
"-stdlib=libc++", "-stdlib=libc++",
"-L/usr/local/Qt-5.4.0/lib", "-L/usr/local/Qt-5.5.0/lib",
"-L/usr/local/Qt-5.4.0/plugins/platforms", "-L/usr/local/Qt-5.5.0/plugins/platforms",
"-lcups", "-lcups",
"-L/usr/local/Qt-5.4.0/plugins/imageformats", "-L/usr/local/Qt-5.5.0/plugins/imageformats",
"-lz", "-lz",
"-lm", "-lm",
); );
@ -771,15 +775,15 @@
COPY_PHASE_STRIP = YES; COPY_PHASE_STRIP = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui,
./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore,
./../../Libraries/QtStatic/qtbase/include, ./../../Libraries/QtStatic/qtbase/include,
"/usr/local/Qt-5.4.0/include", "/usr/local/Qt-5.5.0/include",
"/usr/local/Qt-5.4.0/include/QtGui", "/usr/local/Qt-5.5.0/include/QtGui",
"/usr/local/Qt-5.4.0/include/QtCore", "/usr/local/Qt-5.5.0/include/QtCore",
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers,
"/usr/local/Qt-5.4.0/mkspecs/macx-clang", "/usr/local/Qt-5.5.0/mkspecs/macx-clang",
); );
INSTALL_DIR = ./../Mac/ReleaseStyle/; INSTALL_DIR = ./../Mac/ReleaseStyle/;
PRODUCT_NAME = MetaStyle; PRODUCT_NAME = MetaStyle;
@ -797,15 +801,15 @@
GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_OPTIMIZATION_LEVEL = 0; GCC_OPTIMIZATION_LEVEL = 0;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui,
./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore,
./../../Libraries/QtStatic/qtbase/include, ./../../Libraries/QtStatic/qtbase/include,
"/usr/local/Qt-5.4.0/include", "/usr/local/Qt-5.5.0/include",
"/usr/local/Qt-5.4.0/include/QtGui", "/usr/local/Qt-5.5.0/include/QtGui",
"/usr/local/Qt-5.4.0/include/QtCore", "/usr/local/Qt-5.5.0/include/QtCore",
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers,
"/usr/local/Qt-5.4.0/mkspecs/macx-clang", "/usr/local/Qt-5.5.0/mkspecs/macx-clang",
); );
INSTALL_DIR = ./../Mac/DebugStyle/; INSTALL_DIR = ./../Mac/DebugStyle/;
PRODUCT_NAME = MetaStyle; PRODUCT_NAME = MetaStyle;

View file

@ -1,21 +1,21 @@
############################################################################# #############################################################################
# Makefile for building: ../Mac/DebugStyle/MetaStyle.app/Contents/MacOS/MetaStyle # Makefile for building: ../Mac/DebugStyle/MetaStyle.app/Contents/MacOS/MetaStyle
# Generated by qmake (3.0) (Qt 5.4.0) # Generated by qmake (3.0) (Qt 5.5.0)
# Project: MetaStyle.pro # Project: MetaStyle.pro
# Template: app # Template: app
# Command: /usr/local/Qt-5.4.0/bin/qmake -spec macx-xcode -o MetaStyle.xcodeproj/project.pbxproj MetaStyle.pro # Command: /usr/local/Qt-5.5.0/bin/qmake -spec macx-xcode -o MetaStyle.xcodeproj/project.pbxproj MetaStyle.pro
############################################################################# #############################################################################
MAKEFILE = project.pbxproj MAKEFILE = project.pbxproj
MOC = /usr/local/Qt-5.4.0/bin/moc MOC = /usr/local/Qt-5.5.0/bin/moc
UIC = UIC =
LEX = flex LEX = flex
LEXFLAGS = LEXFLAGS =
YACC = yacc YACC = yacc
YACCFLAGS = -d YACCFLAGS = -d
DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB
INCPATH = -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers INCPATH = -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers
DEL_FILE = rm -f DEL_FILE = rm -f
MOVE = mv -f MOVE = mv -f
@ -51,7 +51,7 @@ GeneratedFiles/Debug/moc_genstyles.cpp: ../../Libraries/QtStatic/qtbase/include/
../../Libraries/QtStatic/qtbase/include/QtGui/QGuiApplication \ ../../Libraries/QtStatic/qtbase/include/QtGui/QGuiApplication \
../../Libraries/QtStatic/qtbase/include/QtGui/QPainter \ ../../Libraries/QtStatic/qtbase/include/QtGui/QPainter \
SourceFiles/_other/genstyles.h SourceFiles/_other/genstyles.h
/usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/_other/genstyles.h -o GeneratedFiles/Debug/moc_genstyles.cpp /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/_other/genstyles.h -o GeneratedFiles/Debug/moc_genstyles.cpp
compiler_moc_source_make_all: compiler_moc_source_make_all:
compiler_moc_source_clean: compiler_moc_source_clean:

View file

@ -9,7 +9,7 @@
<key>CFBundleIconFile</key> <key>CFBundleIconFile</key>
<string></string> <string></string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>com.ddesktop.${PRODUCT_NAME:rfc1034identifier}</string> <string>com.tdesktop.$(PRODUCT_NAME:rfc1034identifier)</string>
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>

View file

@ -35,8 +35,8 @@ unix {
} }
} }
INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui\ INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui\
./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore\ ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore\
./../../Libraries/QtStatic/qtbase/include ./../../Libraries/QtStatic/qtbase/include
LIBS += -lcrypto -lssl -lz -llzma LIBS += -lcrypto -lssl -lz -llzma

View file

@ -113,7 +113,7 @@
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile> <OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>.\..\..\Libraries\lzma\C\Util\LzmaLib\Release;$(QTDIR)\lib;.\..\..\Libraries\zlib-1.2.8\contrib\vstudio\vc11\x86\ZlibStatRelease;.\..\..\Libraries\OpenSSL-Win32\lib\VC\static;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>.\..\..\Libraries\lzma\C\Util\LzmaLib\Release;$(QTDIR)\lib;.\..\..\Libraries\zlib-1.2.8\contrib\vstudio\vc11\x86\ZlibStatRelease;.\..\..\Libraries\OpenSSL-Win32\lib\VC\static;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;zlibstat.lib;libeay32MT.lib;Qt5Core.lib;LzmaLib.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;zlibstat.lib;libeay32MT.lib;Qt5Core.lib;qtpcre.lib;LzmaLib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>false</GenerateDebugInformation> <GenerateDebugInformation>false</GenerateDebugInformation>
<ImageHasSafeExceptionHandlers> <ImageHasSafeExceptionHandlers>
</ImageHasSafeExceptionHandlers> </ImageHasSafeExceptionHandlers>

View file

@ -21,6 +21,7 @@
/* End PBXAggregateTarget section */ /* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07D795491B5544B200DE9598 /* qtpcre */; };
1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; }; 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; };
1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; }; 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; };
328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; }; 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; };
@ -60,157 +61,158 @@
/* End PBXContainerItemProxy section */ /* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.4.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.5.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = "<absolute>"; }; 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = "<absolute>"; };
075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = "<absolute>"; }; 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = "<absolute>"; };
0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/unix.conf"; sourceTree = "<absolute>"; }; 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.5.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<group>"; };
111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = "<absolute>"; }; 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/unix.conf"; sourceTree = "<absolute>"; };
16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = "<absolute>"; }; 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = "<absolute>"; };
1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = "<absolute>"; }; 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = "<absolute>"; };
23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = "<absolute>"; }; 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = "<absolute>"; };
2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = "<absolute>"; }; 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = "<absolute>"; };
247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = "<absolute>"; }; 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = "<absolute>"; };
24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = "<absolute>"; }; 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = "<absolute>"; };
28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = "<absolute>"; }; 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = "<absolute>"; };
293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = "<absolute>"; }; 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = "<absolute>"; };
2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = "<absolute>"; }; 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = "<absolute>"; };
2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = "<absolute>"; }; 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = "<absolute>"; };
311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = "<absolute>"; }; 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = "<absolute>"; };
31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = "<absolute>"; };
33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = "<absolute>"; }; 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = "<absolute>"; }; 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = "<absolute>"; };
360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = "<absolute>"; }; 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = "<absolute>"; };
3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = "<absolute>"; }; 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = "<absolute>"; };
382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = "<absolute>"; }; 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = "<absolute>"; };
3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = "<absolute>"; }; 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = "<absolute>"; };
45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf"; sourceTree = "<absolute>"; }; 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = "<absolute>"; };
45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = "<absolute>"; }; 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf"; sourceTree = "<absolute>"; };
4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.4.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = "<absolute>"; };
4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = "<absolute>"; }; 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.5.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = "<absolute>"; };
4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; }; 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; };
4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = "<absolute>"; }; 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = "<absolute>"; };
5520A59148EC5EC44EF0D3CD /* Packer.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = Packer.pro; sourceTree = "<absolute>"; }; 5520A59148EC5EC44EF0D3CD /* Packer.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = Packer.pro; sourceTree = "<absolute>"; };
5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = "<absolute>"; }; 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = "<absolute>"; };
5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.4.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.5.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
5AA25EFD83BC060B26945285 /* packer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = packer.h; path = SourceFiles/_other/packer.h; sourceTree = "<absolute>"; }; 5AA25EFD83BC060B26945285 /* packer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = packer.h; path = SourceFiles/_other/packer.h; sourceTree = "<absolute>"; };
5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = "<absolute>"; }; 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = "<absolute>"; };
5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = "<absolute>"; }; 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = "<absolute>"; };
5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = "<absolute>"; }; 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = "<absolute>"; };
6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = "<absolute>"; }; 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = "<absolute>"; };
63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf"; sourceTree = "<absolute>"; }; 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf"; sourceTree = "<absolute>"; };
669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf"; sourceTree = "<absolute>"; }; 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf"; sourceTree = "<absolute>"; };
69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = "<absolute>"; }; 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = "<absolute>"; };
6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = "<absolute>"; }; 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = "<absolute>"; };
6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qdevice.pri"; sourceTree = "<absolute>"; }; 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qdevice.pri"; sourceTree = "<absolute>"; };
74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = "<absolute>"; }; 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = "<absolute>"; };
77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = "<absolute>"; }; 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = "<absolute>"; };
7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = "<absolute>"; }; 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = "<absolute>"; };
7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = "<absolute>"; }; 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = "<absolute>"; };
7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = "<absolute>"; }; 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = "<absolute>"; };
7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = "<absolute>"; }; 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = "<absolute>"; };
7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = "<absolute>"; }; 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = "<absolute>"; };
817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/macx.conf"; sourceTree = "<absolute>"; }; 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/macx.conf"; sourceTree = "<absolute>"; };
82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = "<absolute>"; }; 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = "<absolute>"; };
83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = "<absolute>"; }; 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = "<absolute>"; };
85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = "<absolute>"; }; 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = "<absolute>"; };
87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = "<absolute>"; }; 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = "<absolute>"; };
87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = "<absolute>"; }; 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = "<absolute>"; };
8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = "<absolute>"; }; 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = "<absolute>"; };
892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = "<absolute>"; }; 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = "<absolute>"; };
89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = "<absolute>"; }; 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = "<absolute>"; };
8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = "<absolute>"; }; 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = "<absolute>"; };
8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = "<absolute>"; }; 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = "<absolute>"; };
8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = "<absolute>"; }; 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = "<absolute>"; };
8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang.conf"; sourceTree = "<absolute>"; }; 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang.conf"; sourceTree = "<absolute>"; };
8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; }; 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = "<absolute>"; }; 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = "<absolute>"; };
8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = "<absolute>"; }; 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = "<absolute>"; };
8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = "<absolute>"; }; 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = "<absolute>"; };
8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = "<absolute>"; }; 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = "<absolute>"; };
946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = "<absolute>"; }; 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = "<absolute>"; };
9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; }; 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; };
9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = "<absolute>"; }; 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = "<absolute>"; };
9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; 9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = "<absolute>"; }; A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = "<absolute>"; };
A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; };
A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = "<absolute>"; }; A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = "<absolute>"; };
A5588D4B50885E2A9CAA5505 /* Packer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Packer.app; sourceTree = BUILT_PRODUCTS_DIR; }; A5588D4B50885E2A9CAA5505 /* Packer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Packer.app; sourceTree = BUILT_PRODUCTS_DIR; };
A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = "<absolute>"; }; A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = "<absolute>"; };
A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = "<absolute>"; }; A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = "<absolute>"; };
A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = "<absolute>"; }; A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = "<absolute>"; };
AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = "<absolute>"; }; AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = "<absolute>"; };
AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = "<absolute>"; }; AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = "<absolute>"; };
AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = "<absolute>"; }; AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = "<absolute>"; };
ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = "<absolute>"; }; ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = "<absolute>"; };
ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = "<absolute>"; }; ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = "<absolute>"; };
ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = "<absolute>"; }; ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = "<absolute>"; };
AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = "<absolute>"; }; AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = "<absolute>"; };
B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = "<absolute>"; }; B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = "<absolute>"; };
B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = "<absolute>"; }; B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = "<absolute>"; };
B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = "<absolute>"; }; B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = "<absolute>"; };
B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = "<absolute>"; }; B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = "<absolute>"; };
B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = "<absolute>"; }; B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = "<absolute>"; };
B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = "<absolute>"; }; B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = "<absolute>"; };
B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = "<absolute>"; }; B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = "<absolute>"; };
B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = "<absolute>"; }; B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = "<absolute>"; };
B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = "<absolute>"; }; B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = "<absolute>"; };
BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = "<absolute>"; }; BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = "<absolute>"; };
BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = "<absolute>"; }; BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = "<absolute>"; };
BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = "<absolute>"; }; BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = "<absolute>"; };
BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = "<absolute>"; }; BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = "<absolute>"; };
C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = "<absolute>"; }; C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = "<absolute>"; };
C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = "<absolute>"; }; C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = "<absolute>"; };
C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = "<absolute>"; }; C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = "<absolute>"; };
CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = "<absolute>"; }; CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = "<absolute>"; };
CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = "<absolute>"; }; CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = "<absolute>"; };
CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = "<absolute>"; }; CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = "<absolute>"; };
CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = "<absolute>"; }; CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = "<absolute>"; };
CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = "<absolute>"; }; CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = "<absolute>"; };
D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = "<absolute>"; }; D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = "<absolute>"; };
D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = "<absolute>"; }; D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = "<absolute>"; };
D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = "<absolute>"; }; D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = "<absolute>"; };
D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qconfig.pri"; sourceTree = "<absolute>"; }; D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qconfig.pri"; sourceTree = "<absolute>"; };
D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = "<absolute>"; }; D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = "<absolute>"; };
D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.4.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.5.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.4.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.5.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = "<absolute>"; }; D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = "<absolute>"; };
D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = "<absolute>"; }; D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = "<absolute>"; };
D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = "<absolute>"; }; D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = "<absolute>"; };
DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = "<absolute>"; }; DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = "<absolute>"; };
DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = "<absolute>"; }; DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = "<absolute>"; };
DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; };
E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = "<absolute>"; }; E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = "<absolute>"; };
E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = "<absolute>"; }; E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = "<absolute>"; };
E3790AE49DBDB3F5EFA42FE1 /* packer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = packer.cpp; path = SourceFiles/_other/packer.cpp; sourceTree = "<absolute>"; }; E3790AE49DBDB3F5EFA42FE1 /* packer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = packer.cpp; path = SourceFiles/_other/packer.cpp; sourceTree = "<absolute>"; };
E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = "<absolute>"; }; E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = "<absolute>"; };
E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = "<absolute>"; }; E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = "<absolute>"; };
E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = "<absolute>"; }; E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = "<absolute>"; };
E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = "<absolute>"; }; E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = "<absolute>"; };
EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = "<absolute>"; }; EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = "<absolute>"; };
EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = "<absolute>"; }; EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = "<absolute>"; };
EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = "<absolute>"; }; EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = "<absolute>"; };
EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/mac.conf"; sourceTree = "<absolute>"; }; EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/mac.conf"; sourceTree = "<absolute>"; };
F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = "<absolute>"; }; F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = "<absolute>"; };
F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; }; F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = "<absolute>"; }; F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = "<absolute>"; };
F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf"; sourceTree = "<absolute>"; }; F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf"; sourceTree = "<absolute>"; };
F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = "<absolute>"; }; F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = "<absolute>"; };
F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = "<absolute>"; }; F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = "<absolute>"; };
F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = "<absolute>"; }; F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = "<absolute>"; };
F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = "<absolute>"; }; F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = "<absolute>"; };
FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = "<absolute>"; }; FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = "<absolute>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@ -242,6 +244,7 @@
F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */, F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */,
9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */, 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */,
8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */, 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */,
07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */,
B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */, B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */,
); );
name = "Link Binary With Libraries"; name = "Link Binary With Libraries";
@ -279,127 +282,127 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
5520A59148EC5EC44EF0D3CD /* Packer.pro */, 5520A59148EC5EC44EF0D3CD /* Packer.pro */,
6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */, 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */,
669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */, 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */,
0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */, 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */,
EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */, EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */,
817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */, 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */,
45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */, 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */,
A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */, A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */,
8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */, 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */,
F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */, F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */,
D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */, D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */,
ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */, ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */,
2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */,
BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */,
CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */, CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */,
77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */, 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */,
7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */, 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */,
7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */, 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */,
5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */, 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */,
7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */, 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */,
89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */, 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */,
F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */, F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */,
7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */, 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */,
69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */,
360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */, 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */,
4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */, 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */,
23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */, 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */,
D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */, D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */,
FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */, FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */,
D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */, D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */,
A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */, A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */,
33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */, 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */,
D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */, D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */,
E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */, E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */,
28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */,
D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */,
293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */, 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */,
382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */, 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */,
8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */, 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */,
B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */, B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */,
5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */, 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */,
E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */, E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */,
E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */, E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */,
5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */,
8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */,
F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */, F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */,
E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */, E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */,
6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */, 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */,
D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */, D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */,
B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */, B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */,
6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */, 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */,
4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */,
DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */, DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */,
ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */, ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */,
5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */,
16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */, 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */,
8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */, 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */,
82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */,
D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */, D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */,
B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */,
CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */, CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */,
C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */, C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */,
CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */, CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */,
A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */, A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */,
85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */, 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */,
BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */, BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */,
BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */, BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */,
311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */, 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */,
7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */, 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */,
075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */, 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */,
ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */, ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */,
8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */, 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */,
DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */, DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */,
8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */, 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */,
E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */, E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */,
B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */, B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */,
8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */, 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */,
87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */, 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */,
A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */, A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */,
8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */, 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */,
AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */, AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */,
E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */, E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */,
2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */,
F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */,
D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */,
1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */,
F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */,
AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */, AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */,
EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */,
111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */, 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */,
3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */,
2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */,
EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */, EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */,
C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */, C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */,
45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */, 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */,
B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */, B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */,
F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */,
B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */,
EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */,
3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */,
946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */, 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */,
CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */,
9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */,
B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */, B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */,
F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */, F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */,
CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */,
247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */,
87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */,
24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */,
060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */, 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */,
BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */, BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */,
B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */,
74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */,
C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */,
AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */,
8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */,
892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */,
A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */,
346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */, 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */,
B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */, B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */,
63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */, 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */,
85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */, 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */,
AB745978DF0F41D1801ABDA6 /* .qmake.stash */, AB745978DF0F41D1801ABDA6 /* .qmake.stash */,
); );
name = "Supporting Files"; name = "Supporting Files";
@ -408,6 +411,7 @@
AF39DD055C3EF8226FBE929D /* Frameworks */ = { AF39DD055C3EF8226FBE929D /* Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
07D795491B5544B200DE9598 /* qtpcre */,
AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */, AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */,
DFD7912080BC557230093752 /* ApplicationServices.framework */, DFD7912080BC557230093752 /* ApplicationServices.framework */,
9742F24EE18EA44D52824F1E /* CoreServices.framework */, 9742F24EE18EA44D52824F1E /* CoreServices.framework */,
@ -483,7 +487,7 @@
6DB9C3763D02B1415CD9D565 /* Project object */ = { 6DB9C3763D02B1415CD9D565 /* Project object */ = {
isa = PBXProject; isa = PBXProject;
attributes = { attributes = {
LastUpgradeCheck = 0610; LastUpgradeCheck = 0640;
}; };
buildConfigurationList = DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "Packer" */; buildConfigurationList = DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "Packer" */;
compatibilityVersion = "Xcode 3.2"; compatibilityVersion = "Xcode 3.2";
@ -554,6 +558,7 @@
ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_STRICT_OBJC_MSGSEND = YES;
FRAMEWORK_SEARCH_PATHS = ""; FRAMEWORK_SEARCH_PATHS = "";
GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
@ -562,26 +567,26 @@
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui,
../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore,
../../Libraries/QtStatic/qtbase/include, ../../Libraries/QtStatic/qtbase/include,
/usr/local/include, /usr/local/include,
"/usr/local/Qt-5.4.0/include", "/usr/local/Qt-5.5.0/include",
"/usr/local/Qt-5.4.0/include/QtGui", "/usr/local/Qt-5.5.0/include/QtGui",
"/usr/local/Qt-5.4.0/include/QtCore", "/usr/local/Qt-5.5.0/include/QtCore",
GeneratedFiles/Debug, GeneratedFiles/Debug,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers,
"/usr/local/Qt-5.4.0/mkspecs/macx-clang", "/usr/local/Qt-5.5.0/mkspecs/macx-clang",
); );
INFOPLIST_FILE = Packer.plist; INFOPLIST_FILE = Packer.plist;
INSTALL_DIR = "../Mac/$(CONFIGURATION)"; INSTALL_DIR = "../Mac/$(CONFIGURATION)";
LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++";
LIBRARY_SEARCH_PATHS = ( LIBRARY_SEARCH_PATHS = (
/System/Library/Frameworks/, /System/Library/Frameworks/,
"/usr/local/Qt-5.4.0/lib", "/usr/local/Qt-5.5.0/lib",
"/usr/local/Qt-5.4.0/plugins/platforms", "/usr/local/Qt-5.5.0/plugins/platforms",
"/usr/local/Qt-5.4.0/plugins/imageformats", "/usr/local/Qt-5.5.0/plugins/imageformats",
); );
MACOSX_DEPLOYMENT_TARGET = 10.7; MACOSX_DEPLOYMENT_TARGET = 10.7;
OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker/"; OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker/";
@ -612,10 +617,10 @@
"-stdlib=libc++", "-stdlib=libc++",
"-lcrypto", "-lcrypto",
"-lssl", "-lssl",
"-L/usr/local/Qt-5.4.0/lib", "-L/usr/local/Qt-5.5.0/lib",
"-L/usr/local/Qt-5.4.0/plugins/platforms", "-L/usr/local/Qt-5.5.0/plugins/platforms",
"-lcups", "-lcups",
"-L/usr/local/Qt-5.4.0/plugins/imageformats", "-L/usr/local/Qt-5.5.0/plugins/imageformats",
"-lz", "-lz",
"-lm", "-lm",
"-llzma", "-llzma",
@ -645,6 +650,7 @@
ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_STRICT_OBJC_MSGSEND = YES;
FRAMEWORK_SEARCH_PATHS = ""; FRAMEWORK_SEARCH_PATHS = "";
GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0; GCC_OPTIMIZATION_LEVEL = 0;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@ -654,26 +660,26 @@
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui,
../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore,
../../Libraries/QtStatic/qtbase/include, ../../Libraries/QtStatic/qtbase/include,
/usr/local/include, /usr/local/include,
"/usr/local/Qt-5.4.0/include", "/usr/local/Qt-5.5.0/include",
"/usr/local/Qt-5.4.0/include/QtGui", "/usr/local/Qt-5.5.0/include/QtGui",
"/usr/local/Qt-5.4.0/include/QtCore", "/usr/local/Qt-5.5.0/include/QtCore",
GeneratedFiles/Debug, GeneratedFiles/Debug,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers,
"/usr/local/Qt-5.4.0/mkspecs/macx-clang", "/usr/local/Qt-5.5.0/mkspecs/macx-clang",
); );
INFOPLIST_FILE = Packer.plist; INFOPLIST_FILE = Packer.plist;
INSTALL_DIR = "../Mac/$(CONFIGURATION)"; INSTALL_DIR = "../Mac/$(CONFIGURATION)";
LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++";
LIBRARY_SEARCH_PATHS = ( LIBRARY_SEARCH_PATHS = (
/System/Library/Frameworks/, /System/Library/Frameworks/,
"/usr/local/Qt-5.4.0/lib", "/usr/local/Qt-5.5.0/lib",
"/usr/local/Qt-5.4.0/plugins/platforms", "/usr/local/Qt-5.5.0/plugins/platforms",
"/usr/local/Qt-5.4.0/plugins/imageformats", "/usr/local/Qt-5.5.0/plugins/imageformats",
); );
MACOSX_DEPLOYMENT_TARGET = 10.7; MACOSX_DEPLOYMENT_TARGET = 10.7;
OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker/"; OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker/";
@ -705,10 +711,10 @@
"-stdlib=libc++", "-stdlib=libc++",
"-lcrypto", "-lcrypto",
"-lssl", "-lssl",
"-L/usr/local/Qt-5.4.0/lib", "-L/usr/local/Qt-5.5.0/lib",
"-L/usr/local/Qt-5.4.0/plugins/platforms", "-L/usr/local/Qt-5.5.0/plugins/platforms",
"-lcups", "-lcups",
"-L/usr/local/Qt-5.4.0/plugins/imageformats", "-L/usr/local/Qt-5.5.0/plugins/imageformats",
"-lz", "-lz",
"-lm", "-lm",
"-llzma", "-llzma",
@ -726,6 +732,10 @@
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = YES; COPY_PHASE_STRIP = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"/usr/local/Qt-5.5.0/lib",
);
OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker"; OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker";
OTHER_CFLAGS = ( OTHER_CFLAGS = (
"-pipe", "-pipe",
@ -765,6 +775,10 @@
DEBUG_INFORMATION_FORMAT = dwarf; DEBUG_INFORMATION_FORMAT = dwarf;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_OPTIMIZATION_LEVEL = 0; GCC_OPTIMIZATION_LEVEL = 0;
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"/usr/local/Qt-5.5.0/lib",
);
OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker"; OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker";
OTHER_CFLAGS = ( OTHER_CFLAGS = (
"-pipe", "-pipe",

View file

@ -1,21 +1,21 @@
############################################################################# #############################################################################
# Makefile for building: ../Mac/DebugPacker/Packer.app/Contents/MacOS/Packer # Makefile for building: ../Mac/DebugPacker/Packer.app/Contents/MacOS/Packer
# Generated by qmake (3.0) (Qt 5.4.0) # Generated by qmake (3.0) (Qt 5.5.0)
# Project: Packer.pro # Project: Packer.pro
# Template: app # Template: app
# Command: /usr/local/Qt-5.4.0/bin/qmake -spec macx-xcode -o Packer.xcodeproj/project.pbxproj Packer.pro # Command: /usr/local/Qt-5.5.0/bin/qmake -spec macx-xcode -o Packer.xcodeproj/project.pbxproj Packer.pro
############################################################################# #############################################################################
MAKEFILE = project.pbxproj MAKEFILE = project.pbxproj
MOC = /usr/local/Qt-5.4.0/bin/moc MOC = /usr/local/Qt-5.5.0/bin/moc
UIC = UIC =
LEX = flex LEX = flex
LEXFLAGS = LEXFLAGS =
YACC = yacc YACC = yacc
YACCFLAGS = -d YACCFLAGS = -d
DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB
INCPATH = -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I../../Libraries/lzma/C -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers INCPATH = -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I../../Libraries/lzma/C -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers
DEL_FILE = rm -f DEL_FILE = rm -f
MOVE = mv -f MOVE = mv -f

View file

@ -1,6 +1,7 @@
AppVersion=`./Version.sh | awk -F " " '{print $1}'` AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'`
AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` AppVersion=`./Version.sh | awk -F " " '{print $2}'`
DevChannel=`./Version.sh | awk -F " " '{print $3}'` AppVersionStr=`./Version.sh | awk -F " " '{print $3}'`
DevChannel=`./Version.sh | awk -F " " '{print $4}'`
DevPostfix='' DevPostfix=''
DevParam='' DevParam=''
if [ "$DevChannel" != "0" ]; then if [ "$DevChannel" != "0" ]; then
@ -8,12 +9,12 @@ if [ "$DevChannel" != "0" ]; then
DevParam='-dev' DevParam='-dev'
fi fi
if [ -d "./../Linux/Release/deploy/$AppVersionStr.dev" ]; then if [ -d "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr.dev" ]; then
echo "Deploy folder for version $AppVersionStr.dev already exists!" echo "Deploy folder for version $AppVersionStr.dev already exists!"
exit 1 exit 1
fi fi
if [ -d "./../Linux/Release/deploy/$AppVersionStr" ]; then if [ -d "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr" ]; then
echo "Deploy folder for version $AppVersionStr already exists!" echo "Deploy folder for version $AppVersionStr already exists!"
exit 1 exit 1
fi fi
@ -40,12 +41,17 @@ echo "Packer done!"
if [ ! -d "./../Linux/Release/deploy" ]; then if [ ! -d "./../Linux/Release/deploy" ]; then
mkdir "./../Linux/Release/deploy" mkdir "./../Linux/Release/deploy"
fi fi
echo "Copying Telegram, Updater and tlinuxupd$AppVersion to deploy/$AppVersionStr$DevPostfix..";
mkdir "./../Linux/Release/deploy/$AppVersionStr$DevPostfix" if [ ! -d "./../Linux/Release/deploy/$AppVersionStrMajor" ]; then
mkdir "./../Linux/Release/deploy/$AppVersionStr$DevPostfix/Telegram" mkdir "./../Linux/Release/deploy/$AppVersionStrMajor"
mv ./../Linux/Release/Telegram ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/Telegram/ fi
mv ./../Linux/Release/Updater ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/Telegram/
mv ./../Linux/Release/tlinuxupd$AppVersion ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/ echo "Copying Telegram, Updater and tlinuxupd$AppVersion to deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix..";
cd ./../Linux/Release/deploy/$AppVersionStr$DevPostfix && tar -cJvf tsetup.$AppVersionStr$DevPostfix.tar.xz Telegram/ && cd ./../../../../Telegram mkdir "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix"
mkdir "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram"
mv ./../Linux/Release/Telegram ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram/
mv ./../Linux/Release/Updater ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram/
mv ./../Linux/Release/tlinuxupd$AppVersion ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/
cd ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix && tar -cJvf tsetup.$AppVersionStr$DevPostfix.tar.xz Telegram/ && cd ./../../../../../Telegram
echo "Version $AppVersionStr$DevPostfix prepared!"; echo "Version $AppVersionStr$DevPostfix prepared!";

View file

@ -1,6 +1,7 @@
AppVersion=`./Version.sh | awk -F " " '{print $1}'` AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'`
AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` AppVersion=`./Version.sh | awk -F " " '{print $2}'`
DevChannel=`./Version.sh | awk -F " " '{print $3}'` AppVersionStr=`./Version.sh | awk -F " " '{print $3}'`
DevChannel=`./Version.sh | awk -F " " '{print $4}'`
DevPostfix='' DevPostfix=''
DevParam='' DevParam=''
if [ "$DevChannel" != "0" ]; then if [ "$DevChannel" != "0" ]; then
@ -8,12 +9,12 @@ if [ "$DevChannel" != "0" ]; then
DevParam='-dev' DevParam='-dev'
fi fi
if [ -d "./../Linux/Release/deploy/$AppVersionStr.dev" ]; then if [ -d "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr.dev" ]; then
echo "Deploy folder for version $AppVersionStr.dev already exists!" echo "Deploy folder for version $AppVersionStr.dev already exists!"
exit 1 exit 1
fi fi
if [ -d "./../Linux/Release/deploy/$AppVersionStr" ]; then if [ -d "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr" ]; then
echo "Deploy folder for version $AppVersionStr already exists!" echo "Deploy folder for version $AppVersionStr already exists!"
exit 1 exit 1
fi fi
@ -40,12 +41,17 @@ echo "Packer done!"
if [ ! -d "./../Linux/Release/deploy" ]; then if [ ! -d "./../Linux/Release/deploy" ]; then
mkdir "./../Linux/Release/deploy" mkdir "./../Linux/Release/deploy"
fi fi
echo "Copying Telegram, Updater and tlinux32upd$AppVersion to deploy/$AppVersionStr$DevPostfix..";
mkdir "./../Linux/Release/deploy/$AppVersionStr$DevPostfix" if [ ! -d "./../Linux/Release/deploy/$AppVersionStrMajor" ]; then
mkdir "./../Linux/Release/deploy/$AppVersionStr$DevPostfix/Telegram" mkdir "./../Linux/Release/deploy/$AppVersionStrMajor"
mv ./../Linux/Release/Telegram ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/Telegram/ fi
mv ./../Linux/Release/Updater ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/Telegram/
mv ./../Linux/Release/tlinux32upd$AppVersion ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/ echo "Copying Telegram, Updater and tlinux32upd$AppVersion to deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix..";
cd ./../Linux/Release/deploy/$AppVersionStr$DevPostfix && tar -cJvf tsetup32.$AppVersionStr$DevPostfix.tar.xz Telegram/ && cd ./../../../../Telegram mkdir "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix"
mkdir "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram"
mv ./../Linux/Release/Telegram ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram/
mv ./../Linux/Release/Updater ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram/
mv ./../Linux/Release/tlinux32upd$AppVersion ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/
cd ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix && tar -cJvf tsetup32.$AppVersionStr$DevPostfix.tar.xz Telegram/ && cd ./../../../../../Telegram
echo "Version $AppVersionStr$DevPostfix prepared!"; echo "Version $AppVersionStr$DevPostfix prepared!";

View file

@ -1,6 +1,7 @@
AppVersion=`./Version.sh | awk -F " " '{print $1}'` AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'`
AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` AppVersion=`./Version.sh | awk -F " " '{print $2}'`
DevChannel=`./Version.sh | awk -F " " '{print $3}'` AppVersionStr=`./Version.sh | awk -F " " '{print $3}'`
DevChannel=`./Version.sh | awk -F " " '{print $4}'`
DevPostfix='' DevPostfix=''
DevParam='' DevParam=''
if [ "$DevChannel" != "0" ]; then if [ "$DevChannel" != "0" ]; then
@ -12,17 +13,17 @@ echo ""
echo "Preparing version $AppVersionStr$DevPostfix.." echo "Preparing version $AppVersionStr$DevPostfix.."
echo "" echo ""
if [ -d "./../Mac/Release/deploy/$AppVersionStr.dev" ]; then if [ -d "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr.dev" ]; then
echo "Deploy folder for version $AppVersionStr.dev already exists!" echo "Deploy folder for version $AppVersionStr.dev already exists!"
exit 1 exit 1
fi fi
if [ -d "./../Mac/Release/deploy/$AppVersionStr" ]; then if [ -d "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr" ]; then
echo "Deploy folder for version $AppVersionStr already exists!" echo "Deploy folder for version $AppVersionStr already exists!"
exit 1 exit 1
fi fi
if [ -f "./../Mac/Release/tupdate$AppVersion" ]; then if [ -f "./../Mac/Release/tmacupd$AppVersion" ]; then
echo "Update file for version $AppVersion already exists!" echo "Update file for version $AppVersion already exists!"
exit 1 exit 1
fi fi
@ -73,19 +74,23 @@ hdiutil convert tsetup.dmg -format UDZO -imagekey zlib-level=9 -ov -o tsetup.$Ap
cd ./../../Telegram cd ./../../Telegram
cd ./../Mac/Release && ./Packer.app/Contents/MacOS/Packer -path Telegram.app -version $AppVersion $DevParam && cd ./../../Telegram cd ./../Mac/Release && ./Packer.app/Contents/MacOS/Packer -path Telegram.app -version $AppVersion $DevParam && cd ./../../Telegram
if [ ! -d "./../Mac/Release/deploy/" ]; then if [ ! -d "./../Mac/Release/deploy" ]; then
mkdir "./../Mac/Release/deploy" mkdir "./../Mac/Release/deploy"
fi fi
echo "Copying Telegram.app and tmacupd$AppVersion to deploy/$AppVersionStr.."; if [ ! -d "./../Mac/Release/deploy/$AppVersionStrMajor" ]; then
mkdir "./../Mac/Release/deploy/$AppVersionStr$DevPostfix" mkdir "./../Mac/Release/deploy/$AppVersionStrMajor"
mkdir "./../Mac/Release/deploy/$AppVersionStr$DevPostfix/Telegram" fi
cp -r ./../Mac/Release/Telegram.app ./../Mac/Release/deploy/$AppVersionStr$DevPostfix/Telegram/
mv ./../Mac/Release/Telegram.app.dSYM ./../Mac/Release/deploy/$AppVersionStr$DevPostfix/ echo "Copying Telegram.app and tmacupd$AppVersion to deploy/$AppVersionStrMajor/$AppVersionStr..";
mkdir "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix"
mkdir "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram"
cp -r ./../Mac/Release/Telegram.app ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram/
mv ./../Mac/Release/Telegram.app.dSYM ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/
rm ./../Mac/Release/Telegram.app/Contents/MacOS/Telegram rm ./../Mac/Release/Telegram.app/Contents/MacOS/Telegram
rm ./../Mac/Release/Telegram.app/Contents/Frameworks/Updater rm ./../Mac/Release/Telegram.app/Contents/Frameworks/Updater
rm -rf ./../Mac/Release/Telegram.app/Contents/_CodeSignature rm -rf ./../Mac/Release/Telegram.app/Contents/_CodeSignature
mv ./../Mac/Release/tmacupd$AppVersion ./../Mac/Release/deploy/$AppVersionStr$DevPostfix/ mv ./../Mac/Release/tmacupd$AppVersion ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/
mv ./../Mac/Release/tsetup.$AppVersionStr$DevPostfix.dmg ./../Mac/Release/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg mv ./../Mac/Release/tsetup.$AppVersionStr$DevPostfix.dmg ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg
echo "Version $AppVersionStr$DevPostfix prepared!"; echo "Version $AppVersionStr$DevPostfix prepared!";

View file

@ -1,10 +1,11 @@
@echo OFF @echo OFF
set "AppVersion=8028" set "AppVersionStrMajor=0.8"
set "AppVersionStrSmall=0.8.28" set "AppVersion=8051"
set "AppVersionStr=0.8.28" set "AppVersionStrSmall=0.8.51"
set "AppVersionStrFull=0.8.28.0" set "AppVersionStr=0.8.51"
set "DevChannel=1" set "AppVersionStrFull=0.8.51.0"
set "DevChannel=0"
if %DevChannel% neq 0 goto preparedev if %DevChannel% neq 0 goto preparedev
@ -23,8 +24,8 @@ echo.
echo Preparing version %AppVersionStr%%DevPostfix%.. echo Preparing version %AppVersionStr%%DevPostfix%..
echo. echo.
if exist ..\Win32\Deploy\deploy\%AppVersionStr%\ goto error_exist1 if exist ..\Win32\Deploy\deploy\%AppVersionStrMajor%\%AppVersionStr%\ goto error_exist1
if exist ..\Win32\Deploy\deploy\%AppVersionStr%.dev\ goto error_exist2 if exist ..\Win32\Deploy\deploy\%AppVersionStrMajor%\%AppVersionStr%.dev\ goto error_exist2
if exist ..\Win32\Deploy\tupdate%AppVersion% goto error_exist3 if exist ..\Win32\Deploy\tupdate%AppVersion% goto error_exist3
set "PATH=%PATH%;C:\Program Files\7-Zip;C:\Program Files (x86)\Inno Setup 5" set "PATH=%PATH%;C:\Program Files\7-Zip;C:\Program Files (x86)\Inno Setup 5"
@ -46,17 +47,18 @@ call Packer.exe -version %AppVersion% -path Telegram.exe -path Updater.exe %DevP
if %errorlevel% neq 0 goto error1 if %errorlevel% neq 0 goto error1
if not exist deploy mkdir deploy if not exist deploy mkdir deploy
mkdir deploy\%AppVersionStr%%DevPostfix% if not exist deploy\%AppVersionStrMajor% mkdir deploy\%AppVersionStrMajor%
mkdir deploy\%AppVersionStr%%DevPostfix%\Telegram mkdir deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%
mkdir deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\Telegram
move Telegram.exe deploy\%AppVersionStr%%DevPostfix%\Telegram\ move Telegram.exe deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\Telegram\
move Updater.exe deploy\%AppVersionStr%%DevPostfix%\ move Updater.exe deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\
move Telegram.pdb deploy\%AppVersionStr%%DevPostfix%\ move Telegram.pdb deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\
move Updater.pdb deploy\%AppVersionStr%%DevPostfix%\ move Updater.pdb deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\
move tsetup.%AppVersionStr%%DevPostfix%.exe deploy\%AppVersionStr%%DevPostfix%\ move tsetup.%AppVersionStr%%DevPostfix%.exe deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\
move tupdate%AppVersion% deploy\%AppVersionStr%%DevPostfix%\ move tupdate%AppVersion% deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\
cd deploy\%AppVersionStr%%DevPostfix% cd deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%
7z a -mx9 tportable.%AppVersionStr%%DevPostfix%.zip Telegram\ 7z a -mx9 tportable.%AppVersionStr%%DevPostfix%.zip Telegram\
if %errorlevel% neq 0 goto error2 if %errorlevel% neq 0 goto error2
@ -64,11 +66,11 @@ echo .
echo Version %AppVersionStr%%DevPostfix% is ready for deploy! echo Version %AppVersionStr%%DevPostfix% is ready for deploy!
echo . echo .
cd ..\..\..\..\Telegram cd ..\..\..\..\..\Telegram
goto eof goto eof
:error2 :error2
cd ..\.. cd ..\..\..
:error1 :error1
cd ..\..\Telegram cd ..\..\Telegram
echo ERROR occured! echo ERROR occured!

View file

@ -28,7 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_open_from_tray" = "Open Telegram"; "lng_open_from_tray" = "Open Telegram";
"lng_minimize_to_tray" = "Minimize to tray"; "lng_minimize_to_tray" = "Minimize to tray";
"lng_quit_from_tray" = "Quit Telegram"; "lng_quit_from_tray" = "Quit Telegram";
"lng_tray_icon_text" = "Telegram is still running here,\nyou can change this from settings page.\n\nIf this icon disappears from tray menu,\nyou can drag it back here from hidden icons."; "lng_tray_icon_text" = "Telegram is still running here,\nyou can change this from settings page.\nIf this icon disappears from tray menu,\nyou can drag it here from hidden icons.";
"lng_month1" = "January"; "lng_month1" = "January";
"lng_month2" = "February"; "lng_month2" = "February";
@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_reconnecting_try_now" = "Try now"; "lng_reconnecting_try_now" = "Try now";
"lng_status_service_notifications" = "service notifications"; "lng_status_service_notifications" = "service notifications";
"lng_status_support" = "support";
"lng_status_bot" = "bot"; "lng_status_bot" = "bot";
"lng_status_bot_reads_all" = "has access to messages"; "lng_status_bot_reads_all" = "has access to messages";
"lng_status_bot_not_reads_all" = "has no access to messages"; "lng_status_bot_not_reads_all" = "has no access to messages";
@ -156,8 +157,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_dlg_new_group_name" = "Group name"; "lng_dlg_new_group_name" = "Group name";
"lng_dlg_create_group" = "Create"; "lng_dlg_create_group" = "Create";
"lng_no_contacts" = "You have no contacts"; "lng_no_contacts" = "You have no contacts";
"lng_no_chats" = "Your chats will be here";
"lng_contacts_loading" = "Loading.."; "lng_contacts_loading" = "Loading..";
"lng_contacts_not_found" = "No contacts found"; "lng_contacts_not_found" = "No contacts found";
"lng_dlg_search_chat" = "Search in this chat";
"lng_dlg_search_for_messages" = "Search for messages";
"lng_settings_save" = "Save"; "lng_settings_save" = "Save";
"lng_settings_upload" = "Set Profile Photo"; "lng_settings_upload" = "Set Profile Photo";
@ -166,11 +170,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_username_title" = "Change username"; "lng_username_title" = "Change username";
"lng_username_about" = "You can choose a username on Telegram.\nIf you do, other people will be able to find\nyou by this username and contact you\nwithout knowing your phone number.\n\nYou can use a-z, 0-9 and underscores.\nMinimum length is 5 characters."; "lng_username_about" = "You can choose a username on Telegram.\nIf you do, other people will be able to find\nyou by this username and contact you\nwithout knowing your phone number.\n\nYou can use a-z, 0-9 and underscores.\nMinimum length is 5 characters.";
"lng_username_invalid" = "This name is invalid."; "lng_username_invalid" = "This username is invalid.";
"lng_username_occupied" = "This name is already occupied."; "lng_username_occupied" = "This username is already occupied.";
"lng_username_too_short" = "This name is too short."; "lng_username_too_short" = "This username is too short.";
"lng_username_bad_symbols" = "This name has bad symbols."; "lng_username_bad_symbols" = "This username has bad symbols.";
"lng_username_available" = "This name is available."; "lng_username_available" = "This username is available.";
"lng_username_not_found" = "User @{user} not found."; "lng_username_not_found" = "User @{user} not found.";
"lng_settings_section_contact_info" = "Contact info"; "lng_settings_section_contact_info" = "Contact info";
@ -182,6 +186,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_settings_desktop_notify" = "Desktop notifications"; "lng_settings_desktop_notify" = "Desktop notifications";
"lng_settings_show_name" = "Show sender's name"; "lng_settings_show_name" = "Show sender's name";
"lng_settings_show_preview" = "Show message preview"; "lng_settings_show_preview" = "Show message preview";
"lng_settings_use_windows" = "Use Windows notifications";
"lng_settings_sound_notify" = "Play sound"; "lng_settings_sound_notify" = "Play sound";
"lng_notification_preview" = "You have a new message"; "lng_notification_preview" = "You have a new message";
@ -301,13 +306,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_connection_type" = "Connection type:"; "lng_connection_type" = "Connection type:";
"lng_connection_auto_connecting" = "Default (connecting..)"; "lng_connection_auto_connecting" = "Default (connecting..)";
"lng_connection_auto" = "Default ({type} used)"; "lng_connection_auto" = "Default ({transport} used)";
"lng_connection_http_proxy" = "HTTP with proxy"; "lng_connection_proxy_connecting" = "Connecting through proxy..";
"lng_connection_tcp_proxy" = "TCP with proxy"; "lng_connection_proxy" = "{transport} with proxy";
"lng_connection_header" = "Connection type"; "lng_connection_header" = "Connection type";
"lng_connection_auto_rb" = "Auto (TCP if available or HTTP)"; "lng_connection_auto_rb" = "Auto (TCP if available or HTTP)";
"lng_connection_http_proxy_rb" = "HTTP with custom http-proxy"; "lng_connection_http_proxy_rb" = "HTTP with custom http-proxy";
"lng_connection_tcp_proxy_rb" = "TCP with custom socks5-proxy"; "lng_connection_tcp_proxy_rb" = "TCP with custom socks5-proxy";
"lng_connection_try_ipv6" = "Try connecting through IPv6";
"lng_connection_host_ph" = "Hostname"; "lng_connection_host_ph" = "Hostname";
"lng_connection_port_ph" = "Port"; "lng_connection_port_ph" = "Port";
"lng_connection_user_ph" = "Username"; "lng_connection_user_ph" = "Username";
@ -319,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_settings_reset_one_sure" = "Do you want to terminate this session?"; "lng_settings_reset_one_sure" = "Do you want to terminate this session?";
"lng_settings_reset_button" = "Terminate"; "lng_settings_reset_button" = "Terminate";
"lng_settings_reset_done" = "Other sessions terminated"; "lng_settings_reset_done" = "Other sessions terminated";
"lng_settings_ask_question" = "Ask a Question";
"lng_settings_ask_sure" = "Please note that Telegram Support is done by volunteers. We try to respond as quickly as possible, but it may take a while.\n\nPlease take a look at the Telegram FAQ: it has important troubleshooting tips and answers to most questions.";
"lng_settings_faq_button" = "Go to FAQ";
"lng_settings_ask_ok" = "Ask";
"lng_settings_faq" = "Telegram FAQ";
"lng_settings_logout" = "Log Out"; "lng_settings_logout" = "Log Out";
"lng_sure_logout" = "Are you sure you want to log out?"; "lng_sure_logout" = "Are you sure you want to log out?";
@ -338,6 +349,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_topbar_info" = "Info"; "lng_topbar_info" = "Info";
"lng_profile_about_section" = "About"; "lng_profile_about_section" = "About";
"lng_profile_settings_section" = "Settings"; "lng_profile_settings_section" = "Settings";
"lng_profile_actions_section" = "Actions";
"lng_profile_bot_settings" = "Settings"; "lng_profile_bot_settings" = "Settings";
"lng_profile_bot_help" = "Help"; "lng_profile_bot_help" = "Help";
"lng_profile_participants_section" = "Members"; "lng_profile_participants_section" = "Members";
@ -347,6 +359,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_profile_edit_contact" = "Edit"; "lng_profile_edit_contact" = "Edit";
"lng_profile_enable_notifications" = "Notifications"; "lng_profile_enable_notifications" = "Notifications";
"lng_profile_clear_history" = "Clear history"; "lng_profile_clear_history" = "Clear history";
"lng_profile_delete_conversation" = "Delete conversation";
"lng_profile_clear_and_exit" = "Delete and exit";
"lng_profile_search_messages" = "Search for messages";
"lng_profile_block_user" = "Block user";
"lng_profile_unblock_user" = "Unblock user";
"lng_profile_block_bot" = "Stop and block bot";
"lng_profile_unblock_bot" = "Unblock bot";
"lng_profile_send_message" = "Send Message"; "lng_profile_send_message" = "Send Message";
"lng_profile_share_contact" = "Share Contact"; "lng_profile_share_contact" = "Share Contact";
"lng_profile_invite_to_group" = "Add to Group"; "lng_profile_invite_to_group" = "Add to Group";
@ -367,6 +386,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_profile_files_header" = "Files overview"; "lng_profile_files_header" = "Files overview";
"lng_profile_audios" = "{count:_not_used_|# voice message|# voice messages} »"; "lng_profile_audios" = "{count:_not_used_|# voice message|# voice messages} »";
"lng_profile_audios_header" = "Voice messages overview"; "lng_profile_audios_header" = "Voice messages overview";
"lng_profile_audio_files_header" = "Playlist";
"lng_profile_show_all_types" = "Show all types"; "lng_profile_show_all_types" = "Show all types";
"lng_profile_copy_phone" = "Copy phone number"; "lng_profile_copy_phone" = "Copy phone number";
@ -377,13 +397,16 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_create_group_title" = "New Group"; "lng_create_group_title" = "New Group";
"lng_failed_add_participant" = "Could not add user. Try again later."; "lng_failed_add_participant" = "Could not add user. Try again later.";
"lng_failed_add_not_mutual" = "Sorry, if a person left a group, only a\nmutual contact can bring them back\n(they need to have your phone\nnumber, and you need theirs).";
"lng_sure_delete_contact" = "Are you sure, you want to delete {contact} from your contact list?"; "lng_sure_delete_contact" = "Are you sure, you want to delete {contact} from your contact list?";
"lng_sure_delete_history" = "Are you sure, you want to delete all message history with {contact}?\n\nThis action cannot be undone."; "lng_sure_delete_history" = "Are you sure, you want to delete all message history with {contact}?\n\nThis action cannot be undone.";
"lng_sure_delete_group_history" = "Are you sure, you want to delete all message history in «{group}»?\n\nThis action cannot be undone.";
"lng_sure_delete_and_exit" = "Are you sure, you want to delete all message history and leave «{group}»?\n\nThis action cannot be undone."; "lng_sure_delete_and_exit" = "Are you sure, you want to delete all message history and leave «{group}»?\n\nThis action cannot be undone.";
"lng_message_empty" = "(empty)"; "lng_message_empty" = "Empty Message";
"lng_media_unsupported" = "Media Unsupported";
"lng_action_add_user" = "{from} added {user}"; "lng_action_add_user" = "{from} added {user}";
"lng_action_kick_user" = "{from} kicked {user}"; "lng_action_kick_user" = "{from} kicked {user}";
@ -459,10 +482,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_message_ph" = "Write a message.."; "lng_message_ph" = "Write a message..";
"lng_record_cancel" = "Release outside this field to cancel"; "lng_record_cancel" = "Release outside this field to cancel";
"lng_empty_history" = ""; "lng_empty_history" = "";
"lng_willbe_history" = "Please select chat to start messaging"; "lng_willbe_history" = "Please select a chat to start messaging";
"lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_message_with_from" = "[c]{from}:[/c] {message}";
"lng_from_you" = "You"; "lng_from_you" = "You";
"lng_bot_description" = "What can this bot do?"; "lng_bot_description" = "What can this bot do?";
"lng_unblock_button" = "Unblock";
"lng_bot_start" = "Start"; "lng_bot_start" = "Start";
"lng_bot_choose_group" = "Choose Group"; "lng_bot_choose_group" = "Choose Group";
@ -475,6 +499,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_user_typing" = "{user} is typing"; "lng_user_typing" = "{user} is typing";
"lng_users_typing" = "{user} and {second_user} are typing"; "lng_users_typing" = "{user} and {second_user} are typing";
"lng_many_typing" = "{count:_not_used_|# is|# are} typing"; "lng_many_typing" = "{count:_not_used_|# is|# are} typing";
"lng_send_action_record_video" = "recording video";
"lng_user_action_record_video" = "{user} is recording video";
"lng_send_action_upload_video" = "sending video";
"lng_user_action_upload_video" = "{user} is sending video";
"lng_send_action_record_audio" = "recording audio";
"lng_user_action_record_audio" = "{user} is recording audio";
"lng_send_action_upload_audio" = "sending audio";
"lng_user_action_upload_audio" = "{user} is sending audio";
"lng_send_action_upload_photo" = "sending photo";
"lng_user_action_upload_photo" = "{user} is sending photo";
"lng_send_action_upload_file" = "sending file";
"lng_user_action_upload_file" = "{user} is sending file";
"lng_send_action_geo_location" = "picking location";
"lng_user_action_geo_location" = "{user} is picking location";
"lng_send_action_choose_contact" = "choosing contact";
"lng_user_action_choose_contact" = "{user} is choosing contact";
"lng_unread_bar" = "{count:_not_used_|# unread message|# unread messages}"; "lng_unread_bar" = "{count:_not_used_|# unread message|# unread messages}";
"lng_maps_point" = "Location"; "lng_maps_point" = "Location";
@ -508,6 +548,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_context_open_audio" = "Open Audio"; "lng_context_open_audio" = "Open Audio";
"lng_context_save_audio" = "Save Audio As.."; "lng_context_save_audio" = "Save Audio As..";
"lng_context_pack_info" = "Pack Info"; "lng_context_pack_info" = "Pack Info";
"lng_context_pack_add" = "Add Stickers";
"lng_context_open_file" = "Open File"; "lng_context_open_file" = "Open File";
"lng_context_save_file" = "Save File As.."; "lng_context_save_file" = "Save File As..";
"lng_context_forward_file" = "Forward File"; "lng_context_forward_file" = "Forward File";
@ -600,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_new_version_wrap" = "Telegram Desktop was updated to version {version}\n\n{changes}\n\nFull version history is available here:\n{link}"; "lng_new_version_wrap" = "Telegram Desktop was updated to version {version}\n\n{changes}\n\nFull version history is available here:\n{link}";
"lng_new_version_minor" = "— Bug fixes and other minor improvements"; "lng_new_version_minor" = "— Bug fixes and other minor improvements";
"lng_new_version_text" = "This new version includes support for bots using the new bot API, free for everyone. If you're an engineer, create your own bots for games, services or integrations.\n\nLearn more at {blog_link}"; "lng_new_version_text" = "— Block users from their profile page\n— Added support for Windows toast notifications\n— Fixed input methods on Linux (Fcitx and IBus)";
"lng_menu_insert_unicode" = "Insert Unicode control character"; "lng_menu_insert_unicode" = "Insert Unicode control character";

View file

@ -0,0 +1,231 @@
1876;JM;Jamaica;1876 XXX XXXX;11;
1869;KN;Saint Kitts & Nevis;1869 XXX XXXX;11;
1868;TT;Trinidad & Tobago;1868 XXX XXXX;11;
1784;VC;Saint Vincent & the Grenadines;1784 XXX XXXX;11;
1767;DM;Dominica;1767 XXX XXXX;11;
1758;LC;Saint Lucia;1758 XXX XXXX;11;
1721;SX;Sint Maarten;1721 XXX XXXX;11;
1684;AS;American Samoa;1684 XXX XXXX;11;
1671;GU;Guam;1671 XXX XXXX;11;
1670;MP;Northern Mariana Islands;1670 XXX XXXX;11;
1664;MS;Montserrat;1664 XXX XXXX;11;
1649;TC;Turks & Caicos Islands;1649 XXX XXXX;11;
1473;GD;Grenada;1473 XXX XXXX;11;
1441;BM;Bermuda;1441 XXX XXXX;11;
1345;KY;Cayman Islands;1345 XXX XXXX;11;
1340;VI;US Virgin Islands;1340 XXX XXXX;11;
1284;VG;British Virgin Islands;1284 XXX XXXX;11;
1268;AG;Antigua & Barbuda;1268 XXX XXXX;11;
1264;AI;Anguilla;1264 XXX XXXX;11;
1246;BB;Barbados;1246 XXX XXXX;11;
1242;BS;Bahamas;1242 XXX XXXX;11;
998;UZ;Uzbekistan;998 XX XXXXXXX;12;
996;KG;Kyrgyzstan
995;GE;Georgia
994;AZ;Azerbaijan;994 XX XXX XX XX;12;
993;TM;Turkmenistan;993 XX XXXXXX;11;
992;TJ;Tajikistan
977;NP;Nepal
976;MN;Mongolia
975;BT;Bhutan
974;QA;Qatar
973;BH;Bahrain;973 XXXX XXXX;11;
972;IL;Israel;972 XX XXX XXXX;12;
971;AE;United Arab Emirates;971 XX XXX XXXX;12;
970;PS;Palestine;970 XXX XX XXXX;12;
968;OM;Oman;968 XXXX XXXX;11;
967;YE;Yemen;967 XXX XXX XXX;12;
966;SA;Saudi Arabia;
965;KW;Kuwait;965 XXXX XXXX;11;
964;IQ;Iraq;964 XXX XXX XXXX;13;
963;SY;Syria
962;JO;Jordan;962 X XXXX XXXX;12;
961;LB;Lebanon
960;MV;Maldives
886;TW;Taiwan
880;BD;Bangladesh
856;LA;Laos
855;KH;Cambodia
853;MO;Macau
852;HK;Hong Kong
850;KP;North Korea
692;MH;Marshall Islands
691;FM;Micronesia
690;TK;Tokelau
689;PF;French Polynesia
688;TV;Tuvalu
687;NC;New Caledonia
686;KI;Kiribati
685;WS;Samoa
683;NU;Niue
682;CK;Cook Islands
681;WF;Wallis & Futuna
680;PW;Palau
679;FJ;Fiji
678;VU;Vanuatu
677;SB;Solomon Islands
676;TO;Tonga
675;PG;Papua New Guinea
674;NR;Nauru
673;BN;Brunei Darussalam;673 XXX XXXX;10;
672;NF;Norfolk Island
670;TL;Timor-Leste
599;BQ;Bonaire, Sint Eustatius & Saba
599;CW;Curaçao
598;UY;Uruguay;598 XXXX XXXX;11;
597;SR;Suriname;597 XXX XXXX;10;
596;MQ;Martinique
595;PY;Paraguay;595 XXX XXX XXX;12;
594;GF;French Guiana
593;EC;Ecuador
592;GY;Guyana
591;BO;Bolivia;591 X XXX XXXX;11;
590;GP;Guadeloupe
509;HT;Haiti
508;PM;Saint Pierre & Miquelon
507;PA;Panama;507 XXXX XXXX;11;
506;CR;Costa Rica
505;NI;Nicaragua;505 XXXX XXXX;11;
504;HN;Honduras;504 XXXX XXXX;11;
503;SV;El Salvador;503 XXXX XXXX;11;
502;GT;Guatemala;502 X XXX XXXX;11;
501;BZ;Belize
500;FK;Falkland Islands
423;LI;Liechtenstein
421;SK;Slovakia
420;CZ;Czech Republic
389;MK;Macedonia
387;BA;Bosnia & Herzegovina
386;SI;Slovenia
385;HR;Croatia
382;ME;Montenegro
381;RS;Serbia;381 XX XXX XXXX;12;
380;UA;Ukraine;380 XX XXX XX XX;12;
378;SM;San Marino;378 XXX XXX XXXX;13;
377;MC;Monaco;377 XXXX XXXX;11;
376;AD;Andorra;376 XX XX XX;9;
375;BY;Belarus;375 XX XXX XXXX;12;
374;AM;Armenia;374 XX XXX XXX;11;
373;MD;Moldova;373 XX XXX XXX;11;
372;EE;Estonia;
371;LV;Latvia;371 XXX XXXXX;11;
370;LT;Lithuania;370 XXX XXXXX;11;
359;BG;Bulgaria;
358;FI;Finland;
357;CY;Cyprus;357 XXXX XXXX;11;
356;MT;Malta;356 XX XX XX XX;11;
355;AL;Albania;355 XX XXX XXXX;12;
354;IS;Iceland;354 XXX XXXX;10;
353;IE;Ireland;353 XX XXX XXXX;12;
352;LU;Luxembourg
351;PT;Portugal;351 X XXXX XXXX;12;
350;GI;Gibraltar;350 XXXX XXXX;11;
299;GL;Greenland;299 XXX XXX;9;
298;FO;Faroe Islands;298 XXX XXX;9;
297;AW;Aruba;297 XXX XXXX;10;
291;ER;Eritrea;291 X XXX XXX;10;
290;SH;Saint Helena;290 XX XXX;8;
269;KM;Comoros;269 XXX XXXX;10;
268;SZ;Swaziland;268 XXXX XXXX;11;
267;BW;Botswana;267 XX XXX XXX;11;
266;LS;Lesotho;266 XX XXX XXX;11;
265;MW;Malawi
264;NA;Namibia;264 XX XXX XXXX;12;
263;ZW;Zimbabwe;263 XX XXX XXXX;12;
262;RE;Réunion;262 XXX XXX XXX;12;
261;MG;Madagascar;261 XX XX XXX XX;12;
260;ZM;Zambia;260 XX XXX XXXX;12;
258;MZ;Mozambique;258 XX XXX XXXX;12;
257;BI;Burundi;257 XX XX XXXX;11;
256;UG;Uganda;256 XX XXX XXXX;12;
255;TZ;Tanzania;255 XX XXX XXXX;12;
254;KE;Kenya;254 XXX XXX XXX;12;
253;DJ;Djibouti;253 XX XX XX XX;11;
252;SO;Somalia;252 XX XXX XXX;11;
251;ET;Ethiopia;251 XX XXX XXXX;12;
250;RW;Rwanda;250 XXX XXX XXX;12;
249;SD;Sudan;249 XX XXX XXXX;12;
248;SC;Seychelles;248 X XX XX XX;10;
247;SH;Saint Helena;247 XXXX;7;
246;IO;Diego Garcia;246 XXX XXXX;10;
245;GW;Guinea-Bissau;245 XXX XXXX;10;
244;AO;Angola;244 XXX XXX XXX;12;
243;CD;Congo (Dem. Rep.);243 XX XXX XXXX;12;
242;CG;Congo (Rep.);242 XX XXX XXXX;12;
241;GA;Gabon;241 X XX XX XX;10;
240;GQ;Equatorial Guinea;240 XXX XXX XXX;12;
239;ST;São Tomé & Príncipe;239 XX XXXXX;10;
238;CV;Cape Verde;238 XXX XXXX;10;
237;CM;Cameroon;237 XXXX XXXX;11;
236;CF;Central African Rep.;236 XX XX XX XX;11;
235;TD;Chad;235 XX XX XX XX;11;
234;NG;Nigeria
233;GH;Ghana
232;SL;Sierra Leone;232 XX XXX XXX;11;
231;LR;Liberia;
230;MU;Mauritius;
229;BJ;Benin;229 XX XXX XXX;11;
228;TG;Togo;228 XX XXX XXX;11;
227;NE;Niger;227 XX XX XX XX;11;
226;BF;Burkina Faso;226 XX XX XX XX;11;
225;CI;Côte d`Ivoire;225 XX XXX XXX;11;
224;GN;Guinea;224 XXX XXX XXX;12;
223;ML;Mali;223 XXXX XXXX;11;
222;MR;Mauritania;222 XXXX XXXX;11;
221;SN;Senegal;221 XX XXX XXXX;12;
220;GM;Gambia;220 XXX XXXX;10;
218;LY;Libya;218 XX XXX XXXX;12;
216;TN;Tunisia;216 XX XXX XXX;11;
213;DZ;Algeria;213 XXX XX XX XX;12;
212;MA;Morocco;212 XX XXX XXXX;12;
211;SS;South Sudan;211 XX XXX XXXX;12;
98;IR;Iran;98 XXX XXX XXXX;12;
95;MM;Myanmar;
94;LK;Sri Lanka;94 XX XXX XXXX;11;
93;AF;Afghanistan;93 XXX XXX XXX;11;
92;PK;Pakistan;92 XXX XXX XXXX;12;
91;IN;India;91 XXXXX XXXXX;12;
90;TR;Turkey;90 XXX XXX XXXX;12
86;CN;China;86 XXX XXXX XXXX;13;
84;VN;Vietnam;
82;KR;South Korea;
81;JP;Japan;81 XX XXXX XXXX;12;
66;TH;Thailand;66 X XXXX XXXX;11;
65;SG;Singapore;65 XXXX XXXX;10;
64;NZ;New Zealand;
63;PH;Philippines;63 XXX XXX XXXX;12;
62;ID;Indonesia;
61;AU;Australia;61 XXX XXX XXX;11;
60;MY;Malaysia;
58;VE;Venezuela;58 XXX XXX XXXX;12;
57;CO;Colombia;57 XXX XXX XXXX;12;
56;CL;Chile;56 X XXXX XXXX;11;
55;BR;Brazil;55 XX XXXXX XXXX;13;
54;AR;Argentina;
53;CU;Cuba;53 XXXX XXXX;10;
52;MX;Mexico;
51;PE;Peru;51 XXX XXX XXX;11;
49;DE;Germany;49 XXX XXXXXXXX;13;
48;PL;Poland;48 XX XXX XXXX;11;
47;NO;Norway;47 XXXX XXXX;10;
46;SE;Sweden;46 XX XXX XXXX;11;
45;DK;Denmark;45 XXXX XXXX;10;
44;GB;United Kingdom;44 XXXX XXXXXX;12;
43;AT;Austria;
41;CH;Switzerland;41 XX XXX XXXX;11;
40;RO;Romania;40 XXX XXX XXX;11;
39;IT;Italy;39 XXX XXX XXXX;12;
36;HU;Hungary;36 XX XXX XXXX;11;
34;ES;Spain;34 XXX XXX XXX;11;
33;FR;France;33 X XX XX XX XX;11;
32;BE;Belgium;32 XXX XX XX XX;11;
31;NL;Netherlands;31 X XX XX XX XX;11;
30;GR;Greece;30 XX XXXX XXXX;12;
27;ZA;South Africa;27 XX XXX XXXX;11;
20;EG;Egypt;20 XX XXX XXXX;11;
7;RU;Russian Federation;7 XXX XXX XX XX;11;
7;KZ;Kazakhstan;7 XXX XXX XX XX;11
1;US;USA;1 XXX XXX XXXX;11;
1;PR;Puerto Rico;1 XXX XXX XXXX;11;
1;DO;Dominican Rep.;1 XXX XXX XXXX;11;
1;CA;Canada;1 XXX XXX XXXX;11;

View file

@ -82,7 +82,15 @@ defaultInputField: InputField {
height: 32px; height: 32px;
} }
dialogsSearchField: InputField(defaultInputField) {
textMargins: margins(34px, 5px, 34px, 5px);
iconSprite: sprite(227px, 21px, 24px, 24px);
iconPosition: point(6px, 5px);
width: 240px;
height: 34px;
}
titleBG: #6389a8; titleBG: #6389a8;
titleColor: #0f8dcc;//rgb(20, 136, 210); titleColor: #0f8dcc;//rgb(20, 136, 210);
titleHeight: 39px; titleHeight: 39px;
@ -894,6 +902,8 @@ defaultTextStyle: textStyle {
lineHeight: 0px; lineHeight: 0px;
} }
serviceTextStyle: textStyle(defaultTextStyle) { serviceTextStyle: textStyle(defaultTextStyle) {
lnkFlags: msgServiceFont;
lnkOverFlags: font(fsize semibold underline);
lnkColor: msgServiceColor; lnkColor: msgServiceColor;
lnkDownColor: msgServiceColor; lnkDownColor: msgServiceColor;
selectBg: msgServiceSelectBg; selectBg: msgServiceSelectBg;
@ -939,6 +949,8 @@ mediaDocOutImg: sprite(6px, 146px, 48px, 48px);
mediaDocInImg: sprite(56px, 146px, 48px, 48px); mediaDocInImg: sprite(56px, 146px, 48px, 48px);
mediaAudioOutImg: sprite(106px, 146px, 48px, 48px); mediaAudioOutImg: sprite(106px, 146px, 48px, 48px);
mediaAudioInImg: sprite(156px, 146px, 48px, 48px); mediaAudioInImg: sprite(156px, 146px, 48px, 48px);
mediaMusicOutImg: sprite(322px, 345px, 48px, 48px);
mediaMusicInImg: sprite(322px, 395px, 48px, 48px);
mediaPlayOutImg: sprite(122px, 341px, 48px, 48px); mediaPlayOutImg: sprite(122px, 341px, 48px, 48px);
mediaPlayInImg: sprite(172px, 341px, 48px, 48px); mediaPlayInImg: sprite(172px, 341px, 48px, 48px);
mediaPauseOutImg: sprite(222px, 341px, 48px, 48px); mediaPauseOutImg: sprite(222px, 341px, 48px, 48px);
@ -987,13 +999,18 @@ btnSend: flatButton(btnDefFlat) {
width: -32px; width: -32px;
height: 46px; height: 46px;
textTop: 13px; textTop: 12px;
overTextTop: 13px; overTextTop: 12px;
downTextTop: 14px; downTextTop: 13px;
font: font(16px); font: font(16px);
overFont: font(16px); overFont: font(16px);
} }
btnUnblock: flatButton(btnSend) {
color: #d15948;
overColor: #d15948;
downColor: #db6352;
}
btnAttachDocument: iconedButton(btnDefIconed) { btnAttachDocument: iconedButton(btnDefIconed) {
icon: sprite(218px, 68px, 24px, 24px); icon: sprite(218px, 68px, 24px, 24px);
@ -1011,26 +1028,32 @@ btnAttachPhoto: iconedButton(btnAttachDocument) {
} }
btnAttachEmoji: iconedButton(btnAttachDocument) { btnAttachEmoji: iconedButton(btnAttachDocument) {
overBgColor: white; overBgColor: white;
icon: sprite(363px, 344px, 21px, 22px); icon: sprite(374px, 344px, 21px, 22px);
iconPos: point(6px, 12px); iconPos: point(6px, 12px);
downIcon: sprite(363px, 344px, 21px, 22px); downIcon: sprite(374px, 344px, 21px, 22px);
downIconPos: point(6px, 12px); downIconPos: point(6px, 12px);
width: 33px; width: 33px;
} }
btnBotKbShow: iconedButton(btnAttachEmoji) { btnBotKbShow: iconedButton(btnAttachEmoji) {
icon: sprite(375px, 74px, 21px, 16px); icon: sprite(375px, 74px, 21px, 21px);
iconPos: point(6px, 16px); iconPos: point(6px, 12px);
downIcon: sprite(375px, 74px, 21px, 16px); downIcon: sprite(375px, 74px, 21px, 21px);
downIconPos: point(6px, 16px); downIconPos: point(6px, 12px);
}
btnBotCmdStart: iconedButton(btnAttachEmoji) {
icon: sprite(354px, 74px, 21px, 21px);
iconPos: point(6px, 12px);
downIcon: sprite(354px, 74px, 21px, 21px);
downIconPos: point(6px, 12px);
} }
btnBotKbHide: iconedButton(btnAttachEmoji) { btnBotKbHide: iconedButton(btnAttachEmoji) {
icon: sprite(352px, 74px, 23px, 14px); icon: sprite(373px, 95px, 23px, 14px);
iconPos: point(5px, 17px); iconPos: point(5px, 17px);
downIcon: sprite(352px, 74px, 23px, 14px); downIcon: sprite(373px, 95px, 23px, 14px);
downIconPos: point(5px, 17px); downIconPos: point(5px, 17px);
} }
btnRecordAudio: sprite(363px, 366px, 16px, 24px); btnRecordAudio: sprite(379px, 390px, 16px, 24px);
btnRecordAudioActive: sprite(379px, 366px, 16px, 24px); btnRecordAudioActive: sprite(379px, 366px, 16px, 24px);
recordSignalColor: #f17077; recordSignalColor: #f17077;
recordSignalMin: 5px; recordSignalMin: 5px;
@ -1166,7 +1189,7 @@ notifyTextTop: 7px;
notifySlowHideFunc: transition(easeInCirc); notifySlowHideFunc: transition(easeInCirc);
notifyWaitShortHide: 0; notifyWaitShortHide: 0;
notifyWaitLongHide: 20000; notifyWaitLongHide: 20000;
notifyFastAnim: 100; notifyFastAnim: 150;
notifyFastAnimFunc: transition(linear); notifyFastAnimFunc: transition(linear);
notifyWidth: 316px; notifyWidth: 316px;
notifyHeight: 80px; notifyHeight: 80px;
@ -1553,30 +1576,22 @@ stickersScroll: flatScroll(newScroll) {
emojiScroll: flatScroll(newScroll) { emojiScroll: flatScroll(newScroll) {
deltat: 48px; deltat: 48px;
} }
emojiRecent: sprite(0px, 196px, 21px, 22px); emojiRecentOver: sprite(0px, 196px, 21px, 22px);
emojiRecentOver: sprite(287px, 220px, 21px, 22px); emojiRecentActive: sprite(245px, 264px, 21px, 22px);
emojiRecentActive: sprite(287px, 242px, 21px, 22px); emojiPeopleOver: sprite(21px, 196px, 21px, 22px);
emojiPeople: sprite(21px, 196px, 21px, 22px); emojiPeopleActive: sprite(266px, 264px, 21px, 22px);
emojiPeopleOver: sprite(308px, 220px, 21px, 22px); emojiNatureOver: sprite(42px, 196px, 21px, 22px);
emojiPeopleActive: sprite(308px, 242px, 21px, 22px);
emojiNature: sprite(42px, 196px, 21px, 22px);
emojiNatureOver: sprite(245px, 264px, 21px, 22px);
emojiNatureActive: sprite(245px, 286px, 21px, 22px); emojiNatureActive: sprite(245px, 286px, 21px, 22px);
emojiFood: sprite(63px, 196px, 21px, 22px); emojiFoodOver: sprite(63px, 196px, 21px, 22px);
emojiFoodOver: sprite(266px, 264px, 21px, 22px);
emojiFoodActive: sprite(266px, 286px, 21px, 22px); emojiFoodActive: sprite(266px, 286px, 21px, 22px);
emojiCelebration: sprite(84px, 196px, 21px, 22px); emojiCelebrationOver: sprite(84px, 196px, 21px, 22px);
emojiCelebrationOver: sprite(287px, 264px, 21px, 22px);
emojiCelebrationActive: sprite(287px, 286px, 21px, 22px); emojiCelebrationActive: sprite(287px, 286px, 21px, 22px);
emojiActivity: sprite(126px, 196px, 21px, 22px); emojiActivityOver: sprite(126px, 196px, 21px, 22px);
emojiActivityOver: sprite(321px, 344px, 21px, 22px); emojiActivityActive: sprite(287px, 264px, 21px, 22px);
emojiActivityActive: sprite(321px, 366px, 21px, 22px); emojiTravelOver: sprite(105px, 196px, 21px, 22px);
emojiTravel: sprite(105px, 196px, 21px, 22px);
emojiTravelOver: sprite(308px, 264px, 21px, 22px);
emojiTravelActive: sprite(308px, 286px, 21px, 22px); emojiTravelActive: sprite(308px, 286px, 21px, 22px);
emojiObjects: sprite(147px, 196px, 21px, 22px); emojiObjectsOver: sprite(147px, 196px, 21px, 22px);
emojiObjectsOver: sprite(342px, 344px, 21px, 22px); emojiObjectsActive: sprite(308px, 264px, 21px, 22px);
emojiObjectsActive: sprite(342px, 366px, 21px, 22px);
emojiPanCategories: #f7f7f7; emojiPanCategories: #f7f7f7;
@ -1585,7 +1600,7 @@ rbEmoji: flatCheckbox {
bgColor: emojiPanCategories; bgColor: emojiPanCategories;
disColor: emojiPanCategories; disColor: emojiPanCategories;
width: 36px; width: 42px;
height: 46px; height: 46px;
textTop: 0px; textTop: 0px;
@ -1596,82 +1611,83 @@ rbEmoji: flatCheckbox {
cursor: cursor(pointer); cursor: cursor(pointer);
disabledCursor: cursor(default); disabledCursor: cursor(default);
imagePos: point(8px, 12px); imagePos: point(11px, 12px);
} }
rbEmojiRecent: flatCheckbox(rbEmoji) { rbEmojiRecent: flatCheckbox(rbEmoji) {
imageRect: emojiRecent; imageRect: emojiRecentOver;
chkImageRect: emojiRecentActive; chkImageRect: emojiRecentActive;
overImageRect: emojiRecentOver; overImageRect: emojiRecentOver;
chkOverImageRect: emojiRecentActive; chkOverImageRect: emojiRecentActive;
disImageRect: emojiRecent; disImageRect: emojiRecentOver;
chkDisImageRect: emojiRecentActive; chkDisImageRect: emojiRecentActive;
} }
rbEmojiPeople: flatCheckbox(rbEmoji) { rbEmojiPeople: flatCheckbox(rbEmoji) {
imageRect: emojiPeople; imageRect: emojiPeopleOver;
chkImageRect: emojiPeopleActive; chkImageRect: emojiPeopleActive;
overImageRect: emojiPeopleOver; overImageRect: emojiPeopleOver;
chkOverImageRect: emojiPeopleActive; chkOverImageRect: emojiPeopleActive;
disImageRect: emojiPeople; disImageRect: emojiPeopleOver;
chkDisImageRect: emojiPeopleActive; chkDisImageRect: emojiPeopleActive;
} }
rbEmojiNature: flatCheckbox(rbEmoji) { rbEmojiNature: flatCheckbox(rbEmoji) {
imageRect: emojiNature; imageRect: emojiNatureOver;
chkImageRect: emojiNatureActive; chkImageRect: emojiNatureActive;
overImageRect: emojiNatureOver; overImageRect: emojiNatureOver;
chkOverImageRect: emojiNatureActive; chkOverImageRect: emojiNatureActive;
disImageRect: emojiNature; disImageRect: emojiNatureOver;
chkDisImageRect: emojiNatureActive; chkDisImageRect: emojiNatureActive;
} }
rbEmojiFood: flatCheckbox(rbEmoji) { rbEmojiFood: flatCheckbox(rbEmoji) {
imageRect: emojiFood; imageRect: emojiFoodOver;
chkImageRect: emojiFoodActive; chkImageRect: emojiFoodActive;
overImageRect: emojiFoodOver; overImageRect: emojiFoodOver;
chkOverImageRect: emojiFoodActive; chkOverImageRect: emojiFoodActive;
disImageRect: emojiFood; disImageRect: emojiFoodOver;
chkDisImageRect: emojiFoodActive; chkDisImageRect: emojiFoodActive;
} }
rbEmojiCelebration: flatCheckbox(rbEmoji) { rbEmojiCelebration: flatCheckbox(rbEmoji) {
imageRect: emojiCelebration; imageRect: emojiCelebrationOver;
chkImageRect: emojiCelebrationActive; chkImageRect: emojiCelebrationActive;
overImageRect: emojiCelebrationOver; overImageRect: emojiCelebrationOver;
chkOverImageRect: emojiCelebrationActive; chkOverImageRect: emojiCelebrationActive;
disImageRect: emojiCelebration; disImageRect: emojiCelebrationOver;
chkDisImageRect: emojiCelebrationActive; chkDisImageRect: emojiCelebrationActive;
} }
rbEmojiActivity: flatCheckbox(rbEmoji) { rbEmojiActivity: flatCheckbox(rbEmoji) {
imageRect: emojiActivity; imageRect: emojiActivityOver;
chkImageRect: emojiActivityActive; chkImageRect: emojiActivityActive;
overImageRect: emojiActivityOver; overImageRect: emojiActivityOver;
chkOverImageRect: emojiActivityActive; chkOverImageRect: emojiActivityActive;
disImageRect: emojiActivity; disImageRect: emojiActivityOver;
chkDisImageRect: emojiActivityActive; chkDisImageRect: emojiActivityActive;
} }
rbEmojiTravel: flatCheckbox(rbEmoji) { rbEmojiTravel: flatCheckbox(rbEmoji) {
imageRect: emojiTravel; imageRect: emojiTravelOver;
chkImageRect: emojiTravelActive; chkImageRect: emojiTravelActive;
overImageRect: emojiTravelOver; overImageRect: emojiTravelOver;
chkOverImageRect: emojiTravelActive; chkOverImageRect: emojiTravelActive;
disImageRect: emojiTravel; disImageRect: emojiTravelOver;
chkDisImageRect: emojiTravelActive; chkDisImageRect: emojiTravelActive;
} }
rbEmojiObjects: flatCheckbox(rbEmoji) { rbEmojiObjects: flatCheckbox(rbEmoji) {
imageRect: emojiObjects; imageRect: emojiObjectsOver;
chkImageRect: emojiObjectsActive; chkImageRect: emojiObjectsActive;
overImageRect: emojiObjectsOver; overImageRect: emojiObjectsOver;
chkOverImageRect: emojiObjectsActive; chkOverImageRect: emojiObjectsActive;
disImageRect: emojiObjects; disImageRect: emojiObjectsOver;
chkDisImageRect: emojiObjectsActive; chkDisImageRect: emojiObjectsActive;
} }
emojiPanPadding: 10px; emojiPanPadding: 12px;
emojiPanSize: size(39px, 35px); emojiPanSize: size(45px, 41px);
emojiPanFullSize: size(300px, 321px); emojiPanWidth: 345px;
emojiPanMaxHeight: 366px;
emojiPanDuration: 200; emojiPanDuration: 200;
emojiPanHover: #f0f4f7; emojiPanHover: #f0f4f7;
emojiPanHeader: 42px; emojiPanHeader: 42px;
emojiPanHeaderFont: font(fsize semibold); emojiPanHeaderFont: font(fsize semibold);
emojiPanHeaderColor: #999; emojiPanHeaderColor: #999;
emojiPanHeaderLeft: 17px; emojiPanHeaderLeft: 22px;
emojiPanHeaderTop: 12px; emojiPanHeaderTop: 12px;
emojiPanHeaderBg: #fffffff2; emojiPanHeaderBg: #fffffff2;
@ -1685,7 +1701,7 @@ emojiSwitchStickers: sprite(318px, 328px, 8px, 12px);
emojiSwitchEmoji: sprite(310px, 328px, 8px, 12px); emojiSwitchEmoji: sprite(310px, 328px, 8px, 12px);
emojiSwitchColor: #42a8db; emojiSwitchColor: #42a8db;
stickerPanSize: size(55px, 55px); stickerPanSize: size(64px, 64px);
stickerPanPadding: 11px; stickerPanPadding: 11px;
stickerPanDelete: sprite(123px, 132px, 12px, 12px); stickerPanDelete: sprite(123px, 132px, 12px, 12px);
stickerPanDeleteOpacity: 0.5; stickerPanDeleteOpacity: 0.5;
@ -1744,11 +1760,11 @@ mvControlMargin: 0px;
mvControlSize: 90px; mvControlSize: 90px;
mvIconSize: size(60px, 56px); mvIconSize: size(60px, 56px);
mvLeft: sprite(320px, 400px, 12px, 22px); mvLeft: sprite(320px, 445px, 12px, 22px);
mvRight: sprite(332px, 400px, 12px, 22px); mvRight: sprite(332px, 445px, 12px, 22px);
mvClose: sprite(344px, 400px, 18px, 18px); mvClose: sprite(344px, 445px, 18px, 18px);
mvSave: sprite(362px, 400px, 14px, 19px); mvSave: sprite(362px, 445px, 14px, 19px);
mvMore: sprite(376px, 400px, 5px, 21px); mvMore: sprite(376px, 445px, 5px, 21px);
mvDropdown: dropdown(dropdownDef) { mvDropdown: dropdown(dropdownDef) {
shadow: sprite(0px, 0px, 0px, 0px); shadow: sprite(0px, 0px, 0px, 0px);
@ -1957,8 +1973,6 @@ mentionFg: #777;
mentionFgOver: #707070; mentionFgOver: #707070;
mentionFgActive: #0080c0; mentionFgActive: #0080c0;
mentionFgOverActive: #0077b3; mentionFgOverActive: #0077b3;
botCommandFont: font(fsize semibold);
botDescFont: font(fsize italic);
sessionsHeight: 440px; sessionsHeight: 440px;
sessionHeight: 70px; sessionHeight: 70px;
@ -1989,3 +2003,36 @@ webPagePhotoSize: 100px;
webPagePhotoDelta: 8px; webPagePhotoDelta: 8px;
botDescSkip: 8px; botDescSkip: 8px;
suppressAll: 0.2;
suppressSong: 0.05;
playerHeight: 44px;
playerBg: #e4e9ef;
playerFg: #54748f;
playerTimeFg: #a4afba;
playerLineHeight: 3px;
playerMoverSize: size(2px, 7px);
playerLineActive: #6389a8;
playerLineInactive: #bac7d4;
playerSkip: 8px;
playerNameStyle: textStyle(defaultTextStyle) {
lnkColor: #6389a8;
lnkDownColor: #6389a8;
lnkFlags: font(fsize semibold);
lnkOverFlags: font(fsize semibold);
}
playerPlay: sprite(377px, 109px, 19px, 22px);
playerPause: sprite(379px, 131px, 17px, 20px);
playerNext: sprite(374px, 151px, 22px, 14px);
playerPrev: sprite(374px, 165px, 22px, 14px);
playerClose: sprite(361px, 97px, 12px, 12px);
playerFull: sprite(365px, 109px, 12px, 12px);
playerRepeat: sprite(365px, 121px, 12px, 14px);
playerVolume: sprite(352px, 179px, 44px, 12px);
playerInactiveOpacity: 0.8;
playerUnavailableOpacity: 0.3;
playerDuration: 200;
playlistHoverBg: #f2f2f2;
playlistPadding: 10px;

View file

@ -18,6 +18,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
#include "genstyles.h" #include "genstyles.h"
#include <QtCore/QtPlugin> #include <QtCore/QtPlugin>
#include <QtCore/QRegularExpression>
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin) Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
@ -1345,6 +1346,12 @@ bool genStyles(const QString &classes_in, const QString &classes_out, const QStr
QCoreApplication::exit(1); QCoreApplication::exit(1);
return false; return false;
} }
QString numbers_cpp = QString(styles_cpp).replace("style_auto.cpp", "numbers.cpp");
if (numbers_cpp == styles_cpp) {
cout << "Bad output file name '" << numbers_cpp.toUtf8().constData() << "'!\n";
QCoreApplication::exit(1);
return false;
}
QFile f(styles_in); QFile f(styles_in);
if (!f.open(QIODevice::ReadOnly)) { if (!f.open(QIODevice::ReadOnly)) {
@ -1353,6 +1360,20 @@ bool genStyles(const QString &classes_in, const QString &classes_out, const QStr
return false; return false;
} }
QString numbers_in = QString(styles_in).replace("style.txt", "numbers.txt");
if (numbers_in == styles_in) {
cout << "Bad input file name '" << numbers_in.toUtf8().constData() << "'!\n";
QCoreApplication::exit(1);
return false;
}
QFile fnum(numbers_in);
if (!fnum.open(QIODevice::ReadOnly)) {
cout << "Could not open numbers input file '" << numbers_in.toUtf8().constData() << "'!\n";
QCoreApplication::exit(1);
return false;
}
QImage sprites[variantsCount]; QImage sprites[variantsCount];
int widths[variantsCount] = { 0 }; int widths[variantsCount] = { 0 };
variantSprites = sprites; variantSprites = sprites;
@ -1854,6 +1875,137 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org\n\
if (!cpp.open(QIODevice::WriteOnly)) throw Exception("Could not open style_auto.cpp for writing!"); if (!cpp.open(QIODevice::WriteOnly)) throw Exception("Could not open style_auto.cpp for writing!");
if (cpp.write(cppText) != cppText.size()) throw Exception("Could not open style_auto.cpp for writing!"); if (cpp.write(cppText) != cppText.size()) throw Exception("Could not open style_auto.cpp for writing!");
} }
QMap<QString, QVector<int> > numberRules;
QList<QByteArray> numlines = fnum.readAll().split('\n');
for (int i = 0, l = numlines.size(); i < l; ++i) {
QList<QByteArray> strs = numlines.at(i).split(';');
if (strs.isEmpty()) continue;
QString code = QString::fromLatin1(strs.at(0)).trimmed();
if (code.isEmpty() || QRegularExpression("[^0-9]").match(code).hasMatch()) {
throw Exception("Bad string in number.txt: " + numlines.at(i));
}
if (strs.size() < 5) {
numberRules.insert(code, QVector<int>());
} else {
QString lenstr = QString::fromLatin1(strs.at(4)).trimmed(), pattern = QString::fromLatin1(strs.at(3)).trimmed();
if (QRegularExpression("[^0-9]").match(lenstr).hasMatch() || !pattern.startsWith(code + ' ')) {
throw Exception("Bad string in number.txt: " + numlines.at(i));
}
QStringList lst = pattern.mid(code.size() + 1).split(' ');
int len = lenstr.toInt(), sum = code.size();
QVector<int> result;
for (int j = 0, c = lst.size(); j < c; ++j) {
if (lst.at(j).isEmpty()) continue;
if (QRegularExpression("[^X]").match(lst.at(j)).hasMatch()) {
throw Exception("Bad string in number.txt: " + numlines.at(i));
}
result.push_back(lst.at(j).size());
sum += lst.at(j).size();
}
if (sum != len) {
throw Exception("Bad length in number.txt: " + numlines.at(i));
}
numberRules.insert(code, result);
}
}
QByteArray numText;
{
QTextStream tnum(&numText);
tnum << "\
/*\n\
Created from \'/Resources/style.txt\' by \'/MetaStyle\' project\n\
\n\
WARNING! All changes made in this file will be lost!\n\
\n\
This file is part of Telegram Desktop,\n\
the official desktop version of Telegram messaging app, see https://telegram.org\n\
\n\
Telegram Desktop is free software: you can redistribute it and/or modify\n\
it under the terms of the GNU General Public License as published by\n\
the Free Software Foundation, either version 3 of the License, or\n\
(at your option) any later version.\n\
\n\
It is distributed in the hope that it will be useful,\n\
but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\
GNU General Public License for more details.\n\
\n\
Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\n\
Copyright (c) 2014 John Preston, https://desktop.telegram.org\n\
*/\n";
tnum << "#include \"stdafx.h\"\n#include \"numbers.h\"\n\n";
tnum << "QVector<int> phoneNumberParse(const QString &number) {\n";
tnum << "\tQVector<int> result;\n\n";
tnum << "\tint32 len = number.size();\n";
tnum << "\tif (len > 0) switch (number.at(0).unicode()) {\n";
QString already;
for (QMap<QString, QVector<int> >::const_iterator i = numberRules.cend(), e = numberRules.cbegin(); i != e;) {
--i;
QString k = i.key();
bool onlyLastChanged = true;
while (!already.isEmpty() && (already.size() > k.size() || !already.endsWith(k.at(already.size() - 1)))) {
if (!onlyLastChanged) {
tnum << QString("\t").repeated(1 + already.size()) << "}\n";
tnum << QString("\t").repeated(1 + already.size()) << "return result;\n";
}
already = already.mid(0, already.size() - 1);
onlyLastChanged = false;
}
if (already == k) {
tnum << QString("\t").repeated(1 + already.size()) << "}\n";
} else {
bool onlyFirstCheck = true;
while (already.size() < k.size()) {
if (!onlyFirstCheck) tnum << QString("\t").repeated(1 + already.size()) << "if (len > " << already.size() << ") switch (number.at(" << already.size() << ").unicode()) {\n";
tnum << QString("\t").repeated(1 + already.size()) << "case '" << k.at(already.size()).toLatin1() << "':\n";
already.push_back(k.at(already.size()));
onlyFirstCheck = false;
}
}
if (i.value().isEmpty()) {
tnum << QString("\t").repeated(1 + already.size()) << "return QVector<int>(1, " << k.size() << ");\n";
} else {
tnum << QString("\t").repeated(1 + already.size()) << "result.reserve(" << (i.value().size() + 1) << ");\n";
tnum << QString("\t").repeated(1 + already.size()) << "result.push_back(" << k.size() << ");\n";
for (int j = 0, l = i.value().size(); j < l; ++j) {
tnum << QString("\t").repeated(1 + already.size()) << "result.push_back(" << i.value().at(j) << ");\n";
}
tnum << QString("\t").repeated(1 + already.size()) << "return result;\n";
}
}
bool onlyLastChanged = true;
while (!already.isEmpty()) {
if (!onlyLastChanged) {
tnum << QString("\t").repeated(1 + already.size()) << "}\n";
// tnum << QString("\t").repeated(1 + already.size()) << "\return result;\n";
}
already = already.mid(0, already.size() - 1);
onlyLastChanged = false;
}
tnum << "\t}\n\n";
tnum << "\treturn result;\n";
tnum << "}\n";
}
QFile num(numbers_cpp);
bool write_num = true;
if (num.open(QIODevice::ReadOnly)) {
QByteArray wasNum = num.readAll();
if (wasNum.size() == numText.size()) {
if (!memcmp(wasNum.constData(), numText.constData(), numText.size())) {
write_num = false;
}
}
num.close();
}
if (write_num) {
cout << "Numbers compiled, writing..\n";
if (!num.open(QIODevice::WriteOnly)) throw Exception("Could not open numbers.cpp for writing!");
if (num.write(numText) != numText.size()) throw Exception("Could not open numbers.cpp for writing!");
}
} catch (exception &e) { } catch (exception &e) {
cout << e.what() << "\n"; cout << e.what() << "\n";
QCoreApplication::exit(1); QCoreApplication::exit(1);

View file

@ -23,6 +23,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
#include <QtCore/QDir> #include <QtCore/QDir>
#include <QtCore/QStringList> #include <QtCore/QStringList>
#include <QtCore/QBuffer> #include <QtCore/QBuffer>
#include <QtCore/QDataStream>
#include <zlib.h> #include <zlib.h>

View file

@ -83,91 +83,6 @@ void ApiWrap::requestReplyTo(HistoryReply *reply, MsgId to) {
if (!req.req) _replyToTimer.start(1); if (!req.req) _replyToTimer.start(1);
} }
void ApiWrap::requestFullPeer(PeerData *peer) {
if (!peer || _fullRequests.contains(peer)) return;
mtpRequestId req;
if (peer->chat) {
req = MTP::send(MTPmessages_GetFullChat(MTP_int(App::chatFromPeer(peer->id))), rpcDone(&ApiWrap::gotChatFull, peer), rpcFail(&ApiWrap::gotPeerFailed, peer));
} else {
req = MTP::send(MTPusers_GetFullUser(peer->asUser()->inputUser), rpcDone(&ApiWrap::gotUserFull, peer), rpcFail(&ApiWrap::gotPeerFailed, peer));
}
_fullRequests.insert(peer, req);
}
void ApiWrap::requestWebPageDelayed(WebPageData *page) {
if (page->pendingTill <= 0) return;
_webPagesPending.insert(page, 0);
int32 left = (page->pendingTill - unixtime()) * 1000;
if (!_webPagesTimer.isActive() || left <= _webPagesTimer.remainingTime()) {
_webPagesTimer.start((left < 0 ? 0 : left) + 1);
}
}
void ApiWrap::clearWebPageRequest(WebPageData *page) {
_webPagesPending.remove(page);
if (_webPagesPending.isEmpty() && _webPagesTimer.isActive()) _webPagesTimer.stop();
}
void ApiWrap::clearWebPageRequests() {
_webPagesPending.clear();
_webPagesTimer.stop();
}
void ApiWrap::gotChatFull(PeerData *peer, const MTPmessages_ChatFull &result) {
const MTPDmessages_chatFull &d(result.c_messages_chatFull());
const MTPDchatFull &f(d.vfull_chat.c_chatFull());
App::feedUsers(d.vusers);
App::feedChats(d.vchats);
App::feedParticipants(f.vparticipants);
const QVector<MTPBotInfo> &v(f.vbot_info.c_vector().v);
for (QVector<MTPBotInfo>::const_iterator i = v.cbegin(), e = v.cend(); i < e; ++i) {
switch (i->type()) {
case mtpc_botInfo: {
const MTPDbotInfo &b(i->c_botInfo());
UserData *user = App::userLoaded(b.vuser_id.v);
if (user) {
user->setBotInfo(*i);
emit fullPeerUpdated(user);
}
} break;
}
}
PhotoData *photo = App::feedPhoto(f.vchat_photo);
ChatData *chat = peer->asChat();
if (chat) {
if (photo) {
chat->photoId = photo->id;
photo->chat = chat;
}
chat->invitationUrl = (f.vexported_invite.type() == mtpc_chatInviteExported) ? qs(f.vexported_invite.c_chatInviteExported().vlink) : QString();
}
App::main()->gotNotifySetting(MTP_inputNotifyPeer(peer->input), f.vnotify_settings);
_fullRequests.remove(peer);
emit fullPeerUpdated(peer);
}
void ApiWrap::gotUserFull(PeerData *peer, const MTPUserFull &result) {
const MTPDuserFull &d(result.c_userFull());
App::feedUsers(MTP_vector<MTPUser>(1, d.vuser));
App::feedPhoto(d.vprofile_photo);
App::feedUserLink(MTP_int(App::userFromPeer(peer->id)), d.vlink.c_contacts_link().vmy_link, d.vlink.c_contacts_link().vforeign_link);
App::main()->gotNotifySetting(MTP_inputNotifyPeer(peer->input), d.vnotify_settings);
peer->asUser()->setBotInfo(d.vbot_info);
_fullRequests.remove(peer);
emit fullPeerUpdated(peer);
}
bool ApiWrap::gotPeerFailed(PeerData *peer, const RPCError &error) {
if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false;
_fullRequests.remove(peer);
return true;
}
void ApiWrap::resolveReplyTo() { void ApiWrap::resolveReplyTo() {
if (_replyToRequests.isEmpty()) return; if (_replyToRequests.isEmpty()) return;
@ -186,34 +101,6 @@ void ApiWrap::resolveReplyTo() {
} }
} }
void ApiWrap::resolveWebPages() {
QVector<MTPint> ids;
const WebPageItems &items(App::webPageItems());
ids.reserve(_webPagesPending.size());
int32 t = unixtime(), m = INT_MAX;
for (WebPagesPending::const_iterator i = _webPagesPending.cbegin(), e = _webPagesPending.cend(); i != e; ++i) {
if (i.value()) continue;
if (i.key()->pendingTill <= t) {
WebPageItems::const_iterator j = items.constFind(i.key());
if (j != items.cend() && !j.value().isEmpty()) {
ids.push_back(MTP_int(j.value().begin().key()->id));
}
} else {
m = qMin(m, i.key()->pendingTill - t);
}
}
if (!ids.isEmpty()) {
mtpRequestId req = MTP::send(MTPmessages_GetMessages(MTP_vector<MTPint>(ids)), rpcDone(&ApiWrap::gotWebPages));
for (WebPagesPending::iterator i = _webPagesPending.begin(); i != _webPagesPending.cend(); ++i) {
if (i.value()) continue;
if (i.key()->pendingTill <= t) {
i.value() = req;
}
}
}
if (m < INT_MAX) _webPagesTimer.start(m * 1000);
}
void ApiWrap::gotReplyTo(const MTPmessages_Messages &msgs, mtpRequestId req) { void ApiWrap::gotReplyTo(const MTPmessages_Messages &msgs, mtpRequestId req) {
switch (msgs.type()) { switch (msgs.type()) {
case mtpc_messages_messages: case mtpc_messages_messages:
@ -244,6 +131,324 @@ void ApiWrap::gotReplyTo(const MTPmessages_Messages &msgs, mtpRequestId req) {
} }
} }
void ApiWrap::requestFullPeer(PeerData *peer) {
if (!peer || _fullPeerRequests.contains(peer)) return;
mtpRequestId req;
if (peer->chat) {
req = MTP::send(MTPmessages_GetFullChat(MTP_int(App::chatFromPeer(peer->id))), rpcDone(&ApiWrap::gotChatFull, peer), rpcFail(&ApiWrap::gotPeerFullFailed, peer));
} else {
req = MTP::send(MTPusers_GetFullUser(peer->asUser()->inputUser), rpcDone(&ApiWrap::gotUserFull, peer), rpcFail(&ApiWrap::gotPeerFullFailed, peer));
}
_fullPeerRequests.insert(peer, req);
}
void ApiWrap::gotChatFull(PeerData *peer, const MTPmessages_ChatFull &result) {
const MTPDmessages_chatFull &d(result.c_messages_chatFull());
const MTPDchatFull &f(d.vfull_chat.c_chatFull());
const QVector<MTPChat> &vc(d.vchats.c_vector().v);
bool badVersion = (!vc.isEmpty() && vc.at(0).type() == mtpc_chat && vc.at(0).c_chat().vversion.v < peer->asChat()->version);
App::feedUsers(d.vusers, false);
App::feedChats(d.vchats, false);
App::feedParticipants(f.vparticipants, false, false);
const QVector<MTPBotInfo> &v(f.vbot_info.c_vector().v);
for (QVector<MTPBotInfo>::const_iterator i = v.cbegin(), e = v.cend(); i < e; ++i) {
switch (i->type()) {
case mtpc_botInfo: {
const MTPDbotInfo &b(i->c_botInfo());
UserData *user = App::userLoaded(b.vuser_id.v);
if (user) {
user->setBotInfo(*i);
App::clearPeerUpdated(user);
emit fullPeerUpdated(user);
}
} break;
}
}
PhotoData *photo = App::feedPhoto(f.vchat_photo);
ChatData *chat = peer->asChat();
if (chat) {
if (photo) {
chat->photoId = photo->id;
photo->chat = chat;
} else {
chat->photoId = 0;
}
chat->invitationUrl = (f.vexported_invite.type() == mtpc_chatInviteExported) ? qs(f.vexported_invite.c_chatInviteExported().vlink) : QString();
}
App::main()->gotNotifySetting(MTP_inputNotifyPeer(peer->input), f.vnotify_settings);
_fullPeerRequests.remove(peer);
if (badVersion) {
peer->asChat()->version = vc.at(0).c_chat().vversion.v;
requestPeer(peer);
}
App::clearPeerUpdated(peer);
emit fullPeerUpdated(peer);
App::emitPeerUpdated();
}
void ApiWrap::gotUserFull(PeerData *peer, const MTPUserFull &result) {
const MTPDuserFull &d(result.c_userFull());
App::feedUsers(MTP_vector<MTPUser>(1, d.vuser), false);
App::feedPhoto(d.vprofile_photo);
App::feedUserLink(MTP_int(App::userFromPeer(peer->id)), d.vlink.c_contacts_link().vmy_link, d.vlink.c_contacts_link().vforeign_link, false);
App::main()->gotNotifySetting(MTP_inputNotifyPeer(peer->input), d.vnotify_settings);
peer->asUser()->setBotInfo(d.vbot_info);
peer->asUser()->blocked = d.vblocked.v ? UserIsBlocked : UserIsNotBlocked;
_fullPeerRequests.remove(peer);
App::clearPeerUpdated(peer);
emit fullPeerUpdated(peer);
App::emitPeerUpdated();
}
bool ApiWrap::gotPeerFullFailed(PeerData *peer, const RPCError &error) {
if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false;
_fullPeerRequests.remove(peer);
return true;
}
void ApiWrap::requestPeer(PeerData *peer) {
if (!peer || _fullPeerRequests.contains(peer) || _peerRequests.contains(peer)) return;
mtpRequestId req;
if (peer->chat) {
req = MTP::send(MTPmessages_GetChats(MTP_vector<MTPint>(1, MTP_int(App::chatFromPeer(peer->id)))), rpcDone(&ApiWrap::gotChat, peer), rpcFail(&ApiWrap::gotPeerFailed, peer));
} else {
req = MTP::send(MTPusers_GetUsers(MTP_vector<MTPInputUser>(1, peer->asUser()->inputUser)), rpcDone(&ApiWrap::gotUser, peer), rpcFail(&ApiWrap::gotPeerFailed, peer));
}
_peerRequests.insert(peer, req);
}
void ApiWrap::requestPeers(const QList<PeerData*> &peers) {
QVector<MTPint> chats;
QVector<MTPInputUser> users;
chats.reserve(peers.size());
users.reserve(peers.size());
for (QList<PeerData*>::const_iterator i = peers.cbegin(), e = peers.cend(); i != e; ++i) {
if (!*i || _fullPeerRequests.contains(*i) || _peerRequests.contains(*i)) continue;
if ((*i)->chat) {
chats.push_back(MTP_int(App::chatFromPeer((*i)->id)));
} else {
users.push_back((*i)->asUser()->inputUser);
}
}
if (!chats.isEmpty()) MTP::send(MTPmessages_GetChats(MTP_vector<MTPint>(chats)), rpcDone(&ApiWrap::gotChats));
if (!users.isEmpty()) MTP::send(MTPusers_GetUsers(MTP_vector<MTPInputUser>(users)), rpcDone(&ApiWrap::gotUsers));
}
void ApiWrap::gotChat(PeerData *peer, const MTPmessages_Chats &result) {
_peerRequests.remove(peer);
if (result.type() == mtpc_messages_chats) {
const QVector<MTPChat> &v(result.c_messages_chats().vchats.c_vector().v);
bool badVersion = (!v.isEmpty() && v.at(0).type() == mtpc_chat && v.at(0).c_chat().vversion.v < peer->asChat()->version);
ChatData *chat = App::feedChats(result.c_messages_chats().vchats);
if (chat == peer) {
if (badVersion) {
peer->asChat()->version = v.at(0).c_chat().vversion.v;
requestPeer(peer);
}
}
}
}
void ApiWrap::gotUser(PeerData *peer, const MTPVector<MTPUser> &result) {
_peerRequests.remove(peer);
UserData *user = App::feedUsers(result);
if (user == peer) {
}
}
void ApiWrap::gotChats(const MTPmessages_Chats &result) {
App::feedChats(result.c_messages_chats().vchats);
}
void ApiWrap::gotUsers(const MTPVector<MTPUser> &result) {
App::feedUsers(result);
}
bool ApiWrap::gotPeerFailed(PeerData *peer, const RPCError &error) {
if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false;
_peerRequests.remove(peer);
return true;
}
void ApiWrap::scheduleStickerSetRequest(uint64 setId, uint64 access) {
if (!_stickerSetRequests.contains(setId)) {
_stickerSetRequests.insert(setId, qMakePair(access, 0));
}
}
void ApiWrap::requestStickerSets() {
for (QMap<uint64, QPair<uint64, mtpRequestId> >::iterator i = _stickerSetRequests.begin(), j = i, e = _stickerSetRequests.end(); i != e; i = j) {
if (i.value().second) continue;
++j;
int32 wait = (j == e) ? 0 : 10;
i.value().second = MTP::send(MTPmessages_GetStickerSet(MTP_inputStickerSetID(MTP_long(i.key()), MTP_long(i.value().first))), rpcDone(&ApiWrap::gotStickerSet, i.key()), rpcFail(&ApiWrap::gotStickerSetFail, i.key()), 0, wait);
}
}
void ApiWrap::gotStickerSet(uint64 setId, const MTPmessages_StickerSet &result) {
_stickerSetRequests.remove(setId);
if (result.type() != mtpc_messages_stickerSet) return;
const MTPDmessages_stickerSet &d(result.c_messages_stickerSet());
if (d.vset.type() != mtpc_stickerSet) return;
const MTPDstickerSet &s(d.vset.c_stickerSet());
StickerSets &sets(cRefStickerSets());
StickerSets::iterator it = sets.find(setId);
if (it == sets.cend()) return;
it->access = s.vaccess_hash.v;
it->hash = s.vhash.v;
it->shortName = qs(s.vshort_name);
QString title = qs(s.vtitle);
if ((it->flags & MTPDstickerSet_flag_official) && !title.compare(qstr("Great Minds"), Qt::CaseInsensitive)) {
title = lang(lng_stickers_default_set);
}
it->title = title;
it->flags = s.vflags.v;
const QVector<MTPDocument> &d_docs(d.vdocuments.c_vector().v);
StickerSets::iterator custom = sets.find(CustomStickerSetId);
QSet<DocumentData*> found;
int32 wasCount = -1;
for (int32 i = 0, l = d_docs.size(); i != l; ++i) {
DocumentData *doc = App::feedDocument(d_docs.at(i));
if (!doc || !doc->sticker()) continue;
if (wasCount < 0) wasCount = it->stickers.size();
if (it->stickers.indexOf(doc) < 0) {
it->stickers.push_back(doc);
} else {
found.insert(doc);
}
if (custom != sets.cend()) {
int32 index = custom->stickers.indexOf(doc);
if (index >= 0) {
custom->stickers.removeAt(index);
}
}
}
if (custom != sets.cend() && custom->stickers.isEmpty()) {
sets.erase(custom);
custom = sets.end();
}
bool writeRecent = false;
RecentStickerPack &recent(cGetRecentStickers());
if (wasCount < 0) { // no stickers received
for (RecentStickerPack::iterator i = recent.begin(); i != recent.cend();) {
if (it->stickers.indexOf(i->first) >= 0) {
i = recent.erase(i);
writeRecent = true;
} else {
++i;
}
}
cRefStickerSetsOrder().removeOne(setId);
sets.erase(it);
} else {
for (int32 j = 0, l = wasCount; j < l;) {
if (found.contains(it->stickers.at(j))) {
++j;
} else {
for (RecentStickerPack::iterator i = recent.begin(); i != recent.cend();) {
if (it->stickers.at(j) == i->first) {
i = recent.erase(i);
writeRecent = true;
} else {
++i;
}
}
it->stickers.removeAt(j);
--l;
}
}
if (it->stickers.isEmpty()) {
cRefStickerSetsOrder().removeOne(setId);
sets.erase(it);
}
}
if (writeRecent) {
Local::writeUserSettings();
}
Local::writeStickers();
if (App::main()) emit App::main()->stickersUpdated();
}
bool ApiWrap::gotStickerSetFail(uint64 setId, const RPCError &error) {
if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false;
_stickerSetRequests.remove(setId);
return true;
}
void ApiWrap::requestWebPageDelayed(WebPageData *page) {
if (page->pendingTill <= 0) return;
_webPagesPending.insert(page, 0);
int32 left = (page->pendingTill - unixtime()) * 1000;
if (!_webPagesTimer.isActive() || left <= _webPagesTimer.remainingTime()) {
_webPagesTimer.start((left < 0 ? 0 : left) + 1);
}
}
void ApiWrap::clearWebPageRequest(WebPageData *page) {
_webPagesPending.remove(page);
if (_webPagesPending.isEmpty() && _webPagesTimer.isActive()) _webPagesTimer.stop();
}
void ApiWrap::clearWebPageRequests() {
_webPagesPending.clear();
_webPagesTimer.stop();
}
void ApiWrap::resolveWebPages() {
QVector<MTPint> ids;
const WebPageItems &items(App::webPageItems());
ids.reserve(_webPagesPending.size());
int32 t = unixtime(), m = INT_MAX;
for (WebPagesPending::const_iterator i = _webPagesPending.cbegin(), e = _webPagesPending.cend(); i != e; ++i) {
if (i.value()) continue;
if (i.key()->pendingTill <= t) {
WebPageItems::const_iterator j = items.constFind(i.key());
if (j != items.cend() && !j.value().isEmpty()) {
ids.push_back(MTP_int(j.value().begin().key()->id));
}
} else {
m = qMin(m, i.key()->pendingTill - t);
}
}
if (!ids.isEmpty()) {
mtpRequestId req = MTP::send(MTPmessages_GetMessages(MTP_vector<MTPint>(ids)), rpcDone(&ApiWrap::gotWebPages));
for (WebPagesPending::iterator i = _webPagesPending.begin(); i != _webPagesPending.cend(); ++i) {
if (i.value()) continue;
if (i.key()->pendingTill <= t) {
i.value() = req;
}
}
}
if (m < INT_MAX) _webPagesTimer.start(m * 1000);
}
void ApiWrap::gotWebPages(const MTPmessages_Messages &msgs, mtpRequestId req) { void ApiWrap::gotWebPages(const MTPmessages_Messages &msgs, mtpRequestId req) {
const QVector<MTPMessage> *v = 0; const QVector<MTPMessage> *v = 0;
switch (msgs.type()) { switch (msgs.type()) {

View file

@ -31,11 +31,16 @@ public:
void requestReplyTo(HistoryReply *reply, MsgId to); void requestReplyTo(HistoryReply *reply, MsgId to);
void requestFullPeer(PeerData *peer); void requestFullPeer(PeerData *peer);
void requestPeer(PeerData *peer);
void requestPeers(const QList<PeerData*> &peers);
void requestWebPageDelayed(WebPageData *page); void requestWebPageDelayed(WebPageData *page);
void clearWebPageRequest(WebPageData *page); void clearWebPageRequest(WebPageData *page);
void clearWebPageRequests(); void clearWebPageRequests();
void scheduleStickerSetRequest(uint64 setId, uint64 access);
void requestStickerSets();
~ApiWrap(); ~ApiWrap();
signals: signals:
@ -62,13 +67,24 @@ private:
void gotChatFull(PeerData *peer, const MTPmessages_ChatFull &result); void gotChatFull(PeerData *peer, const MTPmessages_ChatFull &result);
void gotUserFull(PeerData *peer, const MTPUserFull &result); void gotUserFull(PeerData *peer, const MTPUserFull &result);
bool gotPeerFullFailed(PeerData *peer, const RPCError &err);
typedef QMap<PeerData*, mtpRequestId> PeerRequests;
PeerRequests _fullPeerRequests;
void gotChat(PeerData *peer, const MTPmessages_Chats &result);
void gotUser(PeerData *peer, const MTPVector<MTPUser> &result);
void gotChats(const MTPmessages_Chats &result);
void gotUsers(const MTPVector<MTPUser> &result);
bool gotPeerFailed(PeerData *peer, const RPCError &err); bool gotPeerFailed(PeerData *peer, const RPCError &err);
typedef QMap<PeerData*, mtpRequestId> FullRequests; PeerRequests _peerRequests;
FullRequests _fullRequests;
void gotWebPages(const MTPmessages_Messages &result, mtpRequestId req); void gotWebPages(const MTPmessages_Messages &result, mtpRequestId req);
typedef QMap<WebPageData*, mtpRequestId> WebPagesPending; typedef QMap<WebPageData*, mtpRequestId> WebPagesPending;
WebPagesPending _webPagesPending; WebPagesPending _webPagesPending;
SingleTimer _webPagesTimer; SingleTimer _webPagesTimer;
QMap<uint64, QPair<uint64, mtpRequestId> > _stickerSetRequests;
void gotStickerSet(uint64 setId, const MTPmessages_StickerSet &result);
bool gotStickerSetFail(uint64 setId, const RPCError &error);
}; };

View file

@ -26,6 +26,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
#include "localstorage.h" #include "localstorage.h"
#include "numbers.h"
namespace { namespace {
bool quiting = false; bool quiting = false;
@ -37,6 +39,9 @@ namespace {
typedef QMap<PeerData*, bool> MutedPeers; typedef QMap<PeerData*, bool> MutedPeers;
MutedPeers mutedPeers; MutedPeers mutedPeers;
typedef QMap<PeerData*, bool> UpdatedPeers;
UpdatedPeers updatedPeers;
typedef QHash<PhotoId, PhotoData*> PhotosData; typedef QHash<PhotoId, PhotoData*> PhotosData;
PhotosData photosData; PhotosData photosData;
@ -104,7 +109,27 @@ namespace {
namespace App { namespace App {
QString formatPhone(QString phone) { QString formatPhone(QString phone) {
return '+' + phone.replace(QRegularExpression(qsl("[^\\d]")), QString()); if (phone.isEmpty()) return QString();
QString number = phone;
for (const QChar *ch = phone.constData(), *e = ch + phone.size(); ch != e; ++ch) {
if (ch->unicode() < '0' || ch->unicode() > '9') {
number = phone.replace(QRegularExpression(qsl("[^\\d]")), QString());
}
}
QVector<int> groups = phoneNumberParse(number);
if (groups.isEmpty()) return '+' + number;
QString result;
result.reserve(number.size() + groups.size() + 1);
result.append('+');
int32 sum = 0;
for (int32 i = 0, l = groups.size(); i < l; ++i) {
result.append(number.midRef(sum, groups.at(i)));
sum += groups.at(i);
if (sum < number.size()) result.append(' ');
}
if (sum < number.size()) result.append(number.midRef(sum));
return result;
} }
Application *app() { Application *app() {
@ -264,8 +289,10 @@ namespace App {
} }
QString onlineText(UserData *user, int32 now, bool precise) { QString onlineText(UserData *user, int32 now, bool precise) {
if (isServiceUser(user->id)) { if (isNotificationsUser(user->id)) {
return lang(lng_status_service_notifications); return lang(lng_status_service_notifications);
} else if (isServiceUser(user->id)) {
return lang(lng_status_support);
} else if (user->botInfo) { } else if (user->botInfo) {
return lang(lng_status_bot); return lang(lng_status_bot);
} }
@ -312,7 +339,11 @@ namespace App {
return lng_status_lastseen_date(lt_date, dOnline.date().toString(qsl("dd.MM.yy"))); return lng_status_lastseen_date(lt_date, dOnline.date().toString(qsl("dd.MM.yy")));
} }
bool onlineColorUse(int32 online, int32 now) { bool onlineColorUse(UserData *user, int32 now) {
if (isServiceUser(user->id) || user->botInfo) {
return false;
}
int32 online = user->onlineTill;
if (online <= 0) { if (online <= 0) {
switch (online) { switch (online) {
case 0: case 0:
@ -326,7 +357,7 @@ namespace App {
return (online > now); return (online > now);
} }
UserData *feedUsers(const MTPVector<MTPUser> &users) { UserData *feedUsers(const MTPVector<MTPUser> &users, bool emitPeerUpdated) {
UserData *data = 0; UserData *data = 0;
const QVector<MTPUser> &v(users.c_vector().v); const QVector<MTPUser> &v(users.c_vector().v);
for (QVector<MTPUser>::const_iterator i = v.cbegin(), e = v.cend(); i != e; ++i) { for (QVector<MTPUser>::const_iterator i = v.cbegin(), e = v.cend(); i != e; ++i) {
@ -341,8 +372,8 @@ namespace App {
PeerId peer(peerFromUser(d.vid.v)); PeerId peer(peerFromUser(d.vid.v));
data = App::user(peer); data = App::user(peer);
data->input = MTP_inputPeerContact(d.vid); data->input = MTP_inputPeerUser(d.vid, MTP_long(0));
data->inputUser = MTP_inputUserContact(d.vid); data->inputUser = MTP_inputUser(d.vid, MTP_long(0));
data->setName(lang(lng_deleted), QString(), QString(), QString()); data->setName(lang(lng_deleted), QString(), QString(), QString());
data->setPhoto(MTP_userProfilePhotoEmpty()); data->setPhoto(MTP_userProfilePhotoEmpty());
data->access = UserNoAccess; data->access = UserNoAccess;
@ -360,12 +391,12 @@ namespace App {
if (flags & MTPDuser_flag_self) { if (flags & MTPDuser_flag_self) {
data->input = MTP_inputPeerSelf(); data->input = MTP_inputPeerSelf();
data->inputUser = MTP_inputUserSelf(); data->inputUser = MTP_inputUserSelf();
} else if ((flags & (MTPDuser_flag_contact | MTPDuser_flag_mutual_contact)) || !d.has_access_hash()) { } else if (!d.has_access_hash()) {
data->input = MTP_inputPeerContact(d.vid); data->input = MTP_inputPeerUser(d.vid, MTP_long((data->access == UserNoAccess) ? 0 : data->access));
data->inputUser = MTP_inputUserContact(d.vid); data->inputUser = MTP_inputUser(d.vid, MTP_long((data->access == UserNoAccess) ? 0 : data->access));
} else { } else {
data->input = MTP_inputPeerForeign(d.vid, d.vaccess_hash); data->input = MTP_inputPeerUser(d.vid, d.vaccess_hash);
data->inputUser = MTP_inputUserForeign(d.vid, d.vaccess_hash); data->inputUser = MTP_inputUser(d.vid, d.vaccess_hash);
} }
if (flags & MTPDuser_flag_deleted) { if (flags & MTPDuser_flag_deleted) {
data->setPhone(QString()); data->setPhone(QString());
@ -374,13 +405,24 @@ namespace App {
data->access = UserNoAccess; data->access = UserNoAccess;
status = &emptyStatus; status = &emptyStatus;
} else { } else {
data->setPhone(d.has_phone() ? qs(d.vphone) : QString()); QString phone = d.has_phone() ? qs(d.vphone) : QString();
QString fname = d.has_first_name() ? textOneLine(qs(d.vfirst_name)) : QString(); QString fname = d.has_first_name() ? textOneLine(qs(d.vfirst_name)) : QString();
QString lname = d.has_last_name() ? textOneLine(qs(d.vlast_name)) : QString(); QString lname = d.has_last_name() ? textOneLine(qs(d.vlast_name)) : QString();
QString uname = d.has_username() ? textOneLine(qs(d.vusername)) : QString(); QString uname = d.has_username() ? textOneLine(qs(d.vusername)) : QString();
bool phoneChanged = (data->phone != phone);
if (phoneChanged) data->setPhone(phone);
bool nameChanged = (data->firstName != fname) || (data->lastName != lname);
bool showPhone = !isServiceUser(data->id) && !(flags & (MTPDuser_flag_self | MTPDuser_flag_contact | MTPDuser_flag_mutual_contact)); bool showPhone = !isServiceUser(data->id) && !(flags & (MTPDuser_flag_self | MTPDuser_flag_contact | MTPDuser_flag_mutual_contact));
QString pname = (showPhone && !data->phone.isEmpty()) ? formatPhone(data->phone) : QString(); bool showPhoneChanged = !isServiceUser(data->id) && !(flags & (MTPDuser_flag_self)) && ((showPhone && data->contact) || (!showPhone && !data->contact));
data->setName(fname, lname, QString(), uname);
// see also Local::readPeer
QString pname = (showPhoneChanged || phoneChanged || nameChanged) ? ((showPhone && !phone.isEmpty()) ? formatPhone(phone) : QString()) : data->nameOrPhone;
data->setName(fname, lname, pname, uname);
if (d.has_photo()) { if (d.has_photo()) {
data->setPhoto(d.vphoto); data->setPhoto(d.vphoto);
} else { } else {
@ -424,19 +466,25 @@ namespace App {
if (data->contact < 0 && !data->phone.isEmpty() && int32(data->id & 0xFFFFFFFF) != MTP::authedId()) { if (data->contact < 0 && !data->phone.isEmpty() && int32(data->id & 0xFFFFFFFF) != MTP::authedId()) {
data->contact = 0; data->contact = 0;
} }
if (App::main()) {
if (data->contact > 0 && !wasContact) { if (data->contact > 0 && !wasContact) {
App::main()->addNewContact(data->id & 0xFFFFFFFF, false); App::main()->addNewContact(data->id & 0xFFFFFFFF, false);
} else if (wasContact && data->contact <= 0) { } else if (wasContact && data->contact <= 0) {
App::main()->removeContact(data); App::main()->removeContact(data);
} }
if (App::main()) App::main()->peerUpdated(data); if (emitPeerUpdated) {
App::main()->peerUpdated(data);
} else {
markPeerUpdated(data);
}
}
} }
return data; return data;
} }
ChatData *feedChats(const MTPVector<MTPChat> &chats) { ChatData *feedChats(const MTPVector<MTPChat> &chats, bool emitPeerUpdated) {
ChatData *data = 0; ChatData *data = 0;
const QVector<MTPChat> &v(chats.c_vector().v); const QVector<MTPChat> &v(chats.c_vector().v);
for (QVector<MTPChat>::const_iterator i = v.cbegin(), e = v.cend(); i != e; ++i) { for (QVector<MTPChat>::const_iterator i = v.cbegin(), e = v.cend(); i != e; ++i) {
@ -456,7 +504,6 @@ namespace App {
data->count = d.vparticipants_count.v; data->count = d.vparticipants_count.v;
data->left = d.vleft.v; data->left = d.vleft.v;
data->forbidden = false; data->forbidden = false;
data->access = 0;
if (data->version < d.vversion.v) { if (data->version < d.vversion.v) {
data->version = d.vversion.v; data->version = d.vversion.v;
data->participants = ChatData::Participants(); data->participants = ChatData::Participants();
@ -475,7 +522,6 @@ namespace App {
data->count = -1; data->count = -1;
data->left = false; data->left = false;
data->forbidden = true; data->forbidden = true;
data->access = 0;
} break; } break;
case mtpc_geoChat: { case mtpc_geoChat: {
const MTPDgeoChat &d(chat.c_geoChat()); const MTPDgeoChat &d(chat.c_geoChat());
@ -503,24 +549,31 @@ namespace App {
data->loaded = true; data->loaded = true;
data->updateName(title.trimmed(), QString(), QString()); data->updateName(title.trimmed(), QString(), QString());
if (App::main()) App::main()->peerUpdated(data); if (App::main()) {
if (emitPeerUpdated) {
App::main()->peerUpdated(data);
} else {
markPeerUpdated(data);
}
}
} }
return data; return data;
} }
void feedParticipants(const MTPChatParticipants &p, bool requestBotInfos) { void feedParticipants(const MTPChatParticipants &p, bool requestBotInfos, bool emitPeerUpdated) {
ChatData *chat = 0;
switch (p.type()) { switch (p.type()) {
case mtpc_chatParticipantsForbidden: { case mtpc_chatParticipantsForbidden: {
const MTPDchatParticipantsForbidden &d(p.c_chatParticipantsForbidden()); const MTPDchatParticipantsForbidden &d(p.c_chatParticipantsForbidden());
ChatData *chat = App::chat(d.vchat_id.v); chat = App::chat(d.vchat_id.v);
chat->count = -1; chat->count = -1;
if (App::main()) App::main()->peerUpdated(chat);
} break; } break;
case mtpc_chatParticipants: { case mtpc_chatParticipants: {
const MTPDchatParticipants &d(p.c_chatParticipants()); const MTPDchatParticipants &d(p.c_chatParticipants());
ChatData *chat = App::chat(d.vchat_id.v); chat = App::chat(d.vchat_id.v);
chat->admin = d.vadmin_id.v; chat->admin = d.vadmin_id.v;
if (chat->version <= d.vversion.v) { if (!requestBotInfos || chat->version <= d.vversion.v) { // !requestBotInfos is true on getFullChat result
chat->version = d.vversion.v; chat->version = d.vversion.v;
const QVector<MTPChatParticipant> &v(d.vparticipants.c_vector().v); const QVector<MTPChatParticipant> &v(d.vparticipants.c_vector().v);
chat->count = v.size(); chat->count = v.size();
@ -564,13 +617,19 @@ namespace App {
if (App::main()) App::main()->updateBotKeyboard(); if (App::main()) App::main()->updateBotKeyboard();
} }
} }
if (App::main()) App::main()->peerUpdated(chat);
} }
} break; } break;
} }
if (chat && App::main()) {
if (emitPeerUpdated) {
App::main()->peerUpdated(chat);
} else {
markPeerUpdated(chat);
}
}
} }
void feedParticipantAdd(const MTPDupdateChatParticipantAdd &d) { void feedParticipantAdd(const MTPDupdateChatParticipantAdd &d, bool emitPeerUpdated) {
ChatData *chat = App::chat(d.vchat_id.v); ChatData *chat = App::chat(d.vchat_id.v);
if (chat->version <= d.vversion.v && chat->count >= 0) { if (chat->version <= d.vversion.v && chat->count >= 0) {
chat->version = d.vversion.v; chat->version = d.vversion.v;
@ -597,11 +656,17 @@ namespace App {
chat->botStatus = 0; chat->botStatus = 0;
chat->count++; chat->count++;
} }
if (App::main()) App::main()->peerUpdated(chat); if (App::main()) {
if (emitPeerUpdated) {
App::main()->peerUpdated(chat);
} else {
markPeerUpdated(chat);
}
}
} }
} }
void feedParticipantDelete(const MTPDupdateChatParticipantDelete &d) { void feedParticipantDelete(const MTPDupdateChatParticipantDelete &d, bool emitPeerUpdated) {
ChatData *chat = App::chat(d.vchat_id.v); ChatData *chat = App::chat(d.vchat_id.v);
if (chat->version <= d.vversion.v && chat->count > 0) { if (chat->version <= d.vversion.v && chat->count > 0) {
chat->version = d.vversion.v; chat->version = d.vversion.v;
@ -641,7 +706,13 @@ namespace App {
chat->botStatus = 0; chat->botStatus = 0;
chat->count--; chat->count--;
} }
if (App::main()) App::main()->peerUpdated(chat); if (App::main()) {
if (emitPeerUpdated) {
App::main()->peerUpdated(chat);
} else {
markPeerUpdated(chat);
}
}
} }
} }
@ -691,27 +762,23 @@ namespace App {
return ImagePtr(); return ImagePtr();
} }
StorageImageLocation imageLocation(int32 w, int32 h, const MTPFileLocation &loc) {
if (loc.type() == mtpc_fileLocation) {
const MTPDfileLocation &l(loc.c_fileLocation());
return StorageImageLocation(w, h, l.vdc_id.v, l.vvolume_id.v, l.vlocal_id.v, l.vsecret.v);
}
return StorageImageLocation(w, h, 0, 0, 0, 0);
}
StorageImageLocation imageLocation(const MTPPhotoSize &size) { StorageImageLocation imageLocation(const MTPPhotoSize &size) {
switch (size.type()) { switch (size.type()) {
case mtpc_photoSize: { case mtpc_photoSize: {
const MTPDphotoSize &d(size.c_photoSize()); const MTPDphotoSize &d(size.c_photoSize());
if (d.vlocation.type() == mtpc_fileLocation) { return imageLocation(d.vw.v, d.vh.v, d.vlocation);
const MTPDfileLocation &l(d.vlocation.c_fileLocation());
return StorageImageLocation(d.vw.v, d.vh.v, l.vdc_id.v, l.vvolume_id.v, l.vlocal_id.v, l.vsecret.v);
}
} break; } break;
case mtpc_photoCachedSize: { case mtpc_photoCachedSize: {
const MTPDphotoCachedSize &d(size.c_photoCachedSize()); const MTPDphotoCachedSize &d(size.c_photoCachedSize());
if (d.vlocation.type() == mtpc_fileLocation) { return imageLocation(d.vw.v, d.vh.v, d.vlocation);
const MTPDfileLocation &l(d.vlocation.c_fileLocation());
const string &s(d.vbytes.c_string().v);
QByteArray bytes(s.data(), s.size());
return StorageImageLocation(d.vw.v, d.vh.v, l.vdc_id.v, l.vvolume_id.v, l.vlocal_id.v, l.vsecret.v);
} else if (d.vlocation.type() == mtpc_fileLocationUnavailable) {
const string &s(d.vbytes.c_string().v);
QByteArray bytes(s.data(), s.size());
return StorageImageLocation(d.vw.v, d.vh.v, 0, 0, 0, 0);
}
} break; } break;
} }
return StorageImageLocation(); return StorageImageLocation();
@ -737,6 +804,9 @@ namespace App {
History *h = App::historyLoaded(peer); History *h = App::historyLoaded(peer);
if (h) { if (h) {
h->outboxRead(upTo); h->outboxRead(upTo);
if (!h->peer->chat) {
h->peer->asUser()->madeAction();
}
} }
} }
@ -757,26 +827,34 @@ namespace App {
} }
} }
void feedUserLinks(const MTPVector<MTPcontacts_Link> &links) { void feedUserLinks(const MTPVector<MTPcontacts_Link> &links, bool emitPeerUpdated) {
const QVector<MTPcontacts_Link> &v(links.c_vector().v); const QVector<MTPcontacts_Link> &v(links.c_vector().v);
for (QVector<MTPcontacts_Link>::const_iterator i = v.cbegin(), e = v.cend(); i != e; ++i) { for (QVector<MTPcontacts_Link>::const_iterator i = v.cbegin(), e = v.cend(); i != e; ++i) {
const MTPDcontacts_link &dv(i->c_contacts_link()); const MTPDcontacts_link &dv(i->c_contacts_link());
feedUsers(MTP_vector<MTPUser>(1, dv.vuser)); UserData *user = feedUsers(MTP_vector<MTPUser>(1, dv.vuser), false);
MTPint userId(MTP_int(0)); MTPint userId(MTP_int(0));
switch (dv.vuser.type()) { switch (dv.vuser.type()) {
case mtpc_userEmpty: userId = dv.vuser.c_userEmpty().vid; break; case mtpc_userEmpty: userId = dv.vuser.c_userEmpty().vid; break;
case mtpc_user: userId = dv.vuser.c_user().vid; break; case mtpc_user: userId = dv.vuser.c_user().vid; break;
} }
if (userId.v) { if (userId.v) {
feedUserLink(userId, dv.vmy_link, dv.vforeign_link); feedUserLink(userId, dv.vmy_link, dv.vforeign_link, false);
}
if (user && App::main()) {
if (emitPeerUpdated) {
App::main()->peerUpdated(user);
} else {
markPeerUpdated(user);
}
} }
} }
} }
void feedUserLink(MTPint userId, const MTPContactLink &myLink, const MTPContactLink &foreignLink) { void feedUserLink(MTPint userId, const MTPContactLink &myLink, const MTPContactLink &foreignLink, bool emitPeerUpdated) {
UserData *user = userLoaded(userId.v); UserData *user = userLoaded(userId.v);
if (user) { if (user) {
bool wasContact = (user->contact > 0); bool wasContact = (user->contact > 0);
bool wasShowPhone = !user->contact;
switch (myLink.type()) { switch (myLink.type()) {
case mtpc_contactLinkContact: case mtpc_contactLinkContact:
user->contact = 1; user->contact = 1;
@ -792,14 +870,8 @@ namespace App {
if (user->contact > 0) { if (user->contact > 0) {
if (!wasContact) { if (!wasContact) {
App::main()->addNewContact(App::userFromPeer(user->id), false); App::main()->addNewContact(App::userFromPeer(user->id), false);
if (user->input.type() != mtpc_inputPeerSelf) user->input = MTP_inputPeerContact(userId);
if (user->inputUser.type() != mtpc_inputUserSelf) user->inputUser = MTP_inputUserContact(userId);
} }
} else { } else {
if (user->access && user->access != UserNoAccess) {
if (user->input.type() != mtpc_inputPeerSelf) user->input = MTP_inputPeerForeign(userId, MTP_long(user->access));
if (user->inputUser.type() != mtpc_inputUserSelf) user->inputUser = MTP_inputUserForeign(userId, MTP_long(user->access));
}
if (user->contact < 0 && !user->phone.isEmpty() && App::userFromPeer(user->id) != MTP::authedId()) { if (user->contact < 0 && !user->phone.isEmpty() && App::userFromPeer(user->id) != MTP::authedId()) {
user->contact = 0; user->contact = 0;
} }
@ -807,8 +879,38 @@ namespace App {
App::main()->removeContact(user); App::main()->removeContact(user);
} }
} }
user->setName(textOneLine(user->firstName), textOneLine(user->lastName), (user->contact || isServiceUser(user->id) || user->phone.isEmpty()) ? QString() : App::formatPhone(user->phone), textOneLine(user->username));
if (App::main()) App::main()->peerUpdated(user); bool showPhone = !isServiceUser(user->id) && (user->input.type() != mtpc_inputPeerSelf) && !user->contact;
bool showPhoneChanged = !isServiceUser(user->id) && (user->input.type() != mtpc_inputPeerSelf) && ((showPhone && !wasShowPhone) || (!showPhone && wasShowPhone));
if (showPhoneChanged) {
user->setName(textOneLine(user->firstName), textOneLine(user->lastName), showPhone ? App::formatPhone(user->phone) : QString(), textOneLine(user->username));
}
if (App::main()) {
if (emitPeerUpdated) {
App::main()->peerUpdated(user);
} else {
markPeerUpdated(user);
}
}
}
}
void markPeerUpdated(PeerData *data) {
updatedPeers.insert(data, true);
}
void clearPeerUpdated(PeerData *data) {
updatedPeers.remove(data);
}
void emitPeerUpdated() {
if (!updatedPeers.isEmpty() && App::main()) {
UpdatedPeers upd = updatedPeers;
updatedPeers.clear();
for (UpdatedPeers::const_iterator i = upd.cbegin(), e = upd.cend(); i != e; ++i) {
App::main()->peerUpdated(i.key());
}
} }
} }
@ -818,7 +920,7 @@ namespace App {
return feedPhoto(photo.c_photo(), convert); return feedPhoto(photo.c_photo(), convert);
} break; } break;
case mtpc_photoEmpty: { case mtpc_photoEmpty: {
return App::photo(photo.c_photoEmpty().vid.v, convert); return App::photoSet(photo.c_photoEmpty().vid.v, convert, 0, 0, ImagePtr(), ImagePtr(), ImagePtr());
} break; } break;
} }
return App::photo(0); return App::photo(0);
@ -862,7 +964,7 @@ namespace App {
switch (photo.type()) { switch (photo.type()) {
case mtpc_photo: { case mtpc_photo: {
const MTPDphoto &ph(photo.c_photo()); const MTPDphoto &ph(photo.c_photo());
return App::photo(ph.vid.v, 0, ph.vaccess_hash.v, ph.vuser_id.v, ph.vdate.v, ImagePtr(*thumb, "JPG"), ImagePtr(*medium, "JPG"), ImagePtr(*full, "JPG")); return App::photoSet(ph.vid.v, 0, ph.vaccess_hash.v, ph.vdate.v, ImagePtr(*thumb, "JPG"), ImagePtr(*medium, "JPG"), ImagePtr(*full, "JPG"));
} break; } break;
case mtpc_photoEmpty: return App::photo(photo.c_photoEmpty().vid.v); case mtpc_photoEmpty: return App::photo(photo.c_photoEmpty().vid.v);
} }
@ -917,13 +1019,13 @@ namespace App {
} }
} }
if (thumb && medium && full) { if (thumb && medium && full) {
return App::photo(photo.vid.v, convert, photo.vaccess_hash.v, photo.vuser_id.v, photo.vdate.v, App::image(*thumb), App::image(*medium), App::image(*full)); return App::photoSet(photo.vid.v, convert, photo.vaccess_hash.v, photo.vdate.v, App::image(*thumb), App::image(*medium), App::image(*full));
} }
return App::photo(photo.vid.v, convert); return App::photoSet(photo.vid.v, convert, 0, 0, ImagePtr(), ImagePtr(), ImagePtr());
} }
VideoData *feedVideo(const MTPDvideo &video, VideoData *convert) { VideoData *feedVideo(const MTPDvideo &video, VideoData *convert) {
return App::video(video.vid.v, convert, video.vaccess_hash.v, video.vuser_id.v, video.vdate.v, video.vduration.v, video.vw.v, video.vh.v, App::image(video.vthumb), video.vdc_id.v, video.vsize.v); return App::videoSet(video.vid.v, convert, video.vaccess_hash.v, video.vdate.v, video.vduration.v, video.vw.v, video.vh.v, App::image(video.vthumb), video.vdc_id.v, video.vsize.v);
} }
AudioData *feedAudio(const MTPaudio &audio, AudioData *convert) { AudioData *feedAudio(const MTPaudio &audio, AudioData *convert) {
@ -932,14 +1034,14 @@ namespace App {
return feedAudio(audio.c_audio(), convert); return feedAudio(audio.c_audio(), convert);
} break; } break;
case mtpc_audioEmpty: { case mtpc_audioEmpty: {
return App::audio(audio.c_audioEmpty().vid.v, convert); return App::audioSet(audio.c_audioEmpty().vid.v, convert, 0, 0, QString(), 0, 0, 0);
} break; } break;
} }
return App::audio(0); return App::audio(0);
} }
AudioData *feedAudio(const MTPDaudio &audio, AudioData *convert) { AudioData *feedAudio(const MTPDaudio &audio, AudioData *convert) {
return App::audio(audio.vid.v, convert, audio.vaccess_hash.v, audio.vuser_id.v, audio.vdate.v, qs(audio.vmime_type), audio.vduration.v, audio.vdc_id.v, audio.vsize.v); return App::audioSet(audio.vid.v, convert, audio.vaccess_hash.v, audio.vdate.v, qs(audio.vmime_type), audio.vduration.v, audio.vdc_id.v, audio.vsize.v);
} }
DocumentData *feedDocument(const MTPdocument &document, const QPixmap &thumb) { DocumentData *feedDocument(const MTPdocument &document, const QPixmap &thumb) {
@ -970,11 +1072,11 @@ namespace App {
} }
WebPageData *feedWebPage(const MTPDwebPage &webpage, WebPageData *convert) { WebPageData *feedWebPage(const MTPDwebPage &webpage, WebPageData *convert) {
return App::webPage(webpage.vid.v, convert, webpage.has_type() ? qs(webpage.vtype) : qsl("article"), qs(webpage.vurl), qs(webpage.vdisplay_url), webpage.has_site_name() ? qs(webpage.vsite_name) : QString(), webpage.has_title() ? qs(webpage.vtitle) : QString(), webpage.has_description() ? qs(webpage.vdescription) : QString(), webpage.has_photo() ? App::feedPhoto(webpage.vphoto) : 0, webpage.has_duration() ? webpage.vduration.v : 0, webpage.has_author() ? qs(webpage.vauthor) : QString(), 0); return App::webPageSet(webpage.vid.v, convert, webpage.has_type() ? qs(webpage.vtype) : qsl("article"), qs(webpage.vurl), qs(webpage.vdisplay_url), webpage.has_site_name() ? qs(webpage.vsite_name) : QString(), webpage.has_title() ? qs(webpage.vtitle) : QString(), webpage.has_description() ? qs(webpage.vdescription) : QString(), webpage.has_photo() ? App::feedPhoto(webpage.vphoto) : 0, webpage.has_duration() ? webpage.vduration.v : 0, webpage.has_author() ? qs(webpage.vauthor) : QString(), 0);
} }
WebPageData *feedWebPage(const MTPDwebPagePending &webpage, WebPageData *convert) { WebPageData *feedWebPage(const MTPDwebPagePending &webpage, WebPageData *convert) {
return App::webPage(webpage.vid.v, convert, QString(), QString(), QString(), QString(), QString(), QString(), 0, 0, QString(), webpage.vdate.v); return App::webPageSet(webpage.vid.v, convert, QString(), QString(), QString(), QString(), QString(), QString(), 0, 0, QString(), webpage.vdate.v);
} }
WebPageData *feedWebPage(const MTPWebPage &webpage) { WebPageData *feedWebPage(const MTPWebPage &webpage) {
@ -1058,7 +1160,15 @@ namespace App {
return App::peer(App::peerFromChat(chat))->asChat(); return App::peer(App::peerFromChat(chat))->asChat();
} }
PhotoData *photo(const PhotoId &photo, PhotoData *convert, const uint64 &access, int32 user, int32 date, const ImagePtr &thumb, const ImagePtr &medium, const ImagePtr &full) { PhotoData *photo(const PhotoId &photo) {
PhotosData::const_iterator i = photosData.constFind(photo);
if (i == photosData.cend()) {
i = photosData.insert(photo, new PhotoData(photo));
}
return i.value();
}
PhotoData *photoSet(const PhotoId &photo, PhotoData *convert, const uint64 &access, int32 date, const ImagePtr &thumb, const ImagePtr &medium, const ImagePtr &full) {
if (convert) { if (convert) {
if (convert->id != photo) { if (convert->id != photo) {
PhotosData::iterator i = photosData.find(convert->id); PhotosData::iterator i = photosData.find(convert->id);
@ -1068,8 +1178,7 @@ namespace App {
convert->id = photo; convert->id = photo;
} }
convert->access = access; convert->access = access;
if (!convert->user && !convert->date && (user || date)) { if (!convert->date && date) {
convert->user = user;
convert->date = date; convert->date = date;
convert->thumb = thumb; convert->thumb = thumb;
convert->medium = medium; convert->medium = medium;
@ -1083,14 +1192,13 @@ namespace App {
if (convert) { if (convert) {
result = convert; result = convert;
} else { } else {
result = new PhotoData(photo, access, user, date, thumb, medium, full); result = new PhotoData(photo, access, date, thumb, medium, full);
} }
photosData.insert(photo, result); photosData.insert(photo, result);
} else { } else {
result = i.value(); result = i.value();
if (result != convert && !result->user && !result->date && (user || date)) { if (result != convert && !result->date && date) {
result->access = access; result->access = access;
result->user = user;
result->date = date; result->date = date;
result->thumb = thumb; result->thumb = thumb;
result->medium = medium; result->medium = medium;
@ -1112,7 +1220,15 @@ namespace App {
return result; return result;
} }
VideoData *video(const VideoId &video, VideoData *convert, const uint64 &access, int32 user, int32 date, int32 duration, int32 w, int32 h, const ImagePtr &thumb, int32 dc, int32 size) { VideoData *video(const VideoId &video) {
VideosData::const_iterator i = videosData.constFind(video);
if (i == videosData.cend()) {
i = videosData.insert(video, new VideoData(video));
}
return i.value();
}
VideoData *videoSet(const VideoId &video, VideoData *convert, const uint64 &access, int32 date, int32 duration, int32 w, int32 h, const ImagePtr &thumb, int32 dc, int32 size) {
if (convert) { if (convert) {
if (convert->id != video) { if (convert->id != video) {
VideosData::iterator i = videosData.find(convert->id); VideosData::iterator i = videosData.find(convert->id);
@ -1123,8 +1239,7 @@ namespace App {
convert->status = FileReady; convert->status = FileReady;
} }
convert->access = access; convert->access = access;
if (!convert->user && !convert->date && (user || date)) { if (!convert->date && date) {
convert->user = user;
convert->date = date; convert->date = date;
convert->duration = duration; convert->duration = duration;
convert->w = w; convert->w = w;
@ -1140,14 +1255,13 @@ namespace App {
if (convert) { if (convert) {
result = convert; result = convert;
} else { } else {
result = new VideoData(video, access, user, date, duration, w, h, thumb, dc, size); result = new VideoData(video, access, date, duration, w, h, thumb, dc, size);
} }
videosData.insert(video, result); videosData.insert(video, result);
} else { } else {
result = i.value(); result = i.value();
if (result != convert && !result->user && !result->date && (user || date)) { if (result != convert && !result->date && date) {
result->access = access; result->access = access;
result->user = user;
result->date = date; result->date = date;
result->duration = duration; result->duration = duration;
result->w = w; result->w = w;
@ -1160,7 +1274,15 @@ namespace App {
return result; return result;
} }
AudioData *audio(const AudioId &audio, AudioData *convert, const uint64 &access, int32 user, int32 date, const QString &mime, int32 duration, int32 dc, int32 size) { AudioData *audio(const AudioId &audio) {
AudiosData::const_iterator i = audiosData.constFind(audio);
if (i == audiosData.cend()) {
i = audiosData.insert(audio, new AudioData(audio));
}
return i.value();
}
AudioData *audioSet(const AudioId &audio, AudioData *convert, const uint64 &access, int32 date, const QString &mime, int32 duration, int32 dc, int32 size) {
if (convert) { if (convert) {
if (convert->id != audio) { if (convert->id != audio) {
AudiosData::iterator i = audiosData.find(convert->id); AudiosData::iterator i = audiosData.find(convert->id);
@ -1171,8 +1293,7 @@ namespace App {
convert->status = FileReady; convert->status = FileReady;
} }
convert->access = access; convert->access = access;
if (!convert->user && !convert->date && (user || date)) { if (!convert->date && date) {
convert->user = user;
convert->date = date; convert->date = date;
convert->mime = mime; convert->mime = mime;
convert->duration = duration; convert->duration = duration;
@ -1186,14 +1307,13 @@ namespace App {
if (convert) { if (convert) {
result = convert; result = convert;
} else { } else {
result = new AudioData(audio, access, user, date, mime, duration, dc, size); result = new AudioData(audio, access, date, mime, duration, dc, size);
} }
audiosData.insert(audio, result); audiosData.insert(audio, result);
} else { } else {
result = i.value(); result = i.value();
if (result != convert && !result->user && !result->date && (user || date)) { if (result != convert && !result->date && date) {
result->access = access; result->access = access;
result->user = user;
result->date = date; result->date = date;
result->mime = mime; result->mime = mime;
result->duration = duration; result->duration = duration;
@ -1222,7 +1342,7 @@ namespace App {
} }
convert->id = document; convert->id = document;
convert->status = FileReady; convert->status = FileReady;
sentSticker = !!convert->sticker; sentSticker = !!convert->sticker();
} }
convert->access = access; convert->access = access;
if (!convert->date && date) { if (!convert->date && date) {
@ -1236,20 +1356,20 @@ namespace App {
if (!thumb->isNull() && (convert->thumb->isNull() || convert->thumb->width() < thumb->width() || convert->thumb->height() < thumb->height())) { if (!thumb->isNull() && (convert->thumb->isNull() || convert->thumb->width() < thumb->width() || convert->thumb->height() < thumb->height())) {
convert->thumb = thumb; convert->thumb = thumb;
} }
if (convert->sticker && !attributes.isEmpty() && (convert->sticker->alt.isEmpty() || convert->sticker->set.type() == mtpc_inputStickerSetEmpty)) { if (convert->sticker() && !attributes.isEmpty() && (convert->sticker()->alt.isEmpty() || convert->sticker()->set.type() == mtpc_inputStickerSetEmpty)) {
for (QVector<MTPDocumentAttribute>::const_iterator i = attributes.cbegin(), e = attributes.cend(); i != e; ++i) { for (QVector<MTPDocumentAttribute>::const_iterator i = attributes.cbegin(), e = attributes.cend(); i != e; ++i) {
if (i->type() == mtpc_documentAttributeSticker) { if (i->type() == mtpc_documentAttributeSticker) {
const MTPDdocumentAttributeSticker &d(i->c_documentAttributeSticker()); const MTPDdocumentAttributeSticker &d(i->c_documentAttributeSticker());
if (d.valt.c_string().v.length() > 0) { if (d.valt.c_string().v.length() > 0) {
convert->sticker->alt = qs(d.valt); convert->sticker()->alt = qs(d.valt);
convert->sticker->set = d.vstickerset; convert->sticker()->set = d.vstickerset;
} }
} }
} }
} }
} }
if (convert->sticker && !convert->sticker->loc.dc && thumbLocation.dc) { if (convert->sticker() && !convert->sticker()->loc.dc && thumbLocation.dc) {
convert->sticker->loc = thumbLocation; convert->sticker()->loc = thumbLocation;
} }
if (convert->location.check()) { if (convert->location.check()) {
@ -1263,7 +1383,7 @@ namespace App {
result = convert; result = convert;
} else { } else {
result = new DocumentData(document, access, date, attributes, mime, thumb, dc, size); result = new DocumentData(document, access, date, attributes, mime, thumb, dc, size);
if (result->sticker) result->sticker->loc = thumbLocation; if (result->sticker()) result->sticker()->loc = thumbLocation;
} }
documentsData.insert(document, result); documentsData.insert(document, result);
} else { } else {
@ -1281,19 +1401,19 @@ namespace App {
if (!thumb->isNull() && (result->thumb->isNull() || result->thumb->width() < thumb->width() || result->thumb->height() < thumb->height())) { if (!thumb->isNull() && (result->thumb->isNull() || result->thumb->width() < thumb->width() || result->thumb->height() < thumb->height())) {
result->thumb = thumb; result->thumb = thumb;
} }
if (result->sticker && !attributes.isEmpty() && (result->sticker->alt.isEmpty() || result->sticker->set.type() == mtpc_inputStickerSetEmpty)) { if (result->sticker() && !attributes.isEmpty() && (result->sticker()->alt.isEmpty() || result->sticker()->set.type() == mtpc_inputStickerSetEmpty)) {
for (QVector<MTPDocumentAttribute>::const_iterator i = attributes.cbegin(), e = attributes.cend(); i != e; ++i) { for (QVector<MTPDocumentAttribute>::const_iterator i = attributes.cbegin(), e = attributes.cend(); i != e; ++i) {
if (i->type() == mtpc_documentAttributeSticker) { if (i->type() == mtpc_documentAttributeSticker) {
const MTPDdocumentAttributeSticker &d(i->c_documentAttributeSticker()); const MTPDdocumentAttributeSticker &d(i->c_documentAttributeSticker());
if (d.valt.c_string().v.length() > 0) { if (d.valt.c_string().v.length() > 0) {
result->sticker->alt = qs(d.valt); result->sticker()->alt = qs(d.valt);
result->sticker->set = d.vstickerset; result->sticker()->set = d.vstickerset;
} }
} }
} }
} }
if (result->sticker && !result->sticker->loc.dc && thumbLocation.dc) { if (result->sticker() && !result->sticker()->loc.dc && thumbLocation.dc) {
result->sticker->loc = thumbLocation; result->sticker()->loc = thumbLocation;
} }
} }
} }
@ -1302,7 +1422,15 @@ namespace App {
return result; return result;
} }
WebPageData *webPage(const WebPageId &webPage, WebPageData *convert, const QString &type, const QString &url, const QString &displayUrl, const QString &siteName, const QString &title, const QString &description, PhotoData *photo, int32 duration, const QString &author, int32 pendingTill) { WebPageData *webPage(const WebPageId &webPage) {
WebPagesData::const_iterator i = webPagesData.constFind(webPage);
if (i == webPagesData.cend()) {
i = webPagesData.insert(webPage, new WebPageData(webPage));
}
return i.value();
}
WebPageData *webPageSet(const WebPageId &webPage, WebPageData *convert, const QString &type, const QString &url, const QString &displayUrl, const QString &siteName, const QString &title, const QString &description, PhotoData *photo, int32 duration, const QString &author, int32 pendingTill) {
if (convert) { if (convert) {
if (convert->id != webPage) { if (convert->id != webPage) {
WebPagesData::iterator i = webPagesData.find(convert->id); WebPagesData::iterator i = webPagesData.find(convert->id);
@ -1360,7 +1488,15 @@ namespace App {
return result; return result;
} }
ImageLinkData *imageLink(const QString &imageLink, ImageLinkType type, const QString &url) { ImageLinkData *imageLink(const QString &imageLink) {
ImageLinksData::const_iterator i = imageLinksData.constFind(imageLink);
if (i == imageLinksData.cend()) {
i = imageLinksData.insert(imageLink, new ImageLinkData(imageLink));
}
return i.value();
}
ImageLinkData *imageLinkSet(const QString &imageLink, ImageLinkType type, const QString &url) {
ImageLinksData::const_iterator i = imageLinksData.constFind(imageLink); ImageLinksData::const_iterator i = imageLinksData.constFind(imageLink);
ImageLinkData *result; ImageLinkData *result;
if (i == imageLinksData.cend()) { if (i == imageLinksData.cend()) {
@ -1401,7 +1537,7 @@ namespace App {
photoSizes.push_back(MTP_photoSize(MTP_string("a"), uphoto.vphoto_small, MTP_int(160), MTP_int(160), MTP_int(0))); photoSizes.push_back(MTP_photoSize(MTP_string("a"), uphoto.vphoto_small, MTP_int(160), MTP_int(160), MTP_int(0)));
photoSizes.push_back(MTP_photoSize(MTP_string("c"), uphoto.vphoto_big, MTP_int(640), MTP_int(640), MTP_int(0))); photoSizes.push_back(MTP_photoSize(MTP_string("c"), uphoto.vphoto_big, MTP_int(640), MTP_int(640), MTP_int(0)));
return MTP_photo(uphoto.vphoto_id, MTP_long(0), userId, date, MTP_geoPointEmpty(), MTP_vector<MTPPhotoSize>(photoSizes)); return MTP_photo(uphoto.vphoto_id, MTP_long(0), date, MTP_vector<MTPPhotoSize>(photoSizes));
} }
return MTP_photoEmpty(MTP_long(0)); return MTP_photoEmpty(MTP_long(0));
} }
@ -1546,6 +1682,9 @@ namespace App {
historyClearMsgs(); historyClearMsgs();
randomData.clear(); randomData.clear();
mutedPeers.clear(); mutedPeers.clear();
updatedPeers.clear();
cSetSavedPeers(SavedPeers());
cSetSavedPeersByTime(SavedPeersByTime());
for (PeersData::const_iterator i = peersData.cbegin(), e = peersData.cend(); i != e; ++i) { for (PeersData::const_iterator i = peersData.cbegin(), e = peersData.cend(); i != e; ++i) {
delete *i; delete *i;
} }
@ -1573,7 +1712,6 @@ namespace App {
if (api()) api()->clearWebPageRequests(); if (api()) api()->clearWebPageRequests();
cSetRecentStickers(RecentStickerPack()); cSetRecentStickers(RecentStickerPack());
cSetStickersHash(QByteArray()); cSetStickersHash(QByteArray());
cSetEmojiStickers(EmojiStickersMap());
cSetStickerSets(StickerSets()); cSetStickerSets(StickerSets());
cSetStickerSetsOrder(StickerSetsOrder()); cSetStickerSetsOrder(StickerSetsOrder());
cSetLastStickersUpdate(0); cSetLastStickersUpdate(0);
@ -1602,15 +1740,6 @@ namespace App {
} }
} }
/* // don't delete history without deleting its' peerdata
void deleteHistory(const PeerId &peer) {
Histories::iterator i = ::histories.find(peer);
if (i != ::histories.end()) {
::histories.typing.remove(i.value());
::histories.erase(i);
}
}
/**/
void historyRegRandom(uint64 randomId, MsgId itemId) { void historyRegRandom(uint64 randomId, MsgId itemId) {
randomData.insert(randomId, itemId); randomData.insert(randomId, itemId);
} }
@ -2028,6 +2157,18 @@ namespace App {
} }
} }
} break; } break;
case mtpc_replyKeyboardHide: {
const MTPDreplyKeyboardHide &d(markup.c_replyKeyboardHide());
if (d.vflags.v) {
replyMarkups.insert(msgId, ReplyMarkup(d.vflags.v | MTPDreplyKeyboardMarkup_flag_ZERO));
}
} break;
case mtpc_replyKeyboardForceReply: {
const MTPDreplyKeyboardForceReply &d(markup.c_replyKeyboardForceReply());
replyMarkups.insert(msgId, ReplyMarkup(d.vflags.v | MTPDreplyKeyboardMarkup_flag_FORCE_REPLY));
} break;
} }
} }

View file

@ -105,23 +105,29 @@ namespace App {
int32 onlineForSort(UserData *user, int32 now); int32 onlineForSort(UserData *user, int32 now);
int32 onlineWillChangeIn(UserData *user, int32 nowOnServer); int32 onlineWillChangeIn(UserData *user, int32 nowOnServer);
QString onlineText(UserData *user, int32 nowOnServer, bool precise = false); QString onlineText(UserData *user, int32 nowOnServer, bool precise = false);
bool onlineColorUse(int32 online, int32 now); bool onlineColorUse(UserData *user, int32 now);
UserData *feedUsers(const MTPVector<MTPUser> &users); // returns last user UserData *feedUsers(const MTPVector<MTPUser> &users, bool emitPeerUpdated = true); // returns last user
ChatData *feedChats(const MTPVector<MTPChat> &chats); // returns last chat ChatData *feedChats(const MTPVector<MTPChat> &chats, bool emitPeerUpdated = true); // returns last chat
void feedParticipants(const MTPChatParticipants &p, bool requestBotInfos = false); void feedParticipants(const MTPChatParticipants &p, bool requestBotInfos, bool emitPeerUpdated = true);
void feedParticipantAdd(const MTPDupdateChatParticipantAdd &d); void feedParticipantAdd(const MTPDupdateChatParticipantAdd &d, bool emitPeerUpdated = true);
void feedParticipantDelete(const MTPDupdateChatParticipantDelete &d); void feedParticipantDelete(const MTPDupdateChatParticipantDelete &d, bool emitPeerUpdated = true);
void feedMsgs(const MTPVector<MTPMessage> &msgs, int msgsState = 0); // 2 - new read message, 1 - new unread message, 0 - not new message, -1 - searched message void feedMsgs(const MTPVector<MTPMessage> &msgs, int msgsState = 0); // 2 - new read message, 1 - new unread message, 0 - not new message, -1 - searched message
void feedWereRead(const QVector<MTPint> &msgsIds); void feedWereRead(const QVector<MTPint> &msgsIds);
void feedInboxRead(const PeerId &peer, int32 upTo); void feedInboxRead(const PeerId &peer, int32 upTo);
void feedOutboxRead(const PeerId &peer, int32 upTo); void feedOutboxRead(const PeerId &peer, int32 upTo);
void feedWereDeleted(const QVector<MTPint> &msgsIds); void feedWereDeleted(const QVector<MTPint> &msgsIds);
void feedUserLinks(const MTPVector<MTPcontacts_Link> &links); void feedUserLinks(const MTPVector<MTPcontacts_Link> &links, bool emitPeerUpdated = true);
void feedUserLink(MTPint userId, const MTPContactLink &myLink, const MTPContactLink &foreignLink); void feedUserLink(MTPint userId, const MTPContactLink &myLink, const MTPContactLink &foreignLink, bool emitPeerUpdated = true);
void markPeerUpdated(PeerData *data);
void clearPeerUpdated(PeerData *data);
void emitPeerUpdated();
int32 maxMsgId(); int32 maxMsgId();
ImagePtr image(const MTPPhotoSize &size); ImagePtr image(const MTPPhotoSize &size);
StorageImageLocation imageLocation(int32 w, int32 h, const MTPFileLocation &loc);
StorageImageLocation imageLocation(const MTPPhotoSize &size); StorageImageLocation imageLocation(const MTPPhotoSize &size);
PhotoData *feedPhoto(const MTPPhoto &photo, const PreparedPhotoThumbs &thumbs); PhotoData *feedPhoto(const MTPPhoto &photo, const PreparedPhotoThumbs &thumbs);
@ -151,13 +157,18 @@ namespace App {
ChatData *chat(const PeerId &peer); ChatData *chat(const PeerId &peer);
ChatData *chat(int32 chat); ChatData *chat(int32 chat);
QString peerName(const PeerData *peer, bool forDialogs = false); QString peerName(const PeerData *peer, bool forDialogs = false);
PhotoData *photo(const PhotoId &photo, PhotoData *convert = 0, const uint64 &access = 0, int32 user = 0, int32 date = 0, const ImagePtr &thumb = ImagePtr(), const ImagePtr &medium = ImagePtr(), const ImagePtr &full = ImagePtr()); PhotoData *photo(const PhotoId &photo);
VideoData *video(const VideoId &video, VideoData *convert = 0, const uint64 &access = 0, int32 user = 0, int32 date = 0, int32 duration = 0, int32 w = 0, int32 h = 0, const ImagePtr &thumb = ImagePtr(), int32 dc = 0, int32 size = 0); PhotoData *photoSet(const PhotoId &photo, PhotoData *convert, const uint64 &access, int32 date, const ImagePtr &thumb, const ImagePtr &medium, const ImagePtr &full);
AudioData *audio(const AudioId &audio, AudioData *convert = 0, const uint64 &access = 0, int32 user = 0, int32 date = 0, const QString &mime = QString(), int32 duration = 0, int32 dc = 0, int32 size = 0); VideoData *video(const VideoId &video);
VideoData *videoSet(const VideoId &video, VideoData *convert, const uint64 &access, int32 date, int32 duration, int32 w, int32 h, const ImagePtr &thumb, int32 dc, int32 size);
AudioData *audio(const AudioId &audio);
AudioData *audioSet(const AudioId &audio, AudioData *convert, const uint64 &access, int32 date, const QString &mime, int32 duration, int32 dc, int32 size);
DocumentData *document(const DocumentId &document); DocumentData *document(const DocumentId &document);
DocumentData *documentSet(const DocumentId &document, DocumentData *convert, const uint64 &access, int32 date, const QVector<MTPDocumentAttribute> &attributes, const QString &mime, const ImagePtr &thumb, int32 dc, int32 size, const StorageImageLocation &thumbLocation); DocumentData *documentSet(const DocumentId &document, DocumentData *convert, const uint64 &access, int32 date, const QVector<MTPDocumentAttribute> &attributes, const QString &mime, const ImagePtr &thumb, int32 dc, int32 size, const StorageImageLocation &thumbLocation);
WebPageData *webPage(const WebPageId &webPage, WebPageData *convert = 0, const QString &type = QString(), const QString &url = QString(), const QString &displayUrl = QString(), const QString &siteName = QString(), const QString &title = QString(), const QString &description = QString(), PhotoData *photo = 0, int32 duration = 0, const QString &author = QString(), int32 pendingTill = -2); WebPageData *webPage(const WebPageId &webPage);
ImageLinkData *imageLink(const QString &imageLink, ImageLinkType type = InvalidImageLink, const QString &url = QString()); WebPageData *webPageSet(const WebPageId &webPage, WebPageData *convert, const QString &, const QString &url, const QString &displayUrl, const QString &siteName, const QString &title, const QString &description, PhotoData *photo, int32 duration, const QString &author, int32 pendingTill);
ImageLinkData *imageLink(const QString &imageLink);
ImageLinkData *imageLinkSet(const QString &imageLink, ImageLinkType type, const QString &url);
void forgetMedia(); void forgetMedia();
MTPPhoto photoFromUserPhoto(MTPint userId, MTPint date, const MTPUserProfilePhoto &photo); MTPPhoto photoFromUserPhoto(MTPint userId, MTPint date, const MTPUserProfilePhoto &photo);
@ -173,7 +184,6 @@ namespace App {
void historyClearItems(); void historyClearItems();
void historyRegReply(HistoryReply *reply, HistoryItem *to); void historyRegReply(HistoryReply *reply, HistoryItem *to);
void historyUnregReply(HistoryReply *reply, HistoryItem *to); void historyUnregReply(HistoryReply *reply, HistoryItem *to);
// void deleteHistory(const PeerId &peer);
void historyRegRandom(uint64 randomId, MsgId itemId); void historyRegRandom(uint64 randomId, MsgId itemId);
void historyUnregRandom(uint64 randomId); void historyUnregRandom(uint64 randomId);

View file

@ -48,15 +48,16 @@ namespace {
} }
} }
class EventFilterForMac : public QObject { class EventFilterForKeys : public QObject {
public: public:
EventFilterForMac(QObject *parent) : QObject(parent) { EventFilterForKeys(QObject *parent) : QObject(parent) {
} }
bool eventFilter(QObject *o, QEvent *e) { bool eventFilter(QObject *o, QEvent *e) {
if (e->type() == QEvent::KeyPress) { if (e->type() == QEvent::KeyPress) {
QKeyEvent *ev = static_cast<QKeyEvent*>(e); QKeyEvent *ev = static_cast<QKeyEvent*>(e);
if (cPlatform() == dbipMac) {
if (ev->key() == Qt::Key_W && (ev->modifiers() & (Qt::MetaModifier | Qt::ControlModifier))) { if (ev->key() == Qt::Key_W && (ev->modifiers() & (Qt::MetaModifier | Qt::ControlModifier))) {
if (cWorkMode() == dbiwmTrayOnly || cWorkMode() == dbiwmWindowAndTray) { if (cWorkMode() == dbiwmTrayOnly || cWorkMode() == dbiwmWindowAndTray) {
App::wnd()->minimizeToTray(); App::wnd()->minimizeToTray();
@ -72,6 +73,20 @@ namespace {
return true; return true;
} }
} }
if (ev->key() == Qt::Key_MediaPlay) {
if (App::main()) App::main()->player()->playPressed();
} else if (ev->key() == Qt::Key_MediaPause) {
if (App::main()) App::main()->player()->pausePressed();
} else if (ev->key() == Qt::Key_MediaTogglePlayPause) {
if (App::main()) App::main()->player()->playPausePressed();
} else if (ev->key() == Qt::Key_MediaStop) {
if (App::main()) App::main()->player()->stopPressed();
} else if (ev->key() == Qt::Key_MediaPrevious) {
if (App::main()) App::main()->player()->prevPressed();
} else if (ev->key() == Qt::Key_MediaNext) {
if (App::main()) App::main()->player()->nextPressed();
}
}
return QObject::eventFilter(o, e); return QObject::eventFilter(o, e);
} }
@ -95,9 +110,7 @@ Application::Application(int &argc, char **argv) : PsApplication(argc, argv),
} }
mainApp = this; mainApp = this;
if (cPlatform() == dbipMac) { installEventFilter(new EventFilterForKeys(this));
installEventFilter(new EventFilterForMac(this));
}
QFontDatabase::addApplicationFont(qsl(":/gui/art/fonts/OpenSans-Regular.ttf")); QFontDatabase::addApplicationFont(qsl(":/gui/art/fonts/OpenSans-Regular.ttf"));
QFontDatabase::addApplicationFont(qsl(":/gui/art/fonts/OpenSans-Bold.ttf")); QFontDatabase::addApplicationFont(qsl(":/gui/art/fonts/OpenSans-Bold.ttf"));
@ -203,7 +216,7 @@ void Application::updateGotCurrent() {
if (updates.exists()) { if (updates.exists()) {
QFileInfoList list = updates.entryInfoList(QDir::Files); QFileInfoList list = updates.entryInfoList(QDir::Files);
for (QFileInfoList::iterator i = list.begin(), e = list.end(); i != e; ++i) { for (QFileInfoList::iterator i = list.begin(), e = list.end(); i != e; ++i) {
if (QRegularExpression("^(tupdate|tmacupd|tlinuxupd|tlinux32upd)\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { if (QRegularExpression("^(tupdate|tmacupd|tmac32upd|tlinuxupd|tlinux32upd)\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) {
QFile(i->absoluteFilePath()).remove(); QFile(i->absoluteFilePath()).remove();
} }
} }
@ -460,7 +473,7 @@ void Application::uploadProfilePhoto(const QImage &tosend, const PeerId &peerId)
PhotoId id = MTP::nonce<PhotoId>(); PhotoId id = MTP::nonce<PhotoId>();
MTPPhoto photo(MTP_photo(MTP_long(id), MTP_long(0), MTP_int(MTP::authedId()), MTP_int(unixtime()), MTP_geoPointEmpty(), MTP_vector<MTPPhotoSize>(photoSizes))); MTPPhoto photo(MTP_photo(MTP_long(id), MTP_long(0), MTP_int(unixtime()), MTP_vector<MTPPhotoSize>(photoSizes)));
QString file, filename; QString file, filename;
int32 filesize = 0; int32 filesize = 0;
@ -500,7 +513,7 @@ void Application::startUpdateCheck(bool forceWait) {
if (updates.exists()) { if (updates.exists()) {
QFileInfoList list = updates.entryInfoList(QDir::Files); QFileInfoList list = updates.entryInfoList(QDir::Files);
for (QFileInfoList::iterator i = list.begin(), e = list.end(); i != e; ++i) { for (QFileInfoList::iterator i = list.begin(), e = list.end(); i != e; ++i) {
if (QRegularExpression("^(tupdate|tmacupd|tlinuxupd|tlinux32upd)\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { if (QRegularExpression("^(tupdate|tmacupd|tmac32upd|tlinuxupd|tlinux32upd)\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) {
sendRequest = true; sendRequest = true;
} }
} }
@ -510,7 +523,11 @@ void Application::startUpdateCheck(bool forceWait) {
if (sendRequest) { if (sendRequest) {
QUrl url(cUpdateURL()); QUrl url(cUpdateURL());
if (DevChannel) url.setQuery("dev=1"); if (cDevVersion()) {
url.setQuery(qsl("version=%1&dev=1").arg(AppVersion));
} else {
url.setQuery(qsl("version=%1").arg(AppVersion));
}
QString u = url.toString(); QString u = url.toString();
QNetworkRequest checkVersion(url); QNetworkRequest checkVersion(url);
if (updateReply) updateReply->deleteLater(); if (updateReply) updateReply->deleteLater();
@ -637,13 +654,12 @@ void Application::socketError(QLocalSocket::LocalSocketError e) {
void Application::checkMapVersion() { void Application::checkMapVersion() {
if (Local::oldMapVersion() < AppVersion) { if (Local::oldMapVersion() < AppVersion) {
psRegisterCustomScheme();
if (Local::oldMapVersion()) { if (Local::oldMapVersion()) {
QString versionFeatures; QString versionFeatures;
if (DevChannel && Local::oldMapVersion() < 8028) { if (cDevVersion() && Local::oldMapVersion() < 8050) {
versionFeatures = lang(lng_new_version_minor);// QString::fromUtf8("\xe2\x80\x94 IPv6 connections support\n\xe2\x80\x94 Bug fixes and minor stuff");// .replace('@', qsl("@") + QChar(0x200D)); versionFeatures = QString::fromUtf8("\xe2\x80\x94 Bug fixes in Windows notifications\n\xe2\x80\x94 Fixed input methods on Linux (Fcitx and IBus)");// .replace('@', qsl("@") + QChar(0x200D));
} else if (!DevChannel && Local::oldMapVersion() < 8024) { } else if (!cDevVersion() && Local::oldMapVersion() < 8051) {
versionFeatures = lng_new_version_text(lt_blog_link, qsl("https://telegram.org/blog/bot-revolution"));// lang(lng_new_version_text).trimmed(); versionFeatures = lang(lng_new_version_text).trimmed();
} }
if (!versionFeatures.isEmpty()) { if (!versionFeatures.isEmpty()) {
versionFeatures = lng_new_version_wrap(lt_version, QString::fromStdWString(AppVersionStr), lt_changes, versionFeatures, lt_link, qsl("https://desktop.telegram.org/#changelog")); versionFeatures = lng_new_version_wrap(lt_version, QString::fromStdWString(AppVersionStr), lt_changes, versionFeatures, lt_link, qsl("https://desktop.telegram.org/#changelog"));

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 KiB

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 219 KiB

After

Width:  |  Height:  |  Size: 220 KiB

File diff suppressed because it is too large Load diff

View file

@ -25,14 +25,19 @@ void audioPlayNotify();
void audioFinish(); void audioFinish();
enum AudioPlayerState { enum AudioPlayerState {
AudioPlayerStopped, AudioPlayerStopped = 0x01,
AudioPlayerStoppedAtStart, AudioPlayerStoppedAtEnd = 0x02,
AudioPlayerStarting, AudioPlayerStoppedAtError = 0x03,
AudioPlayerPlaying, AudioPlayerStoppedAtStart = 0x04,
AudioPlayerFinishing, AudioPlayerStoppedMask = 0x07,
AudioPlayerPausing,
AudioPlayerPaused, AudioPlayerStarting = 0x08,
AudioPlayerResuming, AudioPlayerPlaying = 0x10,
AudioPlayerFinishing = 0x18,
AudioPlayerPausing = 0x20,
AudioPlayerPaused = 0x28,
AudioPlayerPausedAtEnd = 0x30,
AudioPlayerResuming = 0x38,
}; };
class AudioPlayerFader; class AudioPlayerFader;
@ -45,39 +50,68 @@ public:
AudioPlayer(); AudioPlayer();
void play(AudioData *audio); void play(const AudioMsgId &audio, int64 position = 0);
void pauseresume(); void play(const SongMsgId &song, int64 position = 0);
void pauseresume(MediaOverviewType type, bool fast = false);
void seek(int64 position); // type == OverviewDocuments
void stop(MediaOverviewType type);
void currentState(AudioMsgId *audio, AudioPlayerState *state = 0, int64 *position = 0, int64 *duration = 0, int32 *frequency = 0);
void currentState(SongMsgId *song, AudioPlayerState *state = 0, int64 *position = 0, int64 *duration = 0, int32 *frequency = 0);
void clearStoppedAtStart(const AudioMsgId &audio);
void clearStoppedAtStart(const SongMsgId &song);
void currentState(AudioData **audio, AudioPlayerState *state = 0, int64 *position = 0, int64 *duration = 0, int32 *frequency = 0);
void clearStoppedAtStart(AudioData *audio);
void resumeDevice(); void resumeDevice();
~AudioPlayer(); ~AudioPlayer();
public slots: public slots:
void onError(AudioData *audio); void onError(const AudioMsgId &audio);
void onError(const SongMsgId &song);
void onStopped(const AudioMsgId &audio);
void onStopped(const SongMsgId &song);
signals: signals:
void updated(AudioData *audio); void updated(const AudioMsgId &audio);
void stopped(AudioData *audio); void updated(const SongMsgId &song);
void stopped(const AudioMsgId &audio);
void stopped(const SongMsgId &song);
void stoppedOnError(const AudioMsgId &audio);
void stoppedOnError(const SongMsgId &song);
void loaderOnStart(const AudioMsgId &audio, qint64 position);
void loaderOnStart(const SongMsgId &song, qint64 position);
void loaderOnCancel(const AudioMsgId &audio);
void loaderOnCancel(const SongMsgId &song);
void faderOnTimer(); void faderOnTimer();
void loaderOnStart(AudioData *audio);
void loaderOnCancel(AudioData *audio); void suppressSong();
void unsuppressSong();
void suppressAll();
void songVolumeChanged();
private: private:
bool updateCurrentStarted(int32 pos = -1); bool fadedStop(MediaOverviewType type, bool *fadedStart = 0);
bool updateCurrentStarted(MediaOverviewType type, int32 pos = -1);
bool checkCurrentALError(MediaOverviewType type);
struct Msg { struct Msg {
Msg() : audio(0), position(0), duration(0), frequency(AudioVoiceMsgFrequency), skipStart(0), skipEnd(0), loading(0), started(0), Msg() : position(0), duration(0), frequency(AudioVoiceMsgFrequency), skipStart(0), skipEnd(0), loading(0), started(0),
state(AudioPlayerStopped), source(0), nextBuffer(0) { state(AudioPlayerStopped), source(0), nextBuffer(0) {
memset(buffers, 0, sizeof(buffers)); memset(buffers, 0, sizeof(buffers));
memset(samplesCount, 0, sizeof(samplesCount)); memset(samplesCount, 0, sizeof(samplesCount));
} }
AudioData *audio;
QString fname; QString fname;
QByteArray data; QByteArray data;
int64 position, duration; int64 position, duration;
@ -92,9 +126,25 @@ private:
uint32 buffers[3]; uint32 buffers[3];
int64 samplesCount[3]; int64 samplesCount[3];
}; };
struct AudioMsg : public Msg {
AudioMsg() {
}
AudioMsgId audio;
};
struct SongMsg : public Msg {
SongMsg() {
}
SongMsgId song;
};
int32 _current; void currentState(Msg *current, AudioPlayerState *state, int64 *position, int64 *duration, int32 *frequency);
Msg _data[AudioVoiceMsgSimultaneously]; void setStoppedState(Msg *current, AudioPlayerState state = AudioPlayerStopped);
int32 _audioCurrent;
AudioMsg _audioData[AudioVoiceMsgSimultaneously];
int32 _songCurrent;
SongMsg _songData[AudioSongSimultaneously];
QMutex _mutex; QMutex _mutex;
@ -154,10 +204,14 @@ public:
signals: signals:
void error(AudioData *audio); void error(const AudioMsgId &audio);
void playPositionUpdated(AudioData *audio); void error(const SongMsgId &audio);
void audioStopped(AudioData *audio); void playPositionUpdated(const AudioMsgId &audio);
void needToPreload(AudioData *audio); void playPositionUpdated(const SongMsgId &audio);
void audioStopped(const AudioMsgId &audio);
void audioStopped(const SongMsgId &audio);
void needToPreload(const AudioMsgId &audio);
void needToPreload(const SongMsgId &audio);
void stopPauseDevice(); void stopPauseDevice();
@ -168,12 +222,30 @@ public slots:
void onPauseTimer(); void onPauseTimer();
void onPauseTimerStop(); void onPauseTimerStop();
void onSuppressSong();
void onUnsuppressSong();
void onSuppressAll();
void onSongVolumeChanged();
private: private:
enum {
EmitError = 0x01,
EmitStopped = 0x02,
EmitPositionUpdated = 0x04,
EmitNeedToPreload = 0x08,
};
int32 updateOnePlayback(AudioPlayer::Msg *m, bool &hasPlaying, bool &hasFading, float64 suppressGain, bool suppressGainChanged);
void setStoppedState(AudioPlayer::Msg *m, AudioPlayerState state = AudioPlayerStopped);
QTimer _timer, _pauseTimer; QTimer _timer, _pauseTimer;
QMutex _pauseMutex; QMutex _pauseMutex;
bool _pauseFlag, _paused; bool _pauseFlag, _paused;
bool _suppressAll, _suppressAllAnim, _suppressSong, _suppressSongAnim, _songVolumeChanged;
anim::fvalue _suppressAllGain, _suppressSongGain;
uint64 _suppressAllStart, _suppressSongStart;
}; };
class AudioPlayerLoader; class AudioPlayerLoader;
@ -187,22 +259,46 @@ public:
signals: signals:
void error(AudioData *audio); void error(const AudioMsgId &audio);
void error(const SongMsgId &song);
void needToCheck(); void needToCheck();
public slots: public slots:
void onInit(); void onInit();
void onStart(AudioData *audio);
void onLoad(AudioData *audio); void onStart(const AudioMsgId &audio, qint64 position);
void onCancel(AudioData *audio); void onStart(const SongMsgId &audio, qint64 position);
void onLoad(const AudioMsgId &audio);
void onLoad(const SongMsgId &audio);
void onCancel(const AudioMsgId &audio);
void onCancel(const SongMsgId &audio);
private: private:
typedef QMap<AudioData*, AudioPlayerLoader*> Loaders; AudioMsgId _audio;
Loaders _loaders; AudioPlayerLoader *_audioLoader;
void loadError(Loaders::iterator i); SongMsgId _song;
AudioPlayerLoader *_songLoader;
void emitError(MediaOverviewType type);
void clear(MediaOverviewType type);
void setStoppedState(AudioPlayer::Msg *m, AudioPlayerState state = AudioPlayerStopped);
AudioMsgId clearAudio();
SongMsgId clearSong();
enum SetupError {
SetupErrorAtStart = 0,
SetupErrorNotPlaying = 1,
SetupErrorLoadedFull = 2,
SetupNoErrorStarted = 3,
};
void loadData(MediaOverviewType type, const void *objId, qint64 position);
AudioPlayerLoader *setupLoader(MediaOverviewType type, const void *objId, SetupError &err, qint64 position);
AudioPlayer::Msg *checkLoader(MediaOverviewType type);
}; };
@ -239,3 +335,5 @@ private:
QByteArray _captured; QByteArray _captured;
}; };
MTPDocumentAttribute audioReadSongAttributes(const QString &fname, const QByteArray &data, QImage &cover, QByteArray &coverBytes, QByteArray &coverFormat);

View file

@ -256,7 +256,15 @@ void UpdateDownloader::unpackUpdate() {
return fatalFail(); return fatalFail();
} }
RSA *pbKey = PEM_read_bio_RSAPublicKey(BIO_new_mem_buf(const_cast<char*>(DevChannel ? UpdatesPublicDevKey : UpdatesPublicKey), -1), 0, 0, 0); RSA *pbKey = PEM_read_bio_RSAPublicKey(BIO_new_mem_buf(const_cast<char*>(DevVersion ? UpdatesPublicDevKey : UpdatesPublicKey), -1), 0, 0, 0);
if (!pbKey) {
LOG(("Update Error: cant read public rsa key!"));
return fatalFail();
}
if (RSA_verify(NID_sha1, (const uchar*)(compressed.constData() + hSigLen), hShaLen, (const uchar*)(compressed.constData()), hSigLen, pbKey) != 1) { // verify signature
RSA_free(pbKey);
if (cDevVersion()) { // try other public key, if we are in dev version
pbKey = PEM_read_bio_RSAPublicKey(BIO_new_mem_buf(const_cast<char*>(DevVersion ? UpdatesPublicKey : UpdatesPublicDevKey), -1), 0, 0, 0);
if (!pbKey) { if (!pbKey) {
LOG(("Update Error: cant read public rsa key!")); LOG(("Update Error: cant read public rsa key!"));
return fatalFail(); return fatalFail();
@ -266,6 +274,11 @@ void UpdateDownloader::unpackUpdate() {
LOG(("Update Error: bad RSA signature of update file!")); LOG(("Update Error: bad RSA signature of update file!"));
return fatalFail(); return fatalFail();
} }
} else {
LOG(("Update Error: bad RSA signature of update file!"));
return fatalFail();
}
}
RSA_free(pbKey); RSA_free(pbKey);
QByteArray uncompressed; QByteArray uncompressed;

View file

@ -24,7 +24,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
AboutBox::AboutBox() : AboutBox::AboutBox() :
_done(this, lang(lng_about_done), st::aboutCloseButton), _done(this, lang(lng_about_done), st::aboutCloseButton),
_version(this, qsl("[a href=\"https://desktop.telegram.org/#changelog\"]") + textClean(lng_about_version(lt_version, QString::fromWCharArray(AppVersionStr) + (DevChannel ? " dev" : ""))) + qsl("[/a]"), st::aboutVersion, st::defaultTextStyle), _version(this, qsl("[a href=\"https://desktop.telegram.org/#changelog\"]") + textClean(lng_about_version(lt_version, QString::fromWCharArray(AppVersionStr) + (cDevVersion() ? " dev" : ""))) + qsl("[/a]"), st::aboutVersion, st::defaultTextStyle),
_text(this, lang(lng_about_text), st::aboutLabel, st::aboutTextStyle) { _text(this, lang(lng_about_text), st::aboutLabel, st::aboutTextStyle) {
resizeMaxHeight(st::aboutWidth, st::aboutHeight); resizeMaxHeight(st::aboutWidth, st::aboutHeight);

View file

@ -285,7 +285,7 @@ void AddContactBox::onImportDone(const MTPcontacts_ImportedContacts &res) {
} }
if (uid) { if (uid) {
App::main()->addNewContact(uid); App::main()->addNewContact(uid);
App::main()->showPeer(App::peerFromUser(uid)); App::main()->choosePeer(App::peerFromUser(uid), ShowAtUnreadMsgId);
App::wnd()->hideLayer(); App::wnd()->hideLayer();
} else { } else {
_addButton.hide(); _addButton.hide();

View file

@ -56,19 +56,24 @@ void ConfirmBox::init(const QString &text) {
_confirm.hide(); _confirm.hide();
_cancel.hide(); _cancel.hide();
connect(&_close, SIGNAL(clicked()), this, SLOT(onClose())); connect(&_close, SIGNAL(clicked()), this, SLOT(onCancel()));
setMouseTracking(_text.hasLinks()); setMouseTracking(_text.hasLinks());
} else { } else {
_close.hide(); _close.hide();
connect(&_confirm, SIGNAL(clicked()), this, SIGNAL(confirmed())); connect(&_confirm, SIGNAL(clicked()), this, SIGNAL(confirmed()));
connect(&_cancel, SIGNAL(clicked()), this, SLOT(onClose())); connect(&_cancel, SIGNAL(clicked()), this, SLOT(onCancel()));
} }
prepare(); prepare();
} }
void ConfirmBox::onCancel() {
emit cancelPressed();
onClose();
}
void ConfirmBox::mouseMoveEvent(QMouseEvent *e) { void ConfirmBox::mouseMoveEvent(QMouseEvent *e) {
_lastMousePos = e->globalPos(); _lastMousePos = e->globalPos();
updateHover(); updateHover();

View file

@ -35,10 +35,15 @@ public:
void leaveEvent(QEvent *e); void leaveEvent(QEvent *e);
void updateLink(); void updateLink();
public slots:
void onCancel();
signals: signals:
void confirmed(); void confirmed();
void cancelled(); void cancelled();
void cancelPressed();
protected: protected:

View file

@ -33,7 +33,8 @@ ConnectionBox::ConnectionBox() :
_passwordInput(this, st::inpConnectionPassword, lang(lng_connection_password_ph), cConnectionProxy().password), _passwordInput(this, st::inpConnectionPassword, lang(lng_connection_password_ph), cConnectionProxy().password),
_autoRadio(this, qsl("conn_type"), dbictAuto, lang(lng_connection_auto_rb), (cConnectionType() == dbictAuto)), _autoRadio(this, qsl("conn_type"), dbictAuto, lang(lng_connection_auto_rb), (cConnectionType() == dbictAuto)),
_httpProxyRadio(this, qsl("conn_type"), dbictHttpProxy, lang(lng_connection_http_proxy_rb), (cConnectionType() == dbictHttpProxy)), _httpProxyRadio(this, qsl("conn_type"), dbictHttpProxy, lang(lng_connection_http_proxy_rb), (cConnectionType() == dbictHttpProxy)),
_tcpProxyRadio(this, qsl("conn_type"), dbictTcpProxy, lang(lng_connection_tcp_proxy_rb), (cConnectionType() == dbictTcpProxy)) { _tcpProxyRadio(this, qsl("conn_type"), dbictTcpProxy, lang(lng_connection_tcp_proxy_rb), (cConnectionType() == dbictTcpProxy)),
_tryIPv6(this, lang(lng_connection_try_ipv6), cTryIPv6()) {
connect(&_saveButton, SIGNAL(clicked()), this, SLOT(onSave())); connect(&_saveButton, SIGNAL(clicked()), this, SLOT(onSave()));
connect(&_cancelButton, SIGNAL(clicked()), this, SLOT(onClose())); connect(&_cancelButton, SIGNAL(clicked()), this, SLOT(onClose()));
@ -51,6 +52,7 @@ void ConnectionBox::hideAll() {
_autoRadio.hide(); _autoRadio.hide();
_httpProxyRadio.hide(); _httpProxyRadio.hide();
_tcpProxyRadio.hide(); _tcpProxyRadio.hide();
_tryIPv6.hide();
_hostInput.hide(); _hostInput.hide();
_portInput.hide(); _portInput.hide();
@ -65,8 +67,9 @@ void ConnectionBox::showAll() {
_autoRadio.show(); _autoRadio.show();
_httpProxyRadio.show(); _httpProxyRadio.show();
_tcpProxyRadio.show(); _tcpProxyRadio.show();
_tryIPv6.show();
int32 h = st::boxTitleHeight + st::connectionSkip + _autoRadio.height() + st::connectionSkip + _httpProxyRadio.height() + st::connectionSkip + _tcpProxyRadio.height() + st::connectionSkip; int32 h = st::boxTitleHeight + st::connectionSkip + _autoRadio.height() + st::connectionSkip + _httpProxyRadio.height() + st::connectionSkip + _tcpProxyRadio.height() + st::connectionSkip + st::lineWidth + st::connectionSkip + _tryIPv6.height() + st::connectionSkip;
if (_httpProxyRadio.checked() || _tcpProxyRadio.checked()) { if (_httpProxyRadio.checked() || _tcpProxyRadio.checked()) {
h += 2 * st::boxPadding.top() + 2 * _hostInput.height(); h += 2 * st::boxPadding.top() + 2 * _hostInput.height();
_hostInput.show(); _hostInput.show();
@ -99,6 +102,9 @@ void ConnectionBox::paintEvent(QPaintEvent *e) {
paintTitle(p, lang(lng_connection_header), true); paintTitle(p, lang(lng_connection_header), true);
// paint separator
p.fillRect(st::boxPadding.left(), _tryIPv6.y() - st::connectionSkip - st::lineWidth, width() - st::boxPadding.left() - st::boxPadding.right(), st::lineWidth, st::scrollDef.shColor->b);
// paint shadow // paint shadow
p.fillRect(0, height() - st::btnSelectCancel.height - st::scrollDef.bottomsh, width(), st::scrollDef.bottomsh, st::scrollDef.shColor->b); p.fillRect(0, height() - st::btnSelectCancel.height - st::scrollDef.bottomsh, width(), st::scrollDef.bottomsh, st::scrollDef.shColor->b);
@ -128,10 +134,11 @@ void ConnectionBox::resizeEvent(QResizeEvent *e) {
_passwordInput.move(width() - st::boxPadding.right() - _passwordInput.width(), _userInput.y()); _passwordInput.move(width() - st::boxPadding.right() - _passwordInput.width(), _userInput.y());
} }
int32 buttony = (_tcpProxyRadio.checked() ? (_userInput.y() + _userInput.height()) : (_tcpProxyRadio.y() + _tcpProxyRadio.height())) + st::connectionSkip; int32 tryipv6y = (_tcpProxyRadio.checked() ? (_userInput.y() + _userInput.height()) : (_tcpProxyRadio.y() + _tcpProxyRadio.height())) + st::connectionSkip + st::lineWidth + st::connectionSkip;
_tryIPv6.move(st::boxPadding.left(), tryipv6y);
_saveButton.move(width() - _saveButton.width(), buttony); _saveButton.move(width() - _saveButton.width(), _tryIPv6.y() + _tryIPv6.height() + st::connectionSkip);
_cancelButton.move(0, buttony); _cancelButton.move(0, _saveButton.y());
} }
void ConnectionBox::onChange() { void ConnectionBox::onChange() {
@ -172,8 +179,17 @@ void ConnectionBox::onSave() {
QNetworkProxyFactory::setUseSystemConfiguration(false); QNetworkProxyFactory::setUseSystemConfiguration(false);
QNetworkProxyFactory::setUseSystemConfiguration(true); QNetworkProxyFactory::setUseSystemConfiguration(true);
} }
if (cPlatform() == dbipWindows && cTryIPv6() != _tryIPv6.checked()) {
cSetTryIPv6(_tryIPv6.checked());
Local::writeSettings();
cSetRestarting(true);
cSetRestartingToSettings(true);
App::quit();
} else {
cSetTryIPv6(_tryIPv6.checked());
Local::writeSettings(); Local::writeSettings();
MTP::restart(); MTP::restart();
reinitImageLinkManager(); reinitImageLinkManager();
emit closed(); emit closed();
} }
}

View file

@ -47,4 +47,5 @@ private:
PortInput _portInput; PortInput _portInput;
FlatInput _userInput, _passwordInput; FlatInput _userInput, _passwordInput;
FlatRadiobutton _autoRadio, _httpProxyRadio, _tcpProxyRadio; FlatRadiobutton _autoRadio, _httpProxyRadio, _tcpProxyRadio;
FlatCheckbox _tryIPv6;
}; };

View file

@ -60,7 +60,7 @@ _byUsernameSel(-1),
_addContactLnk(this, lang(lng_add_contact_button)) { _addContactLnk(this, lang(lng_add_contact_button)) {
DialogsIndexed &v(App::main()->dialogsList()); DialogsIndexed &v(App::main()->dialogsList());
for (DialogRow *r = v.list.begin; r != v.list.end; r = r->next) { for (DialogRow *r = v.list.begin; r != v.list.end; r = r->next) {
if (r->history->peer->chat && !r->history->peer->asChat()->forbidden) { if (r->history->peer->chat && !r->history->peer->asChat()->forbidden && !r->history->peer->asChat()->left) {
_contacts->addToEnd(r->history); _contacts->addToEnd(r->history);
} }
} }
@ -96,7 +96,7 @@ void ContactsInner::onAddBot() {
MTP::send(MTPmessages_StartBot(_bot->inputUser, MTP_int(App::chatFromPeer(_addToChat->id)), MTP_long(randomId), MTP_string(_bot->botInfo->startGroupToken)), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::addParticipantFail, _bot)); MTP::send(MTPmessages_StartBot(_bot->inputUser, MTP_int(App::chatFromPeer(_addToChat->id)), MTP_long(randomId), MTP_string(_bot->botInfo->startGroupToken)), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::addParticipantFail, _bot));
App::wnd()->hideLayer(); App::wnd()->hideLayer();
App::main()->showPeer(_addToChat->id, 0, false); App::main()->showPeerHistory(_addToChat->id, ShowAtUnreadMsgId);
} else { } else {
App::main()->addParticipants(_addToChat, QVector<UserData*>(1, _bot)); App::main()->addParticipants(_addToChat, QVector<UserData*>(1, _bot));
} }
@ -104,7 +104,7 @@ void ContactsInner::onAddBot() {
void ContactsInner::peerUpdated(PeerData *peer) { void ContactsInner::peerUpdated(PeerData *peer) {
if (_chat && (!peer || peer == _chat)) { if (_chat && (!peer || peer == _chat)) {
if (_chat->forbidden) { if (_chat->forbidden || _chat->left) {
App::wnd()->hideLayer(); App::wnd()->hideLayer();
} else if (!_chat->participants.isEmpty() || _chat->count <= 0) { } else if (!_chat->participants.isEmpty() || _chat->count <= 0) {
for (ContactsData::iterator i = _contactsData.begin(), e = _contactsData.end(); i != e; ++i) { for (ContactsData::iterator i = _contactsData.begin(), e = _contactsData.end(); i != e; ++i) {
@ -180,11 +180,11 @@ ContactsInner::ContactData *ContactsInner::contactData(DialogRow *row) {
if (i == _contactsData.cend()) { if (i == _contactsData.cend()) {
_contactsData.insert(peer, data = new ContactData()); _contactsData.insert(peer, data = new ContactData());
data->inchat = (_chat && !peer->chat) ? _chat->participants.contains(peer->asUser()) : false; data->inchat = (_chat && !peer->chat) ? _chat->participants.contains(peer->asUser()) : false;
data->check = false; data->check = _checkedContacts.contains(peer);
data->name.setText(st::profileListNameFont, peer->name, _textNameOptions); data->name.setText(st::profileListNameFont, peer->name, _textNameOptions);
if (peer->chat) { if (peer->chat) {
ChatData *chat = peer->asChat(); ChatData *chat = peer->asChat();
if (chat->forbidden) { if (chat->forbidden || chat->left) {
data->online = lang(lng_chat_status_unaccessible); data->online = lang(lng_chat_status_unaccessible);
} else { } else {
data->online = lng_chat_status_members(lt_count, chat->count); data->online = lng_chat_status_members(lt_count, chat->count);
@ -249,7 +249,7 @@ void ContactsInner::paintDialog(QPainter &p, PeerData *peer, ContactData *data,
} else { } else {
if (data->inchat || data->check) { if (data->inchat || data->check) {
p.setPen(st::white->p); p.setPen(st::white->p);
} else if (user && (uname || App::onlineColorUse(user->onlineTill, _time))) { } else if (user && (uname || App::onlineColorUse(user, _time))) {
p.setPen(st::profileOnlineColor->p); p.setPen(st::profileOnlineColor->p);
} else { } else {
p.setPen(st::profileOfflineColor->p); p.setPen(st::profileOfflineColor->p);
@ -401,7 +401,7 @@ void ContactsInner::chooseParticipant() {
if (_filter.isEmpty()) { if (_filter.isEmpty()) {
if (_byUsernameSel >= 0 && _byUsernameSel < _byUsername.size()) { if (_byUsernameSel >= 0 && _byUsernameSel < _byUsername.size()) {
if (d_byUsername[_byUsernameSel]->inchat) return; if (d_byUsername[_byUsernameSel]->inchat) return;
changeCheckState(d_byUsername[_byUsernameSel]); changeCheckState(d_byUsername[_byUsernameSel], _byUsername[_byUsernameSel]);
} else { } else {
if (!_sel || contactData(_sel)->inchat) return; if (!_sel || contactData(_sel)->inchat) return;
changeCheckState(_sel); changeCheckState(_sel);
@ -409,7 +409,7 @@ void ContactsInner::chooseParticipant() {
} else { } else {
if (_byUsernameSel >= 0 && _byUsernameSel < _byUsernameFiltered.size()) { if (_byUsernameSel >= 0 && _byUsernameSel < _byUsernameFiltered.size()) {
if (d_byUsernameFiltered[_byUsernameSel]->inchat) return; if (d_byUsernameFiltered[_byUsernameSel]->inchat) return;
changeCheckState(d_byUsernameFiltered[_byUsernameSel]); changeCheckState(d_byUsernameFiltered[_byUsernameSel], _byUsernameFiltered[_byUsernameSel]);
ContactData *moving = d_byUsernameFiltered[_byUsernameSel]; ContactData *moving = d_byUsernameFiltered[_byUsernameSel];
int32 i = 0, l = d_byUsername.size(); int32 i = 0, l = d_byUsername.size();
@ -461,7 +461,7 @@ void ContactsInner::chooseParticipant() {
App::wnd()->replaceLayer(box); App::wnd()->replaceLayer(box);
} else { } else {
App::wnd()->hideSettings(true); App::wnd()->hideSettings(true);
App::main()->showPeer(peer->id, 0, false, true); App::main()->choosePeer(peer->id, ShowAtUnreadMsgId);
App::wnd()->hideLayer(); App::wnd()->hideLayer();
} }
} }
@ -470,15 +470,17 @@ void ContactsInner::chooseParticipant() {
} }
void ContactsInner::changeCheckState(DialogRow *row) { void ContactsInner::changeCheckState(DialogRow *row) {
changeCheckState(contactData(row)); changeCheckState(contactData(row), row->history->peer);
} }
void ContactsInner::changeCheckState(ContactData *data) { void ContactsInner::changeCheckState(ContactData *data, PeerData *peer) {
if (data->check) { if (data->check) {
data->check = false; data->check = false;
_checkedContacts.remove(peer);
--_selCount; --_selCount;
} else if (_selCount + (_chat ? _chat->count : 0) < cMaxGroupCount()) { } else if (_selCount + (_chat ? _chat->count : 0) < cMaxGroupCount()) {
data->check = true; data->check = true;
_checkedContacts.insert(peer, true);
++_selCount; ++_selCount;
} }
} }
@ -693,7 +695,7 @@ void ContactsInner::peopleReceived(const QString &query, const QVector<MTPContac
ContactData *d = new ContactData(); ContactData *d = new ContactData();
_byUsernameDatas.push_back(d); _byUsernameDatas.push_back(d);
d->inchat = _chat ? _chat->participants.contains(u) : false; d->inchat = _chat ? _chat->participants.contains(u) : false;
d->check = false; d->check = _checkedContacts.contains(u);
d->name.setText(st::profileListNameFont, u->name, _textNameOptions); d->name.setText(st::profileListNameFont, u->name, _textNameOptions);
d->online = '@' + u->username; d->online = '@' + u->username;
@ -880,6 +882,11 @@ void ContactsInner::selectSkipPage(int32 h, int32 dir) {
QVector<UserData*> ContactsInner::selected() { QVector<UserData*> ContactsInner::selected() {
QVector<UserData*> result; QVector<UserData*> result;
for (DialogRow *row = _contacts->list.begin; row->next; row = row->next) {
if (_checkedContacts.contains(row->history->peer)) {
contactData(row); // fill _contactsData
}
}
result.reserve(_contactsData.size()); result.reserve(_contactsData.size());
for (ContactsData::const_iterator i = _contactsData.cbegin(), e = _contactsData.cend(); i != e; ++i) { for (ContactsData::const_iterator i = _contactsData.cbegin(), e = _contactsData.cend(); i != e; ++i) {
if (i.value()->check && !i.key()->chat) { if (i.value()->check && !i.key()->chat) {
@ -896,10 +903,15 @@ QVector<UserData*> ContactsInner::selected() {
QVector<MTPInputUser> ContactsInner::selectedInputs() { QVector<MTPInputUser> ContactsInner::selectedInputs() {
QVector<MTPInputUser> result; QVector<MTPInputUser> result;
for (DialogRow *row = _contacts->list.begin; row->next; row = row->next) {
if (_checkedContacts.contains(row->history->peer)) {
contactData(row); // fill _contactsData
}
}
result.reserve(_contactsData.size()); result.reserve(_contactsData.size());
for (ContactsData::const_iterator i = _contactsData.cbegin(), e = _contactsData.cend(); i != e; ++i) { for (ContactsData::const_iterator i = _contactsData.cbegin(), e = _contactsData.cend(); i != e; ++i) {
if (i.value()->check && !i.key()->chat) { if (i.value()->check && !i.key()->chat) {
result.push_back(i.key()->inputUser); result.push_back(i.key()->asUser()->inputUser);
} }
} }
for (int32 i = 0, l = _byUsername.size(); i < l; ++i) { for (int32 i = 0, l = _byUsername.size(); i < l; ++i) {
@ -911,6 +923,11 @@ QVector<MTPInputUser> ContactsInner::selectedInputs() {
} }
PeerData *ContactsInner::selectedUser() { PeerData *ContactsInner::selectedUser() {
for (DialogRow *row = _contacts->list.begin; row->next; row = row->next) {
if (_checkedContacts.contains(row->history->peer)) {
contactData(row); // fill _contactsData
}
}
for (ContactsData::const_iterator i = _contactsData.cbegin(), e = _contactsData.cend(); i != e; ++i) { for (ContactsData::const_iterator i = _contactsData.cbegin(), e = _contactsData.cend(); i != e; ++i) {
if (i.value()->check) { if (i.value()->check) {
return i.key(); return i.key();
@ -1149,7 +1166,7 @@ void ContactsBox::onNext() {
_filter.setFocus(); _filter.setFocus();
_filter.notaBene(); _filter.notaBene();
} else if (v.size() == 1) { } else if (v.size() == 1) {
App::main()->showPeer(_inner.selectedUser()->id); App::main()->showPeerHistory(_inner.selectedUser()->id, ShowAtUnreadMsgId);
} else { } else {
App::wnd()->replaceLayer(new CreateGroupBox(users)); App::wnd()->replaceLayer(new CreateGroupBox(users));
} }
@ -1258,7 +1275,7 @@ void CreateGroupBox::created(const MTPUpdates &updates) {
} break; } break;
} }
if (v && !v->isEmpty() && v->front().type() == mtpc_chat) { if (v && !v->isEmpty() && v->front().type() == mtpc_chat) {
App::main()->showPeer(App::peerFromChat(v->front().c_chat().vid.v)); App::main()->choosePeer(App::peerFromChat(v->front().c_chat().vid.v), ShowAtUnreadMsgId);
} }
} }

View file

@ -53,7 +53,7 @@ public:
void loadProfilePhotos(int32 yFrom); void loadProfilePhotos(int32 yFrom);
void chooseParticipant(); void chooseParticipant();
void changeCheckState(DialogRow *row); void changeCheckState(DialogRow *row);
void changeCheckState(ContactData *data); void changeCheckState(ContactData *data, PeerData *peer);
void peopleReceived(const QString &query, const QVector<MTPContactFound> &people); void peopleReceived(const QString &query, const QVector<MTPContactFound> &people);
@ -109,6 +109,8 @@ private:
}; };
typedef QMap<PeerData*, ContactData*> ContactsData; typedef QMap<PeerData*, ContactData*> ContactsData;
ContactsData _contactsData; ContactsData _contactsData;
typedef QMap<PeerData*, bool> CheckedContacts;
CheckedContacts _checkedContacts;
ContactData *contactData(DialogRow *row); ContactData *contactData(DialogRow *row);

View file

@ -61,7 +61,8 @@ PhotoSendBox::PhotoSendBox(const ReadyLocalMedia &img) : _img(new ReadyLocalMedi
} }
resizeMaxHeight(st::boxWidth, _thumbh + st::boxPadding.top() + st::boxFont->height + st::boxPadding.bottom() + st::boxPadding.bottom() + _compressed.height() + _sendButton.height()); resizeMaxHeight(st::boxWidth, _thumbh + st::boxPadding.top() + st::boxFont->height + st::boxPadding.bottom() + st::boxPadding.bottom() + _compressed.height() + _sendButton.height());
_thumb = QPixmap::fromImage(_thumb.toImage().scaled(_thumbw, _thumbh, Qt::IgnoreAspectRatio, Qt::SmoothTransformation), Qt::ColorOnly); _thumb = QPixmap::fromImage(_thumb.toImage().scaled(_thumbw * cIntRetinaFactor(), _thumbh * cIntRetinaFactor(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation), Qt::ColorOnly);
_thumb.setDevicePixelRatio(cRetinaFactor());
} else { } else {
_compressed.hide(); _compressed.hide();
if (!_img->photoThumbs.isEmpty()) { if (!_img->photoThumbs.isEmpty()) {
@ -189,7 +190,11 @@ void PhotoSendBox::hideAll() {
void PhotoSendBox::showAll() { void PhotoSendBox::showAll() {
_sendButton.show(); _sendButton.show();
_cancelButton.show(); _cancelButton.show();
if (_img && _img->type == ToPreparePhoto) {
_compressed.show(); _compressed.show();
} else {
_compressed.hide();
}
} }
void PhotoSendBox::onSend(bool ctrlShiftEnter) { void PhotoSendBox::onSend(bool ctrlShiftEnter) {

View file

@ -264,12 +264,12 @@ void SessionsBox::gotAuthorizations(const MTPaccount_Authorizations &result) {
QString appName, appVer = qs(d.vapp_version), systemVer = qs(d.vsystem_version), deviceModel = qs(d.vdevice_model); QString appName, appVer = qs(d.vapp_version), systemVer = qs(d.vsystem_version), deviceModel = qs(d.vdevice_model);
if (d.vapi_id.v == 2040 || d.vapi_id.v == 17349) { if (d.vapi_id.v == 2040 || d.vapi_id.v == 17349) {
appName = (d.vapi_id.v == 2040) ? qsl("Telegram Desktop") : qsl("Telegram Desktop (GitHub)"); appName = (d.vapi_id.v == 2040) ? qstr("Telegram Desktop") : qstr("Telegram Desktop (GitHub)");
// if (systemVer == QLatin1String("windows")) { // if (systemVer == qstr("windows")) {
// deviceModel = qsl("Windows"); // deviceModel = qsl("Windows");
// } else if (systemVer == QLatin1String("os x")) { // } else if (systemVer == qstr("os x")) {
// deviceModel = qsl("OS X"); // deviceModel = qsl("OS X");
// } else if (systemVer == QLatin1String("linux")) { // } else if (systemVer == qstr("linux")) {
// deviceModel = qsl("Linux"); // deviceModel = qsl("Linux");
// } // }
if (appVer == QString::number(appVer.toInt())) { if (appVer == QString::number(appVer.toInt())) {
@ -293,7 +293,7 @@ void SessionsBox::gotAuthorizations(const MTPaccount_Authorizations &result) {
MTPint active = d.vdate_active.v ? d.vdate_active : d.vdate_created; MTPint active = d.vdate_active.v ? d.vdate_active : d.vdate_created;
data.activeTime = active.v; data.activeTime = active.v;
data.info = qs(d.vdevice_model) + QLatin1String(", ") + (platform.isEmpty() ? QString() : platform + ' ') + qs(d.vsystem_version); data.info = qs(d.vdevice_model) + qstr(", ") + (platform.isEmpty() ? QString() : platform + ' ') + qs(d.vsystem_version);
data.ip = qs(d.vip) + (country.isEmpty() ? QString() : QString::fromUtf8(" \xe2\x80\x93 ") + country); data.ip = qs(d.vip) + (country.isEmpty() ? QString() : QString::fromUtf8(" \xe2\x80\x93 ") + country);
if (!data.hash || (d.vflags.v & 1)) { if (!data.hash || (d.vflags.v & 1)) {
data.active = QString(); data.active = QString();

View file

@ -27,7 +27,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
#include "localstorage.h" #include "localstorage.h"
StickerSetInner::StickerSetInner(const MTPInputStickerSet &set) : StickerSetInner::StickerSetInner(const MTPInputStickerSet &set) :
_loaded(false), _setId(0), _setAccess(0), _bottom(0), _loaded(false), _setId(0), _setAccess(0), _setCount(0), _setHash(0), _setFlags(0), _bottom(0),
_input(set), _installRequest(0) { _input(set), _installRequest(0) {
switch (set.type()) { switch (set.type()) {
case mtpc_inputStickerSetID: _setId = set.c_inputStickerSetID().vid.v; _setAccess = set.c_inputStickerSetID().vaccess_hash.v; break; case mtpc_inputStickerSetID: _setId = set.c_inputStickerSetID().vid.v; _setAccess = set.c_inputStickerSetID().vaccess_hash.v; break;
@ -46,7 +46,7 @@ void StickerSetInner::gotSet(const MTPmessages_StickerSet &set) {
_pack.reserve(v.size()); _pack.reserve(v.size());
for (int32 i = 0, l = v.size(); i < l; ++i) { for (int32 i = 0, l = v.size(); i < l; ++i) {
DocumentData *doc = App::feedDocument(v.at(i)); DocumentData *doc = App::feedDocument(v.at(i));
if (!doc || !doc->sticker) continue; if (!doc || !doc->sticker()) continue;
_pack.push_back(doc); _pack.push_back(doc);
} }
@ -57,10 +57,13 @@ void StickerSetInner::gotSet(const MTPmessages_StickerSet &set) {
_setShortName = qs(s.vshort_name); _setShortName = qs(s.vshort_name);
_setId = s.vid.v; _setId = s.vid.v;
_setAccess = s.vaccess_hash.v; _setAccess = s.vaccess_hash.v;
_setCount = s.vcount.v;
_setHash = s.vhash.v;
_setFlags = s.vflags.v;
} }
} }
if (_pack.isEmpty() || _setShortName.isEmpty()) { if (_pack.isEmpty()) {
App::wnd()->showLayer(new ConfirmBox(lang(lng_stickers_not_found), true), true); App::wnd()->showLayer(new ConfirmBox(lang(lng_stickers_not_found), true), true);
} else { } else {
int32 rows = _pack.size() / StickerPanPerRow + ((_pack.size() % StickerPanPerRow) ? 1 : 0); int32 rows = _pack.size() / StickerPanPerRow + ((_pack.size() % StickerPanPerRow) ? 1 : 0);
@ -84,13 +87,25 @@ bool StickerSetInner::failedSet(const RPCError &error) {
void StickerSetInner::installDone(const MTPBool &result) { void StickerSetInner::installDone(const MTPBool &result) {
StickerSets &sets(cRefStickerSets()); StickerSets &sets(cRefStickerSets());
sets.insert(_setId, StickerSet(_setId, _setAccess, _setTitle, _setShortName)).value().stickers = _pack; sets.insert(_setId, StickerSet(_setId, _setAccess, _setTitle, _setShortName, _setCount, _setHash, _setFlags)).value().stickers = _pack;
int32 index = cStickerSetsOrder().indexOf(_setId);
if (index > 0) { int32 insertAtIndex = 0;
cRefStickerSetsOrder().removeAt(index); StickerSetsOrder &order(cRefStickerSetsOrder());
cRefStickerSetsOrder().push_front(_setId); for (int32 s = order.size(); insertAtIndex < s; ++insertAtIndex) {
} else if (index < 0) { StickerSets::const_iterator i = sets.constFind(order.at(insertAtIndex));
cRefStickerSetsOrder().push_front(_setId); if (i == sets.cend() || !(i->flags & MTPDstickerSet_flag_official)) {
break;
}
}
int32 currentIndex = cStickerSetsOrder().indexOf(_setId);
if (currentIndex != insertAtIndex) {
if (currentIndex > 0) {
order.removeAt(currentIndex);
if (currentIndex < insertAtIndex) {
--insertAtIndex;
}
}
order.insert(insertAtIndex, _setId);
} }
StickerSets::iterator custom = sets.find(CustomStickerSetId); StickerSets::iterator custom = sets.find(CustomStickerSetId);
@ -141,11 +156,11 @@ void StickerSetInner::paintEvent(QPaintEvent *e) {
if (!doc->loader && doc->status != FileFailed && !already && !hasdata) { if (!doc->loader && doc->status != FileFailed && !already && !hasdata) {
doc->save(QString()); doc->save(QString());
} }
if (doc->sticker->img->isNull() && (already || hasdata)) { if (doc->sticker()->img->isNull() && (already || hasdata)) {
if (already) { if (already) {
doc->sticker->img = ImagePtr(doc->already()); doc->sticker()->img = ImagePtr(doc->already());
} else { } else {
doc->sticker->img = ImagePtr(doc->data); doc->sticker()->img = ImagePtr(doc->data);
} }
} }
} }
@ -158,8 +173,8 @@ void StickerSetInner::paintEvent(QPaintEvent *e) {
QPoint ppos = pos + QPoint((st::stickersSize.width() - w) / 2, (st::stickersSize.height() - h) / 2); QPoint ppos = pos + QPoint((st::stickersSize.width() - w) / 2, (st::stickersSize.height() - h) / 2);
if (goodThumb) { if (goodThumb) {
p.drawPixmapLeft(ppos, width(), doc->thumb->pix(w, h)); p.drawPixmapLeft(ppos, width(), doc->thumb->pix(w, h));
} else if (!doc->sticker->img->isNull()) { } else if (!doc->sticker()->img->isNull()) {
p.drawPixmapLeft(ppos, width(), doc->sticker->img->pix(w, h)); p.drawPixmapLeft(ppos, width(), doc->sticker()->img->pix(w, h));
} }
} }
} }
@ -183,6 +198,10 @@ int32 StickerSetInner::notInstalled() const {
return (_loaded && (cStickerSets().constFind(_setId) == cStickerSets().cend())) ? _pack.size() : 0; return (_loaded && (cStickerSets().constFind(_setId) == cStickerSets().cend())) ? _pack.size() : 0;
} }
bool StickerSetInner::official() const {
return _loaded && _setShortName.isEmpty();
}
QString StickerSetInner::title() const { QString StickerSetInner::title() const {
return _loaded ? (_pack.isEmpty() ? lang(lng_attach_failed) : _title) : lang(lng_contacts_loading); return _loaded ? (_pack.isEmpty() ? lang(lng_attach_failed) : _title) : lang(lng_contacts_loading);
} }
@ -193,7 +212,7 @@ QString StickerSetInner::shortName() const {
void StickerSetInner::install() { void StickerSetInner::install() {
if (_installRequest) return; if (_installRequest) return;
_installRequest = MTP::send(MTPmessages_InstallStickerSet(_input), rpcDone(&StickerSetInner::installDone), rpcFail(&StickerSetInner::installFailed)); _installRequest = MTP::send(MTPmessages_InstallStickerSet(_input, MTP_bool(false)), rpcDone(&StickerSetInner::installDone), rpcFail(&StickerSetInner::installFailed));
} }
StickerSetInner::~StickerSetInner() { StickerSetInner::~StickerSetInner() {
@ -202,7 +221,8 @@ StickerSetInner::~StickerSetInner() {
StickerSetBox::StickerSetBox(const MTPInputStickerSet &set) : ScrollableBox(st::stickersScroll), _inner(set), StickerSetBox::StickerSetBox(const MTPInputStickerSet &set) : ScrollableBox(st::stickersScroll), _inner(set),
_close(this, st::btnStickersClose), _close(this, st::btnStickersClose),
_addStickers(this, lng_stickers_add_pack(lt_count, 0), st::btnStickersAdd), _addStickers(this, lng_stickers_add_pack(lt_count, 0), st::btnStickersAdd),
_shareStickers(this, lang(lng_stickers_share_pack), st::btnStickersAdd) { _shareStickers(this, lang(lng_stickers_share_pack), st::btnStickersAdd),
_closeStickers(this, lang(lng_close), st::btnStickersAdd) {
resize(st::stickersWidth, height()); resize(st::stickersWidth, height());
setMaxHeight(st::stickersMaxHeight); setMaxHeight(st::stickersMaxHeight);
connect(App::main(), SIGNAL(stickersUpdated()), this, SLOT(onStickersUpdated())); connect(App::main(), SIGNAL(stickersUpdated()), this, SLOT(onStickersUpdated()));
@ -212,6 +232,7 @@ _shareStickers(this, lang(lng_stickers_share_pack), st::btnStickersAdd) {
connect(&_close, SIGNAL(clicked()), this, SLOT(onClose())); connect(&_close, SIGNAL(clicked()), this, SLOT(onClose()));
connect(&_addStickers, SIGNAL(clicked()), this, SLOT(onAddStickers())); connect(&_addStickers, SIGNAL(clicked()), this, SLOT(onAddStickers()));
connect(&_shareStickers, SIGNAL(clicked()), this, SLOT(onShareStickers())); connect(&_shareStickers, SIGNAL(clicked()), this, SLOT(onShareStickers()));
connect(&_closeStickers, SIGNAL(clicked()), this, SLOT(onClose()));
connect(&_inner, SIGNAL(updateButtons()), this, SLOT(onUpdateButtons())); connect(&_inner, SIGNAL(updateButtons()), this, SLOT(onUpdateButtons()));
connect(&_scroll, SIGNAL(scrolled()), this, SLOT(onScroll())); connect(&_scroll, SIGNAL(scrolled()), this, SLOT(onScroll()));
@ -235,7 +256,6 @@ void StickerSetBox::onAddStickers() {
void StickerSetBox::onShareStickers() { void StickerSetBox::onShareStickers() {
QString url = qsl("https://telegram.me/addstickers/") + _inner.shortName(); QString url = qsl("https://telegram.me/addstickers/") + _inner.shortName();
DEBUG_LOG(("Setting text to clipboard from stickerset box: %1").arg(url));
QApplication::clipboard()->setText(url); QApplication::clipboard()->setText(url);
App::wnd()->showLayer(new ConfirmBox(lang(lng_stickers_copied), true), true); App::wnd()->showLayer(new ConfirmBox(lang(lng_stickers_copied), true), true);
} }
@ -260,19 +280,26 @@ void StickerSetBox::showAll() {
_close.show(); _close.show();
int32 cnt = _inner.notInstalled(); int32 cnt = _inner.notInstalled();
if (_inner.loaded()) { if (_inner.loaded()) {
if (_inner.notInstalled()) { if (_inner.official()) {
_addStickers.hide();
_shareStickers.hide();
_closeStickers.show();
} else if (_inner.notInstalled()) {
_addStickers.setText(lng_stickers_add_pack(lt_count, cnt)); _addStickers.setText(lng_stickers_add_pack(lt_count, cnt));
_addStickers.show(); _addStickers.show();
_addStickers.raise(); _addStickers.raise();
_shareStickers.hide(); _shareStickers.hide();
_closeStickers.hide();
} else { } else {
_shareStickers.show(); _shareStickers.show();
_shareStickers.raise(); _shareStickers.raise();
_addStickers.hide(); _addStickers.hide();
_closeStickers.hide();
} }
} else { } else {
_addStickers.hide(); _addStickers.hide();
_shareStickers.hide(); _shareStickers.hide();
_closeStickers.hide();
} }
update(); update();
} }
@ -290,4 +317,5 @@ void StickerSetBox::resizeEvent(QResizeEvent *e) {
_close.moveToRight(0, 0, width()); _close.moveToRight(0, 0, width());
_addStickers.move((width() - _addStickers.width()) / 2, height() - (st::stickersAddOrShare + _addStickers.height()) / 2); _addStickers.move((width() - _addStickers.width()) / 2, height() - (st::stickersAddOrShare + _addStickers.height()) / 2);
_shareStickers.move((width() - _shareStickers.width()) / 2, height() - (st::stickersAddOrShare + _shareStickers.height()) / 2); _shareStickers.move((width() - _shareStickers.width()) / 2, height() - (st::stickersAddOrShare + _shareStickers.height()) / 2);
_closeStickers.move((width() - _closeStickers.width()) / 2, height() - (st::stickersAddOrShare + _closeStickers.height()) / 2);
} }

View file

@ -32,6 +32,7 @@ public:
bool loaded() const; bool loaded() const;
int32 notInstalled() const; int32 notInstalled() const;
bool official() const;
QString title() const; QString title() const;
QString shortName() const; QString shortName() const;
@ -57,6 +58,7 @@ private:
bool _loaded; bool _loaded;
uint64 _setId, _setAccess; uint64 _setId, _setAccess;
QString _title, _setTitle, _setShortName; QString _title, _setTitle, _setShortName;
int32 _setCount, _setHash, _setFlags;
int32 _bottom; int32 _bottom;
MTPInputStickerSet _input; MTPInputStickerSet _input;
@ -96,5 +98,5 @@ private:
StickerSetInner _inner; StickerSetInner _inner;
IconedButton _close; IconedButton _close;
FlatButton _addStickers, _shareStickers; FlatButton _addStickers, _shareStickers, _closeStickers;
}; };

View file

@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
*/ */
#pragma once #pragma once
static const int32 AppVersion = 8028; static const int32 AppVersion = 8051;
static const wchar_t *AppVersionStr = L"0.8.28"; static const wchar_t *AppVersionStr = L"0.8.51";
static const bool DevChannel = true; static const bool DevVersion = false;
static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)";
static const wchar_t *AppName = L"Telegram Desktop"; static const wchar_t *AppName = L"Telegram Desktop";
@ -85,9 +85,10 @@ enum {
MediaOverviewPreloadCount = 4, MediaOverviewPreloadCount = 4,
AudioVoiceMsgSimultaneously = 4, AudioVoiceMsgSimultaneously = 4,
AudioSongSimultaneously = 4,
AudioCheckPositionTimeout = 100, // 100ms per check audio pos AudioCheckPositionTimeout = 100, // 100ms per check audio pos
AudioCheckPositionDelta = 4800, // update position called each 4800 samples AudioCheckPositionDelta = 2400, // update position called each 2400 samples
AudioFadeTimeout = 10, // 10ms AudioFadeTimeout = 7, // 7ms
AudioFadeDuration = 500, AudioFadeDuration = 500,
AudioVoiceMsgSkip = 400, // 200ms AudioVoiceMsgSkip = 400, // 200ms
AudioVoiceMsgFade = 300, // 300ms AudioVoiceMsgFade = 300, // 300ms
@ -100,7 +101,7 @@ enum {
AudioVoiceMsgInMemory = 1024 * 1024, // 1 Mb audio is hold in memory and auto loaded AudioVoiceMsgInMemory = 1024 * 1024, // 1 Mb audio is hold in memory and auto loaded
AudioPauseDeviceTimeout = 3000, // pause in 3 secs after playing is over AudioPauseDeviceTimeout = 3000, // pause in 3 secs after playing is over
StickerInMemory = 256 * 1024, // 128 Kb stickers hold in memory, auto loaded and displayed inline StickerInMemory = 1024 * 1024, // 1024 Kb stickers hold in memory, auto loaded and displayed inline
StickerMaxSize = 2048, // 2048x2048 is a max image size for sticker StickerMaxSize = 2048, // 2048x2048 is a max image size for sticker
MediaViewImageSizeLimit = 100 * 1024 * 1024, // show up to 100mb jpg/png/gif docs in app MediaViewImageSizeLimit = 100 * 1024 * 1024, // show up to 100mb jpg/png/gif docs in app
@ -139,12 +140,18 @@ enum {
WrongPasscodeTimeout = 1500, WrongPasscodeTimeout = 1500,
SessionsShortPollTimeout = 60000, SessionsShortPollTimeout = 60000,
ChoosePeerByDragTimeout = 1000, // 1 second mouse not moved to choose dialog when dragging a file
}; };
inline bool isServiceUser(uint64 id) { inline bool isNotificationsUser(uint64 id) {
return (id == 333000) || (id == ServiceUserId); return (id == 333000) || (id == ServiceUserId);
} }
inline bool isServiceUser(uint64 id) {
return !(id % 1000);// (id == 333000) || (id == ServiceUserId);
}
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
inline const GUID &cGUID() { inline const GUID &cGUID() {
static const GUID gGuid = { 0x87a94ab0, 0xe370, 0x4cde, { 0x98, 0xd3, 0xac, 0xc1, 0x10, 0xc5, 0x96, 0x7d } }; static const GUID gGuid = { 0x87a94ab0, 0xe370, 0x4cde, { 0x98, 0xd3, 0xac, 0xc1, 0x10, 0xc5, 0x96, 0x7d } };
@ -288,7 +295,7 @@ enum {
DefaultChatBackground = 21, DefaultChatBackground = 21,
DialogsFirstLoad = 20, // first dialogs part size requested DialogsFirstLoad = 20, // first dialogs part size requested
DialogsPerPage = 40, // next dialogs part size DialogsPerPage = 200, // next dialogs part size
MessagesFirstLoad = 30, // first history part size requested MessagesFirstLoad = 30, // first history part size requested
MessagesPerPage = 50, // next history part size MessagesPerPage = 50, // next history part size
@ -318,6 +325,7 @@ enum {
MemoryForImageCache = 64 * 1024 * 1024, // after 64mb of unpacked images we try to clear some memory MemoryForImageCache = 64 * 1024 * 1024, // after 64mb of unpacked images we try to clear some memory
NotifyWindowsCount = 3, // 3 desktop notifies at the same time NotifyWindowsCount = 3, // 3 desktop notifies at the same time
NotifySettingSaveTimeout = 1000, // wait 1 second before saving notify setting to server NotifySettingSaveTimeout = 1000, // wait 1 second before saving notify setting to server
NotifyDeletePhotoAfter = 60000, // delete notify photo after 1 minute
UpdateChunk = 100 * 1024, // 100kb parts when downloading the update UpdateChunk = 100 * 1024, // 100kb parts when downloading the update
IdleMsecs = 60 * 1000, // after 60secs without user input we think we are idle IdleMsecs = 60 * 1000, // after 60secs without user input we think we are idle
@ -325,7 +333,7 @@ enum {
}; };
inline const QRegularExpression &cWordSplit() { inline const QRegularExpression &cWordSplit() {
static QRegularExpression regexp(qsl("[\\s\\-\\+\\)\\(\\,\\.\\:\\!\\_\\;\\\"\\'\\x0]")); static QRegularExpression regexp(qsl("[\\@\\s\\-\\+\\)\\(\\,\\.\\:\\!\\_\\;\\\"\\'\\x0]"));
return regexp; return regexp;
} }

View file

@ -42,12 +42,16 @@ peopleSel(-1),
_lastSearchId(0), _lastSearchId(0),
_state(DefaultState), _state(DefaultState),
_addContactLnk(this, lang(lng_add_contact_button)), _addContactLnk(this, lang(lng_add_contact_button)),
_overDelete(false) { _cancelSearchInPeer(this, st::btnCancelSearch),
_overDelete(false),
_searchInPeer(0) {
connect(main, SIGNAL(dialogToTop(const History::DialogLinks&)), this, SLOT(onDialogToTop(const History::DialogLinks&))); connect(main, SIGNAL(dialogToTop(const History::DialogLinks&)), this, SLOT(onDialogToTop(const History::DialogLinks&)));
connect(main, SIGNAL(peerNameChanged(PeerData*,const PeerData::Names&,const PeerData::NameFirstChars&)), this, SLOT(onPeerNameChanged(PeerData*,const PeerData::Names&,const PeerData::NameFirstChars&))); connect(main, SIGNAL(peerNameChanged(PeerData*,const PeerData::Names&,const PeerData::NameFirstChars&)), this, SLOT(onPeerNameChanged(PeerData*,const PeerData::Names&,const PeerData::NameFirstChars&)));
connect(main, SIGNAL(peerPhotoChanged(PeerData*)), this, SLOT(onPeerPhotoChanged(PeerData*))); connect(main, SIGNAL(peerPhotoChanged(PeerData*)), this, SLOT(onPeerPhotoChanged(PeerData*)));
connect(main, SIGNAL(dialogRowReplaced(DialogRow*,DialogRow*)), this, SLOT(onDialogRowReplaced(DialogRow*,DialogRow*))); connect(main, SIGNAL(dialogRowReplaced(DialogRow*,DialogRow*)), this, SLOT(onDialogRowReplaced(DialogRow*,DialogRow*)));
connect(&_addContactLnk, SIGNAL(clicked()), App::wnd(), SLOT(onShowAddContact())); connect(&_addContactLnk, SIGNAL(clicked()), App::wnd(), SLOT(onShowAddContact()));
connect(&_cancelSearchInPeer, SIGNAL(clicked()), this, SIGNAL(cancelSearchInPeer()));
_cancelSearchInPeer.hide();
refresh(false); refresh(false);
} }
@ -60,7 +64,9 @@ int32 DialogsListWidget::peopleOffset() const {
} }
int32 DialogsListWidget::searchedOffset() const { int32 DialogsListWidget::searchedOffset() const {
return peopleOffset() + (peopleResults.isEmpty() ? 0 : ((peopleResults.size() * st::dlgHeight) + st::searchedBarHeight)); int32 result = peopleOffset() + (peopleResults.isEmpty() ? 0 : ((peopleResults.size() * st::dlgHeight) + st::searchedBarHeight));
if (_searchInPeer) result += st::dlgHeight;
return result;
} }
void DialogsListWidget::paintEvent(QPaintEvent *e) { void DialogsListWidget::paintEvent(QPaintEvent *e) {
@ -80,12 +86,12 @@ void DialogsListWidget::paintEvent(QPaintEvent *e) {
if (otherStart) { if (otherStart) {
dialogs.list.paint(p, width(), r.top(), r.bottom(), active, selected); dialogs.list.paint(p, width(), r.top(), r.bottom(), active, selected);
} }
if (contactsNoDialogs.list.count) { if (contactsNoDialogs.list.count && false) {
contactsNoDialogs.list.paint(p, width(), r.top() - otherStart, r.bottom() - otherStart, active, selected); contactsNoDialogs.list.paint(p, width(), r.top() - otherStart, r.bottom() - otherStart, active, selected);
} else if (!otherStart) { } else if (!otherStart) {
p.setFont(st::noContactsFont->f); p.setFont(st::noContactsFont->f);
p.setPen(st::noContactsColor->p); p.setPen(st::noContactsColor->p);
p.drawText(QRect(0, 0, width(), st::noContactsHeight - (cContactsReceived() ? st::noContactsFont->height : 0)), lang(cContactsReceived() ? lng_no_contacts : lng_contacts_loading), style::al_center); p.drawText(QRect(0, 0, width(), st::noContactsHeight - (cContactsReceived() ? st::noContactsFont->height : 0)), lang(cContactsReceived() ? lng_no_chats : lng_contacts_loading), style::al_center);
} }
} else if (_state == FilteredState || _state == SearchedState) { } else if (_state == FilteredState || _state == SearchedState) {
if (!hashtagResults.isEmpty()) { if (!hashtagResults.isEmpty()) {
@ -181,6 +187,18 @@ void DialogsListWidget::paintEvent(QPaintEvent *e) {
} }
} }
if (_searchInPeer) {
searchInPeerPaint(p, width());
p.translate(0, st::dlgHeight);
if (_state == FilteredState && searchResults.isEmpty()) {
p.fillRect(0, 0, width(), st::searchedBarHeight, st::searchedBarBG->b);
p.setFont(st::searchedBarFont->f);
p.setPen(st::searchedBarColor->p);
p.drawText(QRect(0, 0, width(), st::searchedBarHeight), lang(lng_dlg_search_for_messages), style::al_center);
p.translate(0, st::searchedBarHeight);
}
}
if (_state == SearchedState || !searchResults.isEmpty()) { if (_state == SearchedState || !searchResults.isEmpty()) {
QString text = lng_search_found_results(lt_count, searchResults.isEmpty() ? 0 : searchedCount); QString text = lng_search_found_results(lt_count, searchResults.isEmpty() ? 0 : searchedCount);
p.fillRect(0, 0, width(), st::searchedBarHeight, st::searchedBarBG->b); p.fillRect(0, 0, width(), st::searchedBarHeight, st::searchedBarBG->b);
@ -252,6 +270,31 @@ void DialogsListWidget::peopleResultPaint(UserData *user, QPainter &p, int32 w,
history->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); history->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width());
} }
void DialogsListWidget::searchInPeerPaint(QPainter &p, int32 w) const {
QRect fullRect(0, 0, w, st::dlgHeight);
p.fillRect(fullRect, st::dlgBG->b);
p.drawPixmap(st::dlgPaddingHor, st::dlgPaddingVer, _searchInPeer->photo->pix(st::dlgPhotoSize));
int32 nameleft = st::dlgPaddingHor + st::dlgPhotoSize + st::dlgPhotoPadding;
int32 namewidth = w - nameleft - st::dlgPaddingHor * 2 - st::btnCancelSearch.width;
QRect rectForName(nameleft, st::dlgPaddingVer + st::dlgNameTop, namewidth, st::msgNameFont->height);
// draw chat icon
if (_searchInPeer->chat) {
p.drawPixmap(QPoint(rectForName.left() + st::dlgChatImgLeft, rectForName.top() + st::dlgChatImgTop), App::sprite(), st::dlgChatImg);
rectForName.setLeft(rectForName.left() + st::dlgChatImgSkip);
}
QRect tr(nameleft, st::dlgPaddingVer + st::dlgFont->height + st::dlgSep, namewidth, st::dlgFont->height);
p.setFont(st::dlgHistFont->f);
p.setPen(st::dlgTextColor->p);
p.drawText(tr.left(), tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->m.elidedText(lang(lng_dlg_search_chat), Qt::ElideRight, tr.width()));
p.setPen(st::dlgNameColor->p);
App::history(_searchInPeer->id)->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width());
}
void DialogsListWidget::activate() { void DialogsListWidget::activate() {
} }
@ -274,7 +317,7 @@ void DialogsListWidget::onUpdateSelected(bool force) {
if (newSel) { if (newSel) {
contactSel = false; contactSel = false;
} else { } else {
newSel = contactsNoDialogs.list.rowAtY(mouseY - otherStart, st::dlgHeight); newSel = 0;// contactsNoDialogs.list.rowAtY(mouseY - otherStart, st::dlgHeight);
contactSel = true; contactSel = true;
} }
if (newSel != sel) { if (newSel != sel) {
@ -347,6 +390,7 @@ void DialogsListWidget::mousePressEvent(QMouseEvent *e) {
void DialogsListWidget::resizeEvent(QResizeEvent *e) { void DialogsListWidget::resizeEvent(QResizeEvent *e) {
_addContactLnk.move((width() - _addContactLnk.width()) / 2, (st::noContactsHeight + st::noContactsFont->height) / 2); _addContactLnk.move((width() - _addContactLnk.width()) / 2, (st::noContactsHeight + st::noContactsFont->height) / 2);
_cancelSearchInPeer.move(width() - st::dlgPaddingHor - st::btnCancelSearch.width, (st::dlgHeight - st::btnCancelSearch.height) / 2);
} }
void DialogsListWidget::onDialogRowReplaced(DialogRow *oldRow, DialogRow *newRow) { void DialogsListWidget::onDialogRowReplaced(DialogRow *oldRow, DialogRow *newRow) {
@ -397,9 +441,8 @@ void DialogsListWidget::removePeer(PeerData *peer) {
contactsNoDialogs.addByName(App::history(peer->id)); contactsNoDialogs.addByName(App::history(peer->id));
} }
} }
// contactsNoDialogs.del(peer);
// contacts.del(peer); Local::removeSavedPeer(peer);
// App::deleteHistory(peer->id);
emit App::main()->dialogsUpdated(); emit App::main()->dialogsUpdated();
@ -440,7 +483,7 @@ void DialogsListWidget::dlgUpdated(History *history) {
if (i != dialogs.list.rowByPeer.cend()) { if (i != dialogs.list.rowByPeer.cend()) {
update(0, i.value()->pos * st::dlgHeight, width(), st::dlgHeight); update(0, i.value()->pos * st::dlgHeight, width(), st::dlgHeight);
} else { } else {
i = contactsNoDialogs.list.rowByPeer.find(history->peer->id); i = contactsNoDialogs.list.rowByPeer.end();// find(history->peer->id);
if (i != contactsNoDialogs.list.rowByPeer.cend()) { if (i != contactsNoDialogs.list.rowByPeer.cend()) {
update(0, (dialogs.list.count + i.value()->pos) * st::dlgHeight, width(), st::dlgHeight); update(0, (dialogs.list.count + i.value()->pos) * st::dlgHeight, width(), st::dlgHeight);
} }
@ -489,6 +532,7 @@ void DialogsListWidget::leaveEvent(QEvent *e) {
if (sel || filteredSel >= 0 || hashtagSel >= 0 || searchedSel >= 0 || peopleSel >= 0) { if (sel || filteredSel >= 0 || hashtagSel >= 0 || searchedSel >= 0 || peopleSel >= 0) {
sel = 0; sel = 0;
filteredSel = searchedSel = peopleSel = hashtagSel = -1; filteredSel = searchedSel = peopleSel = hashtagSel = -1;
setCursor(style::cur_default);
parentWidget()->update(); parentWidget()->update();
} }
} }
@ -538,7 +582,7 @@ void DialogsListWidget::onFilterUpdate(QString newFilter, bool force) {
} }
if (newFilter != filter || force) { if (newFilter != filter || force) {
filter = newFilter; filter = newFilter;
if (filter.isEmpty()) { if (!_searchInPeer && filter.isEmpty()) {
_state = DefaultState; _state = DefaultState;
hashtagResults.clear(); hashtagResults.clear();
filterResults.clear(); filterResults.clear();
@ -550,7 +594,7 @@ void DialogsListWidget::onFilterUpdate(QString newFilter, bool force) {
_state = FilteredState; _state = FilteredState;
filterResults.clear(); filterResults.clear();
if (!f.isEmpty()) { if (!_searchInPeer && !f.isEmpty()) {
DialogsList *dialogsToFilter = 0, *contactsNoDialogsToFilter = 0; DialogsList *dialogsToFilter = 0, *contactsNoDialogsToFilter = 0;
if (dialogs.list.count) { if (dialogs.list.count) {
for (fi = fb; fi != fe; ++fi) { for (fi = fb; fi != fe; ++fi) {
@ -629,7 +673,7 @@ void DialogsListWidget::onFilterUpdate(QString newFilter, bool force) {
} }
void DialogsListWidget::onHashtagFilterUpdate(QStringRef newFilter) { void DialogsListWidget::onHashtagFilterUpdate(QStringRef newFilter) {
if (newFilter.isEmpty() || newFilter.at(0) != '#') { if (newFilter.isEmpty() || newFilter.at(0) != '#' || _searchInPeer) {
_hashtagFilter = QString(); _hashtagFilter = QString();
if (!hashtagResults.isEmpty()) { if (!hashtagResults.isEmpty()) {
hashtagResults.clear(); hashtagResults.clear();
@ -680,6 +724,26 @@ void DialogsListWidget::itemReplaced(HistoryItem *oldItem, HistoryItem *newItem)
} }
} }
PeerData *DialogsListWidget::updateFromParentDrag(QPoint globalPos) {
lastMousePos = globalPos;
selByMouse = true;
onUpdateSelected(true);
update();
if (_state == DefaultState) {
if (sel) return sel->history->peer;
} else if (_state == FilteredState || _state == SearchedState) {
if (filteredSel >= 0 && filteredSel < filterResults.size()) {
return filterResults[filteredSel]->history->peer;
} else if (peopleSel >= 0 && peopleSel < peopleResults.size()) {
return peopleResults[peopleSel];
} else if (searchedSel >= 0 && searchedSel < searchResults.size()) {
return searchResults[searchedSel]->_item->history()->peer;
}
}
return 0;
}
void DialogsListWidget::itemRemoved(HistoryItem *item) { void DialogsListWidget::itemRemoved(HistoryItem *item) {
int wasCount = searchResults.size(); int wasCount = searchResults.size();
for (int i = 0; i < searchResults.size();) { for (int i = 0; i < searchResults.size();) {
@ -709,6 +773,16 @@ void DialogsListWidget::dialogsReceived(const QVector<MTPDialog> &added) {
refresh(); refresh();
} }
void DialogsListWidget::addAllSavedPeers() {
SavedPeersByTime &saved(cRefSavedPeersByTime());
while (!saved.isEmpty()) {
History *history = App::history(saved.last()->id);
history->dialogs = dialogs.addToEnd(history);
contactsNoDialogs.del(history->peer);
saved.remove(saved.lastKey(), saved.last());
}
}
void DialogsListWidget::searchReceived(const QVector<MTPMessage> &messages, bool fromStart, int32 fullCount) { void DialogsListWidget::searchReceived(const QVector<MTPMessage> &messages, bool fromStart, int32 fullCount) {
if (fromStart) { if (fromStart) {
clearSearchResults(false); clearSearchResults(false);
@ -748,7 +822,7 @@ void DialogsListWidget::contactsReceived(const QVector<MTPContact> &contacts) {
App::self()->contact = 1; App::self()->contact = 1;
} }
} }
if (!sel && contactsNoDialogs.list.count) { if (!sel && contactsNoDialogs.list.count && false) {
sel = contactsNoDialogs.list.begin; sel = contactsNoDialogs.list.begin;
contactSel = true; contactSel = true;
} }
@ -765,11 +839,11 @@ int32 DialogsListWidget::addNewContact(int32 uid, bool select) {
if (i == dialogs.list.rowByPeer.cend()) { if (i == dialogs.list.rowByPeer.cend()) {
DialogRow *added = contactsNoDialogs.addByName(history); DialogRow *added = contactsNoDialogs.addByName(history);
if (!added) return -1; if (!added) return -1;
if (select) { if (select && false) {
sel = added; sel = added;
contactSel = true; contactSel = true;
} }
if (contactsNoDialogs.list.count == 1 && !dialogs.list.count) refresh(); // if (contactsNoDialogs.list.count == 1 && !dialogs.list.count) refresh();
return added ? ((dialogs.list.count + added->pos) * st::dlgHeight) : -1; return added ? ((dialogs.list.count + added->pos) * st::dlgHeight) : -1;
} }
if (select) { if (select) {
@ -782,7 +856,7 @@ int32 DialogsListWidget::addNewContact(int32 uid, bool select) {
void DialogsListWidget::refresh(bool toTop) { void DialogsListWidget::refresh(bool toTop) {
int32 h = 0; int32 h = 0;
if (_state == DefaultState) { if (_state == DefaultState) {
h = (dialogs.list.count + contactsNoDialogs.list.count) * st::dlgHeight; h = (dialogs.list.count/* + contactsNoDialogs.list.count*/) * st::dlgHeight;
if (h) { if (h) {
if (!_addContactLnk.isHidden()) _addContactLnk.hide(); if (!_addContactLnk.isHidden()) _addContactLnk.hide();
} else { } else {
@ -796,7 +870,7 @@ void DialogsListWidget::refresh(bool toTop) {
} else { } else {
if (!_addContactLnk.isHidden()) _addContactLnk.hide(); if (!_addContactLnk.isHidden()) _addContactLnk.hide();
if (_state == FilteredState) { if (_state == FilteredState) {
h = searchedOffset() + (searchResults.count() * st::dlgHeight) + (searchResults.isEmpty() ? 0 : st::searchedBarHeight); h = searchedOffset() + (searchResults.count() * st::dlgHeight) + ((searchResults.isEmpty() && !_searchInPeer) ? 0 : st::searchedBarHeight);
} else if (_state == SearchedState) { } else if (_state == SearchedState) {
h = searchedOffset() + (searchResults.count() * st::dlgHeight) + st::searchedBarHeight; h = searchedOffset() + (searchResults.count() * st::dlgHeight) + st::searchedBarHeight;
} }
@ -817,6 +891,7 @@ void DialogsListWidget::setMouseSel(bool msel, bool toTop) {
contactSel = !dialogs.list.count && contactsNoDialogs.list.count; contactSel = !dialogs.list.count && contactsNoDialogs.list.count;
} else if (_state == FilteredState || _state == SearchedState) { // don't select first elem in search } else if (_state == FilteredState || _state == SearchedState) { // don't select first elem in search
filteredSel = peopleSel = searchedSel = hashtagSel = -1; filteredSel = peopleSel = searchedSel = hashtagSel = -1;
setCursor(style::cur_default);
} }
} }
} }
@ -844,9 +919,23 @@ bool DialogsListWidget::hasFilteredResults() const {
return !filterResults.isEmpty() && hashtagResults.isEmpty(); return !filterResults.isEmpty() && hashtagResults.isEmpty();
} }
void DialogsListWidget::searchInPeer(PeerData *peer) {
_searchInPeer = peer;
if (_searchInPeer) {
onHashtagFilterUpdate(QStringRef());
_cancelSearchInPeer.show();
} else {
_cancelSearchInPeer.hide();
}
}
void DialogsListWidget::clearFilter() { void DialogsListWidget::clearFilter() {
if (_state == FilteredState || _state == SearchedState) { if (_state == FilteredState || _state == SearchedState) {
if (_searchInPeer) {
_state = FilteredState;
} else {
_state = DefaultState; _state = DefaultState;
}
hashtagResults.clear(); hashtagResults.clear();
filterResults.clear(); filterResults.clear();
peopleResults.clear(); peopleResults.clear();
@ -859,6 +948,15 @@ void DialogsListWidget::clearFilter() {
void DialogsListWidget::addDialog(const MTPDdialog &dialog) { void DialogsListWidget::addDialog(const MTPDdialog &dialog) {
History *history = App::history(App::peerFromMTP(dialog.vpeer), dialog.vunread_count.v, dialog.vread_inbox_max_id.v); History *history = App::history(App::peerFromMTP(dialog.vpeer), dialog.vunread_count.v, dialog.vread_inbox_max_id.v);
if (history->lastMsg) {
SavedPeersByTime &saved(cRefSavedPeersByTime());
while (!saved.isEmpty() && history->lastMsg->date < saved.lastKey()) {
History *history = App::history(saved.last()->id);
history->dialogs = dialogs.addToEnd(history);
contactsNoDialogs.del(history->peer);
saved.remove(saved.lastKey(), saved.last());
}
}
History::DialogLinks links = dialogs.addToEnd(history); History::DialogLinks links = dialogs.addToEnd(history);
history->dialogs = links; history->dialogs = links;
contactsNoDialogs.del(history->peer); contactsNoDialogs.del(history->peer);
@ -871,7 +969,7 @@ void DialogsListWidget::selectSkip(int32 direction) {
if (!sel) { if (!sel) {
if (dialogs.list.count && direction > 0) { if (dialogs.list.count && direction > 0) {
sel = dialogs.list.begin; sel = dialogs.list.begin;
} else if (contactsNoDialogs.list.count && direction > 0) { } else if (false && contactsNoDialogs.list.count && direction > 0) {
sel = contactsNoDialogs.list.begin; sel = contactsNoDialogs.list.begin;
} else { } else {
return; return;
@ -879,14 +977,14 @@ void DialogsListWidget::selectSkip(int32 direction) {
} else if (direction > 0) { } else if (direction > 0) {
if (sel->next->next) { if (sel->next->next) {
sel = sel->next; sel = sel->next;
} else if (sel->next == dialogs.list.end && contactsNoDialogs.list.count) { } else if (false && sel->next == dialogs.list.end && contactsNoDialogs.list.count) {
sel = contactsNoDialogs.list.begin; sel = contactsNoDialogs.list.begin;
contactSel = true; contactSel = true;
} }
} else { } else {
if (sel->prev) { if (sel->prev) {
sel = sel->prev; sel = sel->prev;
} else if (sel == contactsNoDialogs.list.begin && dialogs.list.count) { } else if (false && sel == contactsNoDialogs.list.begin && dialogs.list.count) {
sel = dialogs.list.end->prev; sel = dialogs.list.end->prev;
contactSel = false; contactSel = false;
} }
@ -944,7 +1042,7 @@ void DialogsListWidget::scrollToPeer(const PeerId &peer, MsgId msgId) {
DialogsList::RowByPeer::const_iterator i = dialogs.list.rowByPeer.constFind(peer); DialogsList::RowByPeer::const_iterator i = dialogs.list.rowByPeer.constFind(peer);
if (i != dialogs.list.rowByPeer.cend()) { if (i != dialogs.list.rowByPeer.cend()) {
fromY = i.value()->pos * st::dlgHeight; fromY = i.value()->pos * st::dlgHeight;
} else { } else if (false) {
i = contactsNoDialogs.list.rowByPeer.constFind(peer); i = contactsNoDialogs.list.rowByPeer.constFind(peer);
if (i != contactsNoDialogs.list.rowByPeer.cend()) { if (i != contactsNoDialogs.list.rowByPeer.cend()) {
fromY = (i.value()->pos + dialogs.list.count) * st::dlgHeight; fromY = (i.value()->pos + dialogs.list.count) * st::dlgHeight;
@ -979,7 +1077,7 @@ void DialogsListWidget::selectSkipPage(int32 pixels, int32 direction) {
if (!sel) { if (!sel) {
if (direction > 0 && dialogs.list.count) { if (direction > 0 && dialogs.list.count) {
sel = dialogs.list.begin; sel = dialogs.list.begin;
} else if (direction > 0 && contactsNoDialogs.list.count) { } else if (false && direction > 0 && contactsNoDialogs.list.count) {
sel = contactsNoDialogs.list.begin; sel = contactsNoDialogs.list.begin;
} else { } else {
return; return;
@ -989,7 +1087,7 @@ void DialogsListWidget::selectSkipPage(int32 pixels, int32 direction) {
while (toSkip-- && sel->next->next) { while (toSkip-- && sel->next->next) {
sel = sel->next; sel = sel->next;
} }
if (toSkip >= 0 && sel->next == dialogs.list.end && contactsNoDialogs.list.count) { if (false && toSkip >= 0 && sel->next == dialogs.list.end && contactsNoDialogs.list.count) {
sel = contactsNoDialogs.list.begin; sel = contactsNoDialogs.list.begin;
while (toSkip-- && sel->next->next) { while (toSkip-- && sel->next->next) {
sel = sel->next; sel = sel->next;
@ -1074,7 +1172,7 @@ void DialogsListWidget::loadPeerPhotos(int32 yFrom) {
bool DialogsListWidget::choosePeer() { bool DialogsListWidget::choosePeer() {
History *history = 0; History *history = 0;
MsgId msgId = 0; MsgId msgId = ShowAtUnreadMsgId;
if (_state == DefaultState) { if (_state == DefaultState) {
if (sel) history = sel->history; if (sel) history = sel->history;
} else if (_state == FilteredState || _state == SearchedState) { } else if (_state == FilteredState || _state == SearchedState) {
@ -1113,11 +1211,11 @@ bool DialogsListWidget::choosePeer() {
} }
} }
if (history) { if (history) {
if (msgId) { if (msgId > 0) {
saveRecentHashtags(filter); saveRecentHashtags(filter);
} }
bool chosen = (!App::main()->selectingPeer(true) && (_state == FilteredState || _state == SearchedState) && filteredSel >= 0 && filteredSel < filterResults.size()); bool chosen = (!App::main()->selectingPeer(true) && (_state == FilteredState || _state == SearchedState) && filteredSel >= 0 && filteredSel < filterResults.size());
App::main()->showPeer(history->peer->id, msgId); App::main()->choosePeer(history->peer->id, msgId);
if (chosen) { if (chosen) {
emit searchResultChosen(); emit searchResultChosen();
} }
@ -1184,11 +1282,11 @@ void DialogsListWidget::peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData
} }
if (i.value()->prev) { if (i.value()->prev) {
outPeer = i.value()->prev->history->peer; outPeer = i.value()->prev->history->peer;
outMsg = 0; outMsg = ShowAtUnreadMsgId;
return; return;
} else if (dialogs.list.count) { } else if (dialogs.list.count) {
outPeer = dialogs.list.end->prev->history->peer; outPeer = dialogs.list.end->prev->history->peer;
outMsg = 0; outMsg = ShowAtUnreadMsgId;
return; return;
} }
outPeer = 0; outPeer = 0;
@ -1197,7 +1295,7 @@ void DialogsListWidget::peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData
} }
if (i.value()->prev) { if (i.value()->prev) {
outPeer = i.value()->prev->history->peer; outPeer = i.value()->prev->history->peer;
outMsg = 0; outMsg = ShowAtUnreadMsgId;
return; return;
} }
} else if (_state == FilteredState || _state == SearchedState) { } else if (_state == FilteredState || _state == SearchedState) {
@ -1211,7 +1309,7 @@ void DialogsListWidget::peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData
} }
} }
if (searchResults.at(0)->_item->history()->peer == inPeer && searchResults.at(0)->_item->id == inMsg) { if (searchResults.at(0)->_item->history()->peer == inPeer && searchResults.at(0)->_item->id == inMsg) {
outMsg = 0; outMsg = ShowAtUnreadMsgId;
if (peopleResults.isEmpty()) { if (peopleResults.isEmpty()) {
if (filterResults.isEmpty()) { if (filterResults.isEmpty()) {
outPeer = 0; outPeer = 0;
@ -1226,14 +1324,14 @@ void DialogsListWidget::peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData
} }
if (!peopleResults.isEmpty() && peopleResults.at(0) == inPeer) { if (!peopleResults.isEmpty() && peopleResults.at(0) == inPeer) {
outPeer = filterResults.isEmpty() ? 0 : filterResults.back()->history->peer; outPeer = filterResults.isEmpty() ? 0 : filterResults.back()->history->peer;
outMsg = 0; outMsg = ShowAtUnreadMsgId;
return; return;
} }
if (!peopleResults.isEmpty()) { if (!peopleResults.isEmpty()) {
for (PeopleResults::const_iterator b = peopleResults.cbegin(), i = b + 1, e = peopleResults.cend(); i != e; ++i) { for (PeopleResults::const_iterator b = peopleResults.cbegin(), i = b + 1, e = peopleResults.cend(); i != e; ++i) {
if ((*i) == inPeer) { if ((*i) == inPeer) {
outPeer = (*(i - 1)); outPeer = (*(i - 1));
outMsg = 0; outMsg = ShowAtUnreadMsgId;
return; return;
} }
} }
@ -1247,7 +1345,7 @@ void DialogsListWidget::peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData
for (FilteredDialogs::const_iterator b = filterResults.cbegin(), i = b + 1, e = filterResults.cend(); i != e; ++i) { for (FilteredDialogs::const_iterator b = filterResults.cbegin(), i = b + 1, e = filterResults.cend(); i != e; ++i) {
if ((*i)->history->peer == inPeer) { if ((*i)->history->peer == inPeer) {
outPeer = (*(i - 1))->history->peer; outPeer = (*(i - 1))->history->peer;
outMsg = 0; outMsg = ShowAtUnreadMsgId;
return; return;
} }
} }
@ -1260,17 +1358,17 @@ void DialogsListWidget::peerAfter(const PeerData *inPeer, MsgId inMsg, PeerData
if (_state == DefaultState) { if (_state == DefaultState) {
DialogsList::RowByPeer::const_iterator i = dialogs.list.rowByPeer.constFind(inPeer->id); DialogsList::RowByPeer::const_iterator i = dialogs.list.rowByPeer.constFind(inPeer->id);
if (i == dialogs.list.rowByPeer.constEnd()) { if (i == dialogs.list.rowByPeer.constEnd()) {
i = contactsNoDialogs.list.rowByPeer.constFind(inPeer->id); //i = contactsNoDialogs.list.rowByPeer.constFind(inPeer->id);
if (i == contactsNoDialogs.list.rowByPeer.cend()) { //if (i == contactsNoDialogs.list.rowByPeer.cend()) {
outPeer = 0; // outPeer = 0;
outMsg = 0; // outMsg = 0;
return; // return;
} //}
if (i.value()->next != contactsNoDialogs.list.end) { //if (i.value()->next != contactsNoDialogs.list.end) {
outPeer = i.value()->next->history->peer; // outPeer = i.value()->next->history->peer;
outMsg = 0; // outMsg = ShowAtUnreadMsgId;
return; // return;
} //}
outPeer = 0; outPeer = 0;
outMsg = 0; outMsg = 0;
return; return;
@ -1278,11 +1376,11 @@ void DialogsListWidget::peerAfter(const PeerData *inPeer, MsgId inMsg, PeerData
if (i.value()->next != dialogs.list.end) { if (i.value()->next != dialogs.list.end) {
outPeer = i.value()->next->history->peer; outPeer = i.value()->next->history->peer;
outMsg = 0; outMsg = ShowAtUnreadMsgId;
return; return;
} else if (contactsNoDialogs.list.count) { } else if (false && contactsNoDialogs.list.count) {
outPeer = contactsNoDialogs.list.begin->history->peer; outPeer = contactsNoDialogs.list.begin->history->peer;
outMsg = 0; outMsg = ShowAtUnreadMsgId;
return; return;
} }
} else if (_state == FilteredState || _state == SearchedState) { } else if (_state == FilteredState || _state == SearchedState) {
@ -1304,7 +1402,7 @@ void DialogsListWidget::peerAfter(const PeerData *inPeer, MsgId inMsg, PeerData
outMsg = searchResults.front()->_item->id; outMsg = searchResults.front()->_item->id;
} else { } else {
outPeer = (i == e) ? 0 : (*i); outPeer = (i == e) ? 0 : (*i);
outMsg = 0; outMsg = ShowAtUnreadMsgId;
} }
return; return;
} }
@ -1314,13 +1412,13 @@ void DialogsListWidget::peerAfter(const PeerData *inPeer, MsgId inMsg, PeerData
++i; ++i;
if (i == e && !peopleResults.isEmpty()) { if (i == e && !peopleResults.isEmpty()) {
outPeer = peopleResults.front(); outPeer = peopleResults.front();
outMsg = 0; outMsg = ShowAtUnreadMsgId;
} else if (i == e && !searchResults.isEmpty()) { } else if (i == e && !searchResults.isEmpty()) {
outPeer = searchResults.front()->_item->history()->peer; outPeer = searchResults.front()->_item->history()->peer;
outMsg = searchResults.front()->_item->id; outMsg = searchResults.front()->_item->id;
} else { } else {
outPeer = (i == e) ? 0 : (*i)->history->peer; outPeer = (i == e) ? 0 : (*i)->history->peer;
outMsg = 0; outMsg = ShowAtUnreadMsgId;
} }
return; return;
} }
@ -1356,16 +1454,19 @@ MsgId DialogsListWidget::lastSearchId() const {
DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent) DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent)
, _drawShadow(true) , _drawShadow(true)
, _dragInScroll(false)
, _dragForward(false)
, dlgOffset(0) , dlgOffset(0)
, dlgCount(-1) , dlgCount(-1)
, dlgPreloading(0) , dlgPreloading(0)
, contactsRequest(0) , contactsRequest(0)
, _filter(this, st::dlgFilter, lang(lng_dlg_filter)) , _filter(this, st::dialogsSearchField, lang(lng_dlg_filter))
, _newGroup(this, st::btnNewGroup) , _newGroup(this, st::btnNewGroup)
, _addContact(this, st::btnAddContact) , _addContact(this, st::btnAddContact)
, _cancelSearch(this, st::btnCancelSearch) , _cancelSearch(this, st::btnCancelSearch)
, scroll(this, st::dlgScroll) , scroll(this, st::dlgScroll)
, list(&scroll, parent) , list(&scroll, parent)
, _searchInPeer(0)
, _searchFull(false) , _searchFull(false)
, _peopleFull(false) , _peopleFull(false)
{ {
@ -1377,6 +1478,7 @@ DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent)
connect(&list, SIGNAL(searchResultChosen()), this, SLOT(onCancel())); connect(&list, SIGNAL(searchResultChosen()), this, SLOT(onCancel()));
connect(&list, SIGNAL(completeHashtag(QString)), this, SLOT(onCompleteHashtag(QString))); connect(&list, SIGNAL(completeHashtag(QString)), this, SLOT(onCompleteHashtag(QString)));
connect(&list, SIGNAL(refreshHashtags()), this, SLOT(onFilterCursorMoved())); connect(&list, SIGNAL(refreshHashtags()), this, SLOT(onFilterCursorMoved()));
connect(&list, SIGNAL(cancelSearchInPeer()), this, SLOT(onCancelSearchInPeer()));
connect(&scroll, SIGNAL(geometryChanged()), &list, SLOT(onParentGeometryChanged())); connect(&scroll, SIGNAL(geometryChanged()), &list, SLOT(onParentGeometryChanged()));
connect(&scroll, SIGNAL(scrolled()), &list, SLOT(onUpdateSelected())); connect(&scroll, SIGNAL(scrolled()), &list, SLOT(onUpdateSelected()));
connect(&scroll, SIGNAL(scrolled()), this, SLOT(onListScroll())); connect(&scroll, SIGNAL(scrolled()), this, SLOT(onListScroll()));
@ -1388,6 +1490,11 @@ DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent)
connect(&_newGroup, SIGNAL(clicked()), this, SLOT(onNewGroup())); connect(&_newGroup, SIGNAL(clicked()), this, SLOT(onNewGroup()));
connect(&_cancelSearch, SIGNAL(clicked()), this, SLOT(onCancelSearch())); connect(&_cancelSearch, SIGNAL(clicked()), this, SLOT(onCancelSearch()));
_chooseByDragTimer.setSingleShot(true);
connect(&_chooseByDragTimer, SIGNAL(timeout()), this, SLOT(onChooseByDrag()));
setAcceptDrops(true);
_searchTimer.setSingleShot(true); _searchTimer.setSingleShot(true);
connect(&_searchTimer, SIGNAL(timeout()), this, SLOT(onSearchMessages())); connect(&_searchTimer, SIGNAL(timeout()), this, SLOT(onSearchMessages()));
@ -1422,15 +1529,11 @@ void DialogsWidget::dlgUpdated(History *row) {
} }
void DialogsWidget::dialogsToUp() { void DialogsWidget::dialogsToUp() {
if (_filter.text().trimmed().isEmpty()) { if (_filter.getLastText().trimmed().isEmpty()) {
scroll.scrollToY(0); scroll.scrollToY(0);
} }
} }
void DialogsWidget::setInnerFocus() {
_filter.setFocus();
}
void DialogsWidget::animShow(const QPixmap &bgAnimCache) { void DialogsWidget::animShow(const QPixmap &bgAnimCache) {
_bgAnimCache = bgAnimCache; _bgAnimCache = bgAnimCache;
_animCache = myGrab(this, rect()); _animCache = myGrab(this, rect());
@ -1471,7 +1574,7 @@ bool DialogsWidget::animStep(float64 ms) {
} }
void DialogsWidget::onCancel() { void DialogsWidget::onCancel() {
if (!onCancelSearch() || !App::main()->selectingPeer()) { if (!onCancelSearch() || (!_searchInPeer && !App::main()->selectingPeer())) {
emit cancelled(); emit cancelled();
} }
} }
@ -1553,7 +1656,7 @@ bool DialogsWidget::dialogsFailed(const RPCError &error) {
} }
bool DialogsWidget::onSearchMessages(bool searchCache) { bool DialogsWidget::onSearchMessages(bool searchCache) {
QString q = _filter.text().trimmed(); QString q = _filter.getLastText().trimmed();
if (q.isEmpty()) { if (q.isEmpty()) {
if (_searchRequest) { if (_searchRequest) {
_searchRequest = 0; _searchRequest = 0;
@ -1575,10 +1678,10 @@ bool DialogsWidget::onSearchMessages(bool searchCache) {
} else if (_searchQuery != q) { } else if (_searchQuery != q) {
_searchQuery = q; _searchQuery = q;
_searchFull = false; _searchFull = false;
_searchRequest = MTP::send(MTPmessages_Search(MTP_inputPeerEmpty(), MTP_string(_searchQuery), MTP_inputMessagesFilterEmpty(), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(SearchPerPage)), rpcDone(&DialogsWidget::searchReceived, true), rpcFail(&DialogsWidget::searchFailed)); _searchRequest = MTP::send(MTPmessages_Search(_searchInPeer ? _searchInPeer->input : MTP_inputPeerEmpty(), MTP_string(_searchQuery), MTP_inputMessagesFilterEmpty(), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(SearchPerPage)), rpcDone(&DialogsWidget::searchReceived, true), rpcFail(&DialogsWidget::searchFailed));
_searchQueries.insert(_searchRequest, _searchQuery); _searchQueries.insert(_searchRequest, _searchQuery);
} }
if (q.size() >= MinUsernameLength) { if (!_searchInPeer && q.size() >= MinUsernameLength) {
if (searchCache) { if (searchCache) {
PeopleCache::const_iterator i = _peopleCache.constFind(q); PeopleCache::const_iterator i = _peopleCache.constFind(q);
if (i != _peopleCache.cend()) { if (i != _peopleCache.cend()) {
@ -1604,8 +1707,12 @@ void DialogsWidget::onNeedSearchMessages() {
} }
} }
void DialogsWidget::onChooseByDrag() {
list.choosePeer();
}
void DialogsWidget::searchMessages(const QString &query) { void DialogsWidget::searchMessages(const QString &query) {
if (_filter.text() != query) { if (_filter.getLastText() != query) {
_filter.setText(query); _filter.setText(query);
_filter.updatePlaceholder(); _filter.updatePlaceholder();
onFilterUpdate(); onFilterUpdate();
@ -1618,7 +1725,7 @@ void DialogsWidget::searchMessages(const QString &query) {
void DialogsWidget::onSearchMore(MsgId minMsgId) { void DialogsWidget::onSearchMore(MsgId minMsgId) {
if (!_searchRequest && !_searchFull) { if (!_searchRequest && !_searchFull) {
_searchRequest = MTP::send(MTPmessages_Search(MTP_inputPeerEmpty(), MTP_string(_searchQuery), MTP_inputMessagesFilterEmpty(), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(minMsgId), MTP_int(SearchPerPage)), rpcDone(&DialogsWidget::searchReceived, !minMsgId), rpcFail(&DialogsWidget::searchFailed)); _searchRequest = MTP::send(MTPmessages_Search(_searchInPeer ? _searchInPeer->input : MTP_inputPeerEmpty(), MTP_string(_searchQuery), MTP_inputMessagesFilterEmpty(), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(minMsgId), MTP_int(SearchPerPage)), rpcDone(&DialogsWidget::searchReceived, !minMsgId), rpcFail(&DialogsWidget::searchFailed));
if (!minMsgId) { if (!minMsgId) {
_searchQueries.insert(_searchRequest, _searchQuery); _searchQueries.insert(_searchRequest, _searchQuery);
} }
@ -1628,6 +1735,7 @@ void DialogsWidget::onSearchMore(MsgId minMsgId) {
void DialogsWidget::loadDialogs() { void DialogsWidget::loadDialogs() {
if (dlgPreloading) return; if (dlgPreloading) return;
if (dlgCount >= 0 && dlgOffset >= dlgCount) { if (dlgCount >= 0 && dlgOffset >= dlgCount) {
list.addAllSavedPeers();
cSetDialogsReceived(true); cSetDialogsReceived(true);
return; return;
} }
@ -1741,6 +1849,78 @@ bool DialogsWidget::addNewContact(int32 uid, bool show) {
return true; return true;
} }
void DialogsWidget::dragEnterEvent(QDragEnterEvent *e) {
if (App::main()->selectingPeer()) return;
_dragInScroll = false;
_dragForward = e->mimeData()->hasFormat(qsl("application/x-td-forward-selected"));
if (!_dragForward) _dragForward = e->mimeData()->hasFormat(qsl("application/x-td-forward-pressed-link"));
if (!_dragForward) _dragForward = e->mimeData()->hasFormat(qsl("application/x-td-forward-pressed"));
if (_dragForward && !cWideMode()) _dragForward = false;
if (_dragForward) {
e->setDropAction(Qt::CopyAction);
e->accept();
updateDragInScroll(scroll.geometry().contains(e->pos()));
} else if (App::main() && App::main()->getDragState(e->mimeData()) != DragStateNone) {
e->setDropAction(Qt::CopyAction);
e->accept();
}
_chooseByDragTimer.stop();
}
void DialogsWidget::dragMoveEvent(QDragMoveEvent *e) {
if (scroll.geometry().contains(e->pos())) {
if (_dragForward) {
updateDragInScroll(true);
} else {
_chooseByDragTimer.start(ChoosePeerByDragTimeout);
}
PeerData *p = list.updateFromParentDrag(mapToGlobal(e->pos()));
if (p) {
e->setDropAction(Qt::CopyAction);
} else {
e->setDropAction(Qt::IgnoreAction);
}
} else {
if (_dragForward) updateDragInScroll(false);
list.leaveEvent(0);
e->setDropAction(Qt::IgnoreAction);
}
e->accept();
}
void DialogsWidget::dragLeaveEvent(QDragLeaveEvent *e) {
if (_dragForward) {
updateDragInScroll(false);
} else {
_chooseByDragTimer.stop();
}
list.leaveEvent(0);
e->accept();
}
void DialogsWidget::updateDragInScroll(bool inScroll) {
if (_dragInScroll != inScroll) {
_dragInScroll = inScroll;
if (_dragInScroll) {
App::main()->forwardLayer(1);
} else {
App::main()->dialogsCancelled();
}
}
}
void DialogsWidget::dropEvent(QDropEvent *e) {
_chooseByDragTimer.stop();
if (scroll.geometry().contains(e->pos())) {
PeerData *p = list.updateFromParentDrag(mapToGlobal(e->pos()));
if (p) {
e->acceptProposedAction();
App::main()->onFilesOrForwardDrop(p->id, e->mimeData());
}
}
}
void DialogsWidget::onListScroll() { void DialogsWidget::onListScroll() {
// if (!App::self()) return; // if (!App::self()) return;
@ -1757,7 +1937,7 @@ void DialogsWidget::onListScroll() {
void DialogsWidget::onFilterUpdate(bool force) { void DialogsWidget::onFilterUpdate(bool force) {
if (animating() && !force) return; if (animating() && !force) return;
QString filterText = _filter.text(); QString filterText = _filter.getLastText();
list.onFilterUpdate(filterText); list.onFilterUpdate(filterText);
if (filterText.isEmpty()) { if (filterText.isEmpty()) {
_searchCache.clear(); _searchCache.clear();
@ -1776,9 +1956,17 @@ void DialogsWidget::onFilterUpdate(bool force) {
} }
} }
void DialogsWidget::searchInPeer(PeerData *peer) {
onCancelSearch();
_searchInPeer = peer;
list.searchInPeer(peer);
onFilterUpdate(true);
list.onFilterUpdate(_filter.getLastText(), true);
}
void DialogsWidget::onFilterCursorMoved(int from, int to) { void DialogsWidget::onFilterCursorMoved(int from, int to) {
if (to < 0) to = _filter.cursorPosition(); if (to < 0) to = _filter.textCursor().position();
QString t = _filter.text(); QString t = _filter.getLastText();
QStringRef r; QStringRef r;
for (int start = to; start > 0;) { for (int start = to; start > 0;) {
--start; --start;
@ -1793,8 +1981,8 @@ void DialogsWidget::onFilterCursorMoved(int from, int to) {
} }
void DialogsWidget::onCompleteHashtag(QString tag) { void DialogsWidget::onCompleteHashtag(QString tag) {
QString t = _filter.text(), r; QString t = _filter.getLastText(), r;
int cur = _filter.cursorPosition(); int cur = _filter.textCursor().position();
for (int start = cur; start > 0;) { for (int start = cur; start > 0;) {
--start; --start;
if (t.size() <= start) break; if (t.size() <= start) break;
@ -1806,7 +1994,9 @@ void DialogsWidget::onCompleteHashtag(QString tag) {
if (cur - start - 1 == tag.size() && cur < t.size() && t.at(cur) == ' ') ++cur; if (cur - start - 1 == tag.size() && cur < t.size() && t.at(cur) == ' ') ++cur;
r = t.mid(0, start + 1) + tag + ' ' + t.mid(cur); r = t.mid(0, start + 1) + tag + ' ' + t.mid(cur);
_filter.setText(r); _filter.setText(r);
_filter.setCursorPosition(start + 1 + tag.size() + 1); QTextCursor cursor(_filter.textCursor());
cursor.setPosition(start + 1 + tag.size() + 1);
_filter.setTextCursor(cursor);
onFilterUpdate(true); onFilterUpdate(true);
return; return;
} }
@ -1815,7 +2005,9 @@ void DialogsWidget::onCompleteHashtag(QString tag) {
if (!t.at(start).isLetterOrNumber() && t.at(start) != '_') break; if (!t.at(start).isLetterOrNumber() && t.at(start) != '_') break;
} }
_filter.setText(t.mid(0, cur) + '#' + tag + ' ' + t.mid(cur)); _filter.setText(t.mid(0, cur) + '#' + tag + ' ' + t.mid(cur));
_filter.setCursorPosition(cur + 1 + tag.size() + 1); QTextCursor cursor(_filter.textCursor());
cursor.setPosition(cur + 1 + tag.size() + 1);
_filter.setTextCursor(cursor);
onFilterUpdate(true); onFilterUpdate(true);
} }
@ -1826,10 +2018,17 @@ void DialogsWidget::resizeEvent(QResizeEvent *e) {
_addContact.move(w - _addContact.width() - st::dlgPaddingHor, _filter.y()); _addContact.move(w - _addContact.width() - st::dlgPaddingHor, _filter.y());
_cancelSearch.move(w - _cancelSearch.width() - st::dlgPaddingHor, _filter.y()); _cancelSearch.move(w - _cancelSearch.width() - st::dlgPaddingHor, _filter.y());
scroll.move(0, _filter.height() + 2 * st::dlgFilterPadding); scroll.move(0, _filter.height() + 2 * st::dlgFilterPadding);
int32 addToY = App::main() ? App::main()->contentScrollAddToY() : 0;
int32 newScrollY = scroll.scrollTop() + addToY;
scroll.resize(w, height() - _filter.y() - _filter.height() - st::dlgFilterPadding - st::dlgPaddingVer); scroll.resize(w, height() - _filter.y() - _filter.height() - st::dlgFilterPadding - st::dlgPaddingVer);
list.resize(w, list.height()); list.resize(w, list.height());
if (addToY) {
scroll.scrollToY(newScrollY);
} else {
onListScroll(); onListScroll();
} }
}
void DialogsWidget::keyPressEvent(QKeyEvent *e) { void DialogsWidget::keyPressEvent(QKeyEvent *e) {
if (e->key() == Qt::Key_Escape) { if (e->key() == Qt::Key_Escape) {
@ -1926,7 +2125,15 @@ void DialogsWidget::onNewGroup() {
} }
bool DialogsWidget::onCancelSearch() { bool DialogsWidget::onCancelSearch() {
bool clearing = !_filter.text().isEmpty(); bool clearing = !_filter.getLastText().isEmpty();
if (_searchInPeer && !clearing) {
if (!cWideMode()) {
App::main()->showPeerHistory(_searchInPeer->id, ShowAtUnreadMsgId);
}
_searchInPeer = 0;
list.searchInPeer(0);
clearing = true;
}
list.clearFilter(); list.clearFilter();
_filter.clear(); _filter.clear();
_filter.updatePlaceholder(); _filter.updatePlaceholder();
@ -1934,6 +2141,23 @@ bool DialogsWidget::onCancelSearch() {
return clearing; return clearing;
} }
void DialogsWidget::onCancelSearchInPeer() {
if (_searchInPeer) {
if (!cWideMode()) {
App::main()->showPeerHistory(_searchInPeer->id, ShowAtUnreadMsgId);
}
_searchInPeer = 0;
list.searchInPeer(0);
}
list.clearFilter();
_filter.clear();
_filter.updatePlaceholder();
onFilterUpdate();
if (cWideMode()) {
emit cancelled();
}
}
void DialogsWidget::onDialogToTopFrom(int movedFrom) { void DialogsWidget::onDialogToTopFrom(int movedFrom) {
if (scroll.scrollTop() > 0) { if (scroll.scrollTop() > 0) {
if (movedFrom > scroll.scrollTop()) { if (movedFrom > scroll.scrollTop()) {

View file

@ -27,6 +27,7 @@ public:
DialogsListWidget(QWidget *parent, MainWidget *main); DialogsListWidget(QWidget *parent, MainWidget *main);
void dialogsReceived(const QVector<MTPDialog> &dialogs); void dialogsReceived(const QVector<MTPDialog> &dialogs);
void addAllSavedPeers();
void searchReceived(const QVector<MTPMessage> &messages, bool fromStart, int32 fullCount); void searchReceived(const QVector<MTPMessage> &messages, bool fromStart, int32 fullCount);
void peopleReceived(const QString &query, const QVector<MTPContactFound> &people); void peopleReceived(const QString &query, const QVector<MTPContactFound> &people);
void showMore(int32 pixels); void showMore(int32 pixels);
@ -48,6 +49,7 @@ public:
void leaveEvent(QEvent *e); void leaveEvent(QEvent *e);
void peopleResultPaint(UserData *user, QPainter &p, int32 w, bool act, bool sel) const; void peopleResultPaint(UserData *user, QPainter &p, int32 w, bool act, bool sel) const;
void searchInPeerPaint(QPainter &p, int32 w) const;
void selectSkip(int32 direction); void selectSkip(int32 direction);
void selectSkipPage(int32 pixels, int32 direction); void selectSkipPage(int32 pixels, int32 direction);
@ -93,11 +95,15 @@ public:
State state() const; State state() const;
bool hasFilteredResults() const; bool hasFilteredResults() const;
void searchInPeer(PeerData *peer);
void onFilterUpdate(QString newFilter, bool force = false); void onFilterUpdate(QString newFilter, bool force = false);
void onHashtagFilterUpdate(QStringRef newFilter); void onHashtagFilterUpdate(QStringRef newFilter);
void itemRemoved(HistoryItem *item); void itemRemoved(HistoryItem *item);
void itemReplaced(HistoryItem *oldItem, HistoryItem *newItem); void itemReplaced(HistoryItem *oldItem, HistoryItem *newItem);
PeerData *updateFromParentDrag(QPoint globalPos);
~DialogsListWidget(); ~DialogsListWidget();
public slots: public slots:
@ -115,6 +121,7 @@ signals:
void dialogToTopFrom(int movedFrom); void dialogToTopFrom(int movedFrom);
void searchMessages(); void searchMessages();
void searchResultChosen(); void searchResultChosen();
void cancelSearchInPeer();
void completeHashtag(QString tag); void completeHashtag(QString tag);
void refreshHashtags(); void refreshHashtags();
@ -154,9 +161,12 @@ private:
void paintDialog(QPainter &p, DialogRow *dialog); void paintDialog(QPainter &p, DialogRow *dialog);
LinkButton _addContactLnk; LinkButton _addContactLnk;
IconedButton _cancelSearchInPeer;
bool _overDelete; bool _overDelete;
PeerData *_searchInPeer;
}; };
class DialogsWidget : public QWidget, public Animated, public RPCSender { class DialogsWidget : public QWidget, public Animated, public RPCSender {
@ -171,10 +181,18 @@ public:
void peopleReceived(const MTPcontacts_Found &result, mtpRequestId req); void peopleReceived(const MTPcontacts_Found &result, mtpRequestId req);
bool addNewContact(int32 uid, bool show = true); bool addNewContact(int32 uid, bool show = true);
void dragEnterEvent(QDragEnterEvent *e);
void dragMoveEvent(QDragMoveEvent *e);
void dragLeaveEvent(QDragLeaveEvent *e);
void dropEvent(QDropEvent *e);
void updateDragInScroll(bool inScroll);
void resizeEvent(QResizeEvent *e); void resizeEvent(QResizeEvent *e);
void keyPressEvent(QKeyEvent *e); void keyPressEvent(QKeyEvent *e);
void paintEvent(QPaintEvent *e); void paintEvent(QPaintEvent *e);
void searchInPeer(PeerData *peer);
void loadDialogs(); void loadDialogs();
void createDialogAtTop(History *history, int32 unreadCount); void createDialogAtTop(History *history, int32 unreadCount);
void dlgUpdated(DialogRow *row); void dlgUpdated(DialogRow *row);
@ -185,8 +203,6 @@ public:
void animShow(const QPixmap &bgAnimCache); void animShow(const QPixmap &bgAnimCache);
bool animStep(float64 ms); bool animStep(float64 ms);
void setInnerFocus();
void destroyData(); void destroyData();
void peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData *&outPeer, MsgId &outMsg) const; void peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData *&outPeer, MsgId &outMsg) const;
@ -220,6 +236,7 @@ public slots:
void onAddContact(); void onAddContact();
void onNewGroup(); void onNewGroup();
bool onCancelSearch(); bool onCancelSearch();
void onCancelSearchInPeer();
void onFilterCursorMoved(int from = -1, int to = -1); void onFilterCursorMoved(int from = -1, int to = -1);
void onCompleteHashtag(QString tag); void onCompleteHashtag(QString tag);
@ -228,10 +245,15 @@ public slots:
bool onSearchMessages(bool searchCache = false); bool onSearchMessages(bool searchCache = false);
void onNeedSearchMessages(); void onNeedSearchMessages();
void onChooseByDrag();
private: private:
bool _drawShadow; bool _drawShadow;
bool _dragInScroll, _dragForward;
QTimer _chooseByDragTimer;
void unreadCountsReceived(const QVector<MTPDialog> &dialogs); void unreadCountsReceived(const QVector<MTPDialog> &dialogs);
bool dialogsFailed(const RPCError &error); bool dialogsFailed(const RPCError &error);
bool contactsFailed(const RPCError &error); bool contactsFailed(const RPCError &error);
@ -242,7 +264,7 @@ private:
mtpRequestId dlgPreloading; mtpRequestId dlgPreloading;
mtpRequestId contactsRequest; mtpRequestId contactsRequest;
FlatInput _filter; InputField _filter;
IconedButton _newGroup, _addContact, _cancelSearch; IconedButton _newGroup, _addContact, _cancelSearch;
ScrollArea scroll; ScrollArea scroll;
DialogsListWidget list; DialogsListWidget list;
@ -251,6 +273,8 @@ private:
anim::ivalue a_coord, a_bgCoord; anim::ivalue a_coord, a_bgCoord;
anim::fvalue a_alpha, a_bgAlpha; anim::fvalue a_alpha, a_bgAlpha;
PeerData *_searchInPeer;
QTimer _searchTimer; QTimer _searchTimer;
QString _searchQuery, _peopleQuery; QString _searchQuery, _peopleQuery;
bool _searchFull, _peopleFull; bool _searchFull, _peopleFull;

View file

@ -384,7 +384,7 @@ void DragArea::dragLeaveEvent(QDragLeaveEvent *e) {
void DragArea::dropEvent(QDropEvent *e) { void DragArea::dropEvent(QDropEvent *e) {
static_cast<HistoryWidget*>(parentWidget())->dropEvent(e); static_cast<HistoryWidget*>(parentWidget())->dropEvent(e);
if (e->isAccepted()) { if (e->isAccepted()) {
emit dropped(e); emit dropped(e->mimeData());
} }
} }
@ -684,10 +684,11 @@ void EmojiColorPicker::drawVariant(Painter &p, int variant) {
p.drawPixmapLeft(w.x() + (st::emojiPanSize.width() - (esize / cIntRetinaFactor())) / 2, w.y() + (st::emojiPanSize.height() - (esize / cIntRetinaFactor())) / 2, width(), App::emojisLarge(), QRect(_variants[variant]->x * esize, _variants[variant]->y * esize, esize, esize)); p.drawPixmapLeft(w.x() + (st::emojiPanSize.width() - (esize / cIntRetinaFactor())) / 2, w.y() + (st::emojiPanSize.height() - (esize / cIntRetinaFactor())) / 2, width(), App::emojisLarge(), QRect(_variants[variant]->x * esize, _variants[variant]->y * esize, esize, esize));
} }
EmojiPanInner::EmojiPanInner(QWidget *parent) : TWidget(parent), EmojiPanInner::EmojiPanInner(QWidget *parent) : TWidget(parent), _maxHeight(int(st::emojiPanMaxHeight)),
_top(0), _selected(-1), _pressedSel(-1), _pickerSel(-1), _picker(this), _top(0), _selected(-1), _pressedSel(-1), _pickerSel(-1), _picker(this),
_switcherHover(0), _stickersWidth(st::emojiPanHeaderFont->m.width(lang(lng_switch_stickers))) { _switcherHover(0), _stickersWidth(st::emojiPanHeaderFont->m.width(lang(lng_switch_stickers))) {
resize(st::emojiPanFullSize.width(), countHeight()); resize(st::emojiPanWidth, countHeight());
setMouseTracking(true); setMouseTracking(true);
setFocusPolicy(Qt::NoFocus); setFocusPolicy(Qt::NoFocus);
@ -709,6 +710,11 @@ _switcherHover(0), _stickersWidth(st::emojiPanHeaderFont->m.width(lang(lng_switc
connect(&_picker, SIGNAL(hidden()), this, SLOT(onPickerHidden())); connect(&_picker, SIGNAL(hidden()), this, SLOT(onPickerHidden()));
} }
void EmojiPanInner::setMaxHeight(int32 h) {
_maxHeight = h;
resize(st::emojiPanWidth, countHeight());
}
void EmojiPanInner::setScrollTop(int top) { void EmojiPanInner::setScrollTop(int top) {
if (top == _top) return; if (top == _top) return;
@ -1131,10 +1137,11 @@ void EmojiPanInner::showEmojiPack(DBIEmojiTab packIndex) {
update(); update();
} }
StickerPanInner::StickerPanInner(QWidget *parent) : TWidget(parent), StickerPanInner::StickerPanInner(QWidget *parent) : TWidget(parent), _maxHeight(st::emojiPanMaxHeight),
_top(0), _selected(-1), _pressedSel(-1), _top(0), _selected(-1), _pressedSel(-1),
_switcherHover(0), _emojiWidth(st::emojiPanHeaderFont->m.width(lang(lng_switch_emoji))) { _switcherHover(0), _emojiWidth(st::emojiPanHeaderFont->m.width(lang(lng_switch_emoji))) {
resize(st::emojiPanFullSize.width(), countHeight()); resize(st::emojiPanWidth, countHeight());
setMouseTracking(true); setMouseTracking(true);
setFocusPolicy(Qt::NoFocus); setFocusPolicy(Qt::NoFocus);
@ -1143,6 +1150,11 @@ _switcherHover(0), _emojiWidth(st::emojiPanHeaderFont->m.width(lang(lng_switch_e
refreshStickers(); refreshStickers();
} }
void StickerPanInner::setMaxHeight(int32 h) {
_maxHeight = h;
resize(st::emojiPanWidth, countHeight());
}
void StickerPanInner::setScrollTop(int top) { void StickerPanInner::setScrollTop(int top) {
if (top == _top) return; if (top == _top) return;
@ -1154,9 +1166,9 @@ void StickerPanInner::setScrollTop(int top) {
} }
int StickerPanInner::countHeight() { int StickerPanInner::countHeight() {
int result = 0, minLastH = st::emojiPanFullSize.height() - st::rbEmoji.height - st::stickerPanPadding; int result = 0, minLastH = _maxHeight - st::rbEmoji.height - st::stickerPanPadding;
for (int i = 0; i < _sets.size(); ++i) { for (int i = 0; i < _sets.size(); ++i) {
int cnt = _sets.at(i).size(), rows = (cnt / StickerPanPerRow) + ((cnt % StickerPanPerRow) ? 1 : 0); int cnt = _sets.at(i).pack.size(), rows = (cnt / StickerPanPerRow) + ((cnt % StickerPanPerRow) ? 1 : 0);
int h = st::emojiPanHeader + rows * st::stickerPanSize.height(); int h = st::emojiPanHeader + rows * st::stickerPanSize.height();
if (i == _sets.size() - 1 && h < minLastH) h = minLastH; if (i == _sets.size() - 1 && h < minLastH) h = minLastH;
result += h; result += h;
@ -1174,21 +1186,21 @@ void StickerPanInner::paintEvent(QPaintEvent *e) {
int32 y, tilly = 0; int32 y, tilly = 0;
for (int c = 0, l = _sets.size(); c < l; ++c) { for (int c = 0, l = _sets.size(); c < l; ++c) {
y = tilly; y = tilly;
int32 size = _sets.at(c).size(); int32 size = _sets.at(c).pack.size();
int32 rows = (size / StickerPanPerRow) + ((size % StickerPanPerRow) ? 1 : 0); int32 rows = (size / StickerPanPerRow) + ((size % StickerPanPerRow) ? 1 : 0);
tilly = y + st::emojiPanHeader + (rows * st::stickerPanSize.height()); tilly = y + st::emojiPanHeader + (rows * st::stickerPanSize.height());
if (r.top() >= tilly) continue; if (r.top() >= tilly) continue;
bool special = (_setIds[c] == DefaultStickerSetId || _setIds[c] == RecentStickerSetId); bool special = (_sets[c].flags & MTPDstickerSet_flag_official);
y += st::emojiPanHeader; y += st::emojiPanHeader;
QString title = _titles[c]; QString title = _sets[c].title;
if (r.bottom() <= y) { if (r.bottom() <= y) {
p.setFont(st::emojiPanHeaderFont->f); p.setFont(st::emojiPanHeaderFont->f);
p.setPen(st::emojiPanHeaderColor->p); p.setPen(st::emojiPanHeaderColor->p);
p.drawTextLeft(st::emojiPanHeaderLeft, qMax(y - int(st::emojiPanHeader), _top) + st::emojiPanHeaderTop, width(), title); p.drawTextLeft(st::emojiPanHeaderLeft, qMax(y - int(st::emojiPanHeader), _top) + st::emojiPanHeaderTop, width(), title);
if (!special && y >= _top + 2 * st::emojiPanHeader) { if (!special && y >= _top + 2 * st::emojiPanHeader) {
p.setOpacity(st::stickerPanDeleteOpacity + (1 - st::stickerPanDeleteOpacity) * _hovers[c][size]); p.setOpacity(st::stickerPanDeleteOpacity + (1 - st::stickerPanDeleteOpacity) * _sets[c].hovers[size]);
p.drawSpriteRight(QPoint(st::emojiPanHeaderLeft, y - (st::emojiPanHeader + st::notifyClose.icon.pxHeight()) / 2), width(), st::notifyClose.icon); p.drawSpriteRight(QPoint(st::emojiPanHeaderLeft, y - (st::emojiPanHeader + st::notifyClose.icon.pxHeight()) / 2), width(), st::notifyClose.icon);
p.setOpacity(1); p.setOpacity(1);
} }
@ -1201,10 +1213,10 @@ void StickerPanInner::paintEvent(QPaintEvent *e) {
int32 index = i * StickerPanPerRow + j; int32 index = i * StickerPanPerRow + j;
if (index >= size) break; if (index >= size) break;
float64 hover = _hovers[c][index]; float64 hover = _sets[c].hovers[index];
DocumentData *sticker = _sets[c][index]; DocumentData *sticker = _sets[c].pack[index];
if (!sticker->sticker) continue; if (!sticker->sticker()) continue;
QPoint pos(st::stickerPanPadding + j * st::stickerPanSize.width(), y + i * st::stickerPanSize.height()); QPoint pos(st::stickerPanPadding + j * st::stickerPanSize.width(), y + i * st::stickerPanSize.height());
if (hover > 0) { if (hover > 0) {
@ -1223,11 +1235,11 @@ void StickerPanInner::paintEvent(QPaintEvent *e) {
if (!sticker->loader && sticker->status != FileFailed && !already && !hasdata) { if (!sticker->loader && sticker->status != FileFailed && !already && !hasdata) {
sticker->save(QString()); sticker->save(QString());
} }
if (sticker->sticker->img->isNull() && (already || hasdata)) { if (sticker->sticker()->img->isNull() && (already || hasdata)) {
if (already) { if (already) {
sticker->sticker->img = ImagePtr(sticker->already()); sticker->sticker()->img = ImagePtr(sticker->already());
} else { } else {
sticker->sticker->img = ImagePtr(sticker->data); sticker->sticker()->img = ImagePtr(sticker->data);
} }
} }
} }
@ -1240,12 +1252,12 @@ void StickerPanInner::paintEvent(QPaintEvent *e) {
QPoint ppos = pos + QPoint((st::stickerPanSize.width() - w) / 2, (st::stickerPanSize.height() - h) / 2); QPoint ppos = pos + QPoint((st::stickerPanSize.width() - w) / 2, (st::stickerPanSize.height() - h) / 2);
if (goodThumb) { if (goodThumb) {
p.drawPixmapLeft(ppos, width(), sticker->thumb->pix(w, h)); p.drawPixmapLeft(ppos, width(), sticker->thumb->pix(w, h));
} else if (!sticker->sticker->img->isNull()) { } else if (!sticker->sticker()->img->isNull()) {
p.drawPixmapLeft(ppos, width(), sticker->sticker->img->pix(w, h)); p.drawPixmapLeft(ppos, width(), sticker->sticker()->img->pix(w, h));
} }
if (hover > 0 && _setIds[c] == RecentStickerSetId && _custom.at(index)) { if (hover > 0 && _sets[c].id == RecentStickerSetId && _custom.at(index)) {
float64 xHover = _hovers[c][_sets[c].size() + index]; float64 xHover = _sets[c].hovers[_sets[c].pack.size() + index];
QPoint xPos = pos + QPoint(st::stickerPanSize.width() - st::stickerPanDelete.pxWidth(), 0); QPoint xPos = pos + QPoint(st::stickerPanSize.width() - st::stickerPanDelete.pxWidth(), 0);
p.setOpacity(hover * (xHover + (1 - xHover) * st::stickerPanDeleteOpacity)); p.setOpacity(hover * (xHover + (1 - xHover) * st::stickerPanDeleteOpacity));
@ -1258,7 +1270,7 @@ void StickerPanInner::paintEvent(QPaintEvent *e) {
if (y - st::emojiPanHeader < _top) { if (y - st::emojiPanHeader < _top) {
p.fillRect(QRect(0, qMin(_top, tilly - int(st::emojiPanHeader)), width(), st::emojiPanHeader), st::emojiPanHeaderBg->b); p.fillRect(QRect(0, qMin(_top, tilly - int(st::emojiPanHeader)), width(), st::emojiPanHeader), st::emojiPanHeaderBg->b);
} else if (!special && y >= _top + 2 * st::emojiPanHeader) { } else if (!special && y >= _top + 2 * st::emojiPanHeader) {
p.setOpacity(st::stickerPanDeleteOpacity + (1 - st::stickerPanDeleteOpacity) * _hovers[c][size]); p.setOpacity(st::stickerPanDeleteOpacity + (1 - st::stickerPanDeleteOpacity) * _sets[c].hovers[size]);
p.drawSpriteRight(QPoint(st::emojiPanHeaderLeft, y - (st::emojiPanHeader + st::notifyClose.icon.pxHeight()) / 2), width(), st::notifyClose.icon); p.drawSpriteRight(QPoint(st::emojiPanHeaderLeft, y - (st::emojiPanHeader + st::notifyClose.icon.pxHeight()) / 2), width(), st::notifyClose.icon);
p.setOpacity(1); p.setOpacity(1);
} }
@ -1293,15 +1305,15 @@ void StickerPanInner::mouseReleaseEvent(QMouseEvent *e) {
emit switchToEmoji(); emit switchToEmoji();
return; return;
} }
if (_selected >= MatrixRowShift * _setIds.size()) { if (_selected >= MatrixRowShift * _sets.size()) {
return; return;
} }
int tab = (_selected / MatrixRowShift), sel = _selected % MatrixRowShift; int tab = (_selected / MatrixRowShift), sel = _selected % MatrixRowShift;
if (_setIds[tab] == RecentStickerSetId && sel >= _sets[tab].size() && sel < _sets[tab].size() * 2 && _custom.at(sel - _sets[tab].size())) { if (_sets[tab].id == RecentStickerSetId && sel >= _sets[tab].pack.size() && sel < _sets[tab].pack.size() * 2 && _custom.at(sel - _sets[tab].pack.size())) {
clearSelection(true); clearSelection(true);
bool refresh = false; bool refresh = false;
DocumentData *sticker = _sets[tab].at(sel - _sets[tab].size()); DocumentData *sticker = _sets[tab].pack.at(sel - _sets[tab].pack.size());
RecentStickerPack &recent(cGetRecentStickers()); RecentStickerPack &recent(cGetRecentStickers());
for (int32 i = 0, l = recent.size(); i < l; ++i) { for (int32 i = 0, l = recent.size(); i < l; ++i) {
if (recent.at(i).first == sticker) { if (recent.at(i).first == sticker) {
@ -1333,10 +1345,10 @@ void StickerPanInner::mouseReleaseEvent(QMouseEvent *e) {
} }
return; return;
} }
if (sel < _sets[tab].size()) { if (sel < _sets[tab].pack.size()) {
emit selected(_sets[tab][sel]); emit selected(_sets[tab].pack[sel]);
} else if (sel == _sets[tab].size()) { } else if (sel == _sets[tab].pack.size()) {
emit removing(_setIds[tab]); emit removing(_sets[tab].id);
} }
} }
@ -1363,7 +1375,7 @@ void StickerPanInner::clearSelection(bool fast) {
if (fast) { if (fast) {
for (Animations::const_iterator i = _animations.cbegin(); i != _animations.cend(); ++i) { for (Animations::const_iterator i = _animations.cbegin(); i != _animations.cend(); ++i) {
int index = qAbs(i.key()) - 1, tab = (index / MatrixRowShift), sel = index % MatrixRowShift; int index = qAbs(i.key()) - 1, tab = (index / MatrixRowShift), sel = index % MatrixRowShift;
(index == SwitcherSelected ? _switcherHover : _hovers[tab][sel]) = 0; (index == SwitcherSelected ? _switcherHover : _sets[tab].hovers[sel]) = 0;
} }
_animations.clear(); _animations.clear();
_selected = _pressedSel = -1; _selected = _pressedSel = -1;
@ -1377,14 +1389,9 @@ void StickerPanInner::refreshStickers() {
clearSelection(true); clearSelection(true);
const StickerSets &sets(cStickerSets()); const StickerSets &sets(cStickerSets());
_setIds.clear(); _setIds.reserve(sets.size() + 1);
_sets.clear(); _sets.reserve(sets.size() + 1); _sets.clear(); _sets.reserve(sets.size() + 1);
_hovers.clear(); _hovers.reserve(sets.size() + 1);
_titles.clear(); _titles.reserve(sets.size() + 1);
refreshRecent(false); refreshRecent(false);
appendSet(DefaultStickerSetId);
for (StickerSetsOrder::const_iterator i = cStickerSetsOrder().cbegin(), e = cStickerSetsOrder().cend(); i != e; ++i) { for (StickerSetsOrder::const_iterator i = cStickerSetsOrder().cbegin(), e = cStickerSetsOrder().cend(); i != e; ++i) {
appendSet(*i); appendSet(*i);
} }
@ -1400,11 +1407,11 @@ void StickerPanInner::refreshStickers() {
void StickerPanInner::preloadImages() { void StickerPanInner::preloadImages() {
uint64 ms = getms(); uint64 ms = getms();
for (int32 i = 0, l = _sets.size(), k = 0; i < l; ++i) { for (int32 i = 0, l = _sets.size(), k = 0; i < l; ++i) {
for (int32 j = 0, n = _sets.at(i).size(); j < n; ++j) { for (int32 j = 0, n = _sets.at(i).pack.size(); j < n; ++j) {
if (++k > StickerPanPerRow * (StickerPanPerRow + 1)) break; if (++k > StickerPanPerRow * (StickerPanPerRow + 1)) break;
DocumentData *sticker = _sets.at(i).at(j); DocumentData *sticker = _sets.at(i).pack.at(j);
if (!sticker || !sticker->sticker) continue; if (!sticker || !sticker->sticker()) continue;
bool goodThumb = !sticker->thumb->isNull() && ((sticker->thumb->width() >= 128) || (sticker->thumb->height() >= 128)); bool goodThumb = !sticker->thumb->isNull() && ((sticker->thumb->width() >= 128) || (sticker->thumb->height() >= 128));
if (goodThumb) { if (goodThumb) {
@ -1430,14 +1437,14 @@ void StickerPanInner::preloadImages() {
uint64 StickerPanInner::currentSet(int yOffset) const { uint64 StickerPanInner::currentSet(int yOffset) const {
int y, ytill = 0; int y, ytill = 0;
for (int i = 0, l = _sets.size(); i < l; ++i) { for (int i = 0, l = _sets.size(); i < l; ++i) {
int cnt = _sets.at(i).size(); int cnt = _sets.at(i).pack.size();
y = ytill; y = ytill;
ytill = y + st::emojiPanHeader + ((cnt / StickerPanPerRow) + ((cnt % StickerPanPerRow) ? 1 : 0)) * st::stickerPanSize.height(); ytill = y + st::emojiPanHeader + ((cnt / StickerPanPerRow) + ((cnt % StickerPanPerRow) ? 1 : 0)) * st::stickerPanSize.height();
if (yOffset < ytill) { if (yOffset < ytill) {
return _setIds.at(i); return _sets.at(i).id;
} }
} }
return _setIds.isEmpty() ? RecentStickerSetId : _setIds.back(); return _sets.isEmpty() ? RecentStickerSetId : _sets.back().id;
} }
void StickerPanInner::appendSet(uint64 setId) { void StickerPanInner::appendSet(uint64 setId) {
@ -1450,11 +1457,9 @@ void StickerPanInner::appendSet(uint64 setId) {
for (int32 i = 0, l = it->stickers.size(); i < l; ++i) { for (int32 i = 0, l = it->stickers.size(); i < l; ++i) {
pack.push_back(it->stickers.at(i)); pack.push_back(it->stickers.at(i));
} }
_setIds.push_back(it->id);
_sets.push_back(pack);
_hovers.push_back(QVector<float64>(it->stickers.size() + 1, 0));
int32 availw = width() - st::emojiPanHeaderLeft - st::emojiSwitchSkip - _emojiWidth - (st::emojiSwitchSkip - st::emojiSwitchImgSkip); int32 availw = width() - st::emojiPanHeaderLeft - st::emojiSwitchSkip - _emojiWidth - (st::emojiSwitchSkip - st::emojiSwitchImgSkip);
_titles.push_back(st::emojiPanHeaderFont->m.elidedText(it->title, Qt::ElideRight, availw)); QString title = st::emojiPanHeaderFont->m.elidedText(it->title, Qt::ElideRight, availw);
_sets.push_back(DisplayedSet(it->id, it->flags, title, pack.size() + 1, pack));
} }
void StickerPanInner::refreshRecent(bool performResize) { void StickerPanInner::refreshRecent(bool performResize) {
@ -1462,11 +1467,8 @@ void StickerPanInner::refreshRecent(bool performResize) {
clearSelection(true); clearSelection(true);
StickerSets::const_iterator customIt = cStickerSets().constFind(CustomStickerSetId); StickerSets::const_iterator customIt = cStickerSets().constFind(CustomStickerSetId);
if (cGetRecentStickers().isEmpty() && (customIt == cStickerSets().cend() || customIt->stickers.isEmpty())) { if (cGetRecentStickers().isEmpty() && (customIt == cStickerSets().cend() || customIt->stickers.isEmpty())) {
if (!_setIds.isEmpty() && _setIds.at(0) == RecentStickerSetId) { if (!_sets.isEmpty() && _sets.at(0).id == RecentStickerSetId) {
_setIds.pop_front();
_sets.pop_front(); _sets.pop_front();
_hovers.pop_front();
_titles.pop_front();
} }
} else { } else {
StickerPack recent; StickerPack recent;
@ -1489,14 +1491,11 @@ void StickerPanInner::refreshRecent(bool performResize) {
_custom.push_back(true); _custom.push_back(true);
} }
} }
if (_setIds.isEmpty() || _setIds.at(0) != RecentStickerSetId) { if (_sets.isEmpty() || _sets.at(0).id != RecentStickerSetId) {
_setIds.push_front(RecentStickerSetId); _sets.push_back(DisplayedSet(RecentStickerSetId, MTPDstickerSet_flag_official, lang(lng_emoji_category0), recent.size() * 2, recent));
_hovers.push_back(QVector<float64>(recent.size() * 2, 0));
_sets.push_back(recent);
_titles.push_back(lang(lng_emoji_category0));
} else { } else {
_sets[0] = recent; _sets[0].pack = recent;
_hovers[0].resize(recent.size() * 2); _sets[0].hovers.resize(recent.size() * 2);
} }
} }
@ -1510,14 +1509,14 @@ void StickerPanInner::refreshRecent(bool performResize) {
void StickerPanInner::fillIcons(QVector<StickerIcon> &icons) { void StickerPanInner::fillIcons(QVector<StickerIcon> &icons) {
icons.clear(); icons.clear();
if (_setIds.isEmpty()) return; if (_sets.isEmpty()) return;
icons.reserve(_sets.size()); icons.reserve(_sets.size());
int32 i = 0; int32 i = 0;
if (_setIds.at(0) == RecentStickerSetId) ++i; if (_sets.at(0).id == RecentStickerSetId) ++i;
if (i > 0) icons.push_back(StickerIcon()); if (i > 0) icons.push_back(StickerIcon());
for (int32 l = _sets.size(); i < l; ++i) { for (int32 l = _sets.size(); i < l; ++i) {
DocumentData *s = _sets.at(i).at(0); DocumentData *s = _sets.at(i).pack.at(0);
int32 availw = st::rbEmoji.width - 2 * st::stickerIconPadding, availh = st::rbEmoji.height - 2 * st::stickerIconPadding; int32 availw = st::rbEmoji.width - 2 * st::stickerIconPadding, availh = st::rbEmoji.height - 2 * st::stickerIconPadding;
int32 thumbw = s->thumb->width(), thumbh = s->thumb->height(), pixw = 1, pixh = 1; int32 thumbw = s->thumb->width(), thumbh = s->thumb->height(), pixw = 1, pixh = 1;
if (availw * thumbh > availh * thumbw) { if (availw * thumbh > availh * thumbw) {
@ -1529,7 +1528,7 @@ void StickerPanInner::fillIcons(QVector<StickerIcon> &icons) {
} }
if (pixw < 1) pixw = 1; if (pixw < 1) pixw = 1;
if (pixh < 1) pixh = 1; if (pixh < 1) pixh = 1;
icons.push_back(StickerIcon(_setIds.at(i), s, pixw, pixh)); icons.push_back(StickerIcon(_sets.at(i).id, s, pixw, pixh));
} }
} }
@ -1547,25 +1546,27 @@ void StickerPanInner::updateSelected() {
} }
} else { } else {
int y, ytill = 0, sx = (rtl() ? width() - p.x() : p.x()) - st::stickerPanPadding; int y, ytill = 0, sx = (rtl() ? width() - p.x() : p.x()) - st::stickerPanPadding;
for (int c = 0, l = _setIds.size(); c < l; ++c) { for (int c = 0, l = _sets.size(); c < l; ++c) {
int cnt = _sets[c].size(); const DisplayedSet &set(_sets.at(c));
bool special = _setIds[c] == DefaultStickerSetId || _setIds[c] == RecentStickerSetId; int cnt = set.pack.size();
bool special = (set.flags & MTPDstickerSet_flag_official);
y = ytill; y = ytill;
ytill = y + st::emojiPanHeader + ((cnt / StickerPanPerRow) + ((cnt % StickerPanPerRow) ? 1 : 0)) * st::stickerPanSize.height(); ytill = y + st::emojiPanHeader + ((cnt / StickerPanPerRow) + ((cnt % StickerPanPerRow) ? 1 : 0)) * st::stickerPanSize.height();
if (p.y() >= y && p.y() < ytill) { if (p.y() >= y && p.y() < ytill) {
if (!special && p.y() >= y && p.y() < y + st::emojiPanHeader && sx + st::stickerPanPadding >= width() - st::emojiPanHeaderLeft - st::notifyClose.icon.pxWidth() && sx + st::stickerPanPadding < width() - st::emojiPanHeaderLeft) { if (!special && p.y() >= y && p.y() < y + st::emojiPanHeader && sx + st::stickerPanPadding >= width() - st::emojiPanHeaderLeft - st::notifyClose.icon.pxWidth() && sx + st::stickerPanPadding < width() - st::emojiPanHeaderLeft) {
selIndex = c * MatrixRowShift + _sets[c].size(); selIndex = c * MatrixRowShift + set.pack.size();
} else { } else {
y += st::emojiPanHeader; y += st::emojiPanHeader;
if (p.y() >= y && sx >= 0 && sx < StickerPanPerRow * st::stickerPanSize.width()) { if (p.y() >= y && sx >= 0 && sx < StickerPanPerRow * st::stickerPanSize.width()) {
selIndex = qFloor((p.y() - y) / st::stickerPanSize.height()) * StickerPanPerRow + qFloor(sx / st::stickerPanSize.width()); selIndex = qFloor((p.y() - y) / st::stickerPanSize.height()) * StickerPanPerRow + qFloor(sx / st::stickerPanSize.width());
if (selIndex >= _sets[c].size()) { if (selIndex >= set.pack.size()) {
selIndex = -1; selIndex = -1;
} else { } else {
if (_setIds[c] == RecentStickerSetId && _custom[selIndex]) { if (set.id == RecentStickerSetId && _custom[selIndex]) {
int32 inx = sx - (selIndex % StickerPanPerRow) * st::stickerPanSize.width(), iny = p.y() - y - ((selIndex / StickerPanPerRow) * st::stickerPanSize.height()); int32 inx = sx - (selIndex % StickerPanPerRow) * st::stickerPanSize.width(), iny = p.y() - y - ((selIndex / StickerPanPerRow) * st::stickerPanSize.height());
if (inx >= st::stickerPanSize.width() - st::stickerPanDelete.pxWidth() && iny < st::stickerPanDelete.pxHeight()) { if (inx >= st::stickerPanSize.width() - st::stickerPanDelete.pxWidth() && iny < st::stickerPanDelete.pxHeight()) {
selIndex += _sets[c].size(); selIndex += set.pack.size();
} }
} }
selIndex += c * MatrixRowShift; selIndex += c * MatrixRowShift;
@ -1579,13 +1580,13 @@ void StickerPanInner::updateSelected() {
bool startanim = false; bool startanim = false;
int oldSel = _selected, oldSelTab = oldSel / MatrixRowShift, xOldSel = -1, newSel = selIndex, newSelTab = newSel / MatrixRowShift, xNewSel = -1; int oldSel = _selected, oldSelTab = oldSel / MatrixRowShift, xOldSel = -1, newSel = selIndex, newSelTab = newSel / MatrixRowShift, xNewSel = -1;
if (oldSel >= 0 && oldSelTab < _setIds.size() && _setIds[oldSelTab] == RecentStickerSetId && oldSel >= oldSelTab * MatrixRowShift + _sets[oldSelTab].size()) { if (oldSel >= 0 && oldSelTab < _sets.size() && _sets[oldSelTab].id == RecentStickerSetId && oldSel >= oldSelTab * MatrixRowShift + _sets[oldSelTab].pack.size()) {
xOldSel = oldSel; xOldSel = oldSel;
oldSel -= _sets[oldSelTab].size(); oldSel -= _sets[oldSelTab].pack.size();
} }
if (newSel >= 0 && newSelTab < _setIds.size() && _setIds[newSelTab] == RecentStickerSetId && newSel >= newSelTab * MatrixRowShift + _sets[newSelTab].size()) { if (newSel >= 0 && newSelTab < _sets.size() && _sets[newSelTab].id == RecentStickerSetId && newSel >= newSelTab * MatrixRowShift + _sets[newSelTab].pack.size()) {
xNewSel = newSel; xNewSel = newSel;
newSel -= _sets[newSelTab].size(); newSel -= _sets[newSelTab].pack.size();
} }
if (newSel != oldSel) { if (newSel != oldSel) {
if (oldSel >= 0) { if (oldSel >= 0) {
@ -1630,10 +1631,10 @@ bool StickerPanInner::animStep(float64 ms) {
int index = qAbs(i.key()) - 1, tab = (index / MatrixRowShift), sel = index % MatrixRowShift; int index = qAbs(i.key()) - 1, tab = (index / MatrixRowShift), sel = index % MatrixRowShift;
float64 dt = float64(now - i.value()) / st::emojiPanDuration; float64 dt = float64(now - i.value()) / st::emojiPanDuration;
if (dt >= 1) { if (dt >= 1) {
(index == SwitcherSelected ? _switcherHover : _hovers[tab][sel]) = (i.key() > 0) ? 1 : 0; (index == SwitcherSelected ? _switcherHover : _sets[tab].hovers[sel]) = (i.key() > 0) ? 1 : 0;
i = _animations.erase(i); i = _animations.erase(i);
} else { } else {
(index == SwitcherSelected ? _switcherHover : _hovers[tab][sel]) = (i.key() > 0) ? dt : (1 - dt); (index == SwitcherSelected ? _switcherHover : _sets[tab].hovers[sel]) = (i.key() > 0) ? dt : (1 - dt);
++i; ++i;
} }
} }
@ -1645,9 +1646,9 @@ void StickerPanInner::showStickerSet(uint64 setId) {
clearSelection(true); clearSelection(true);
int32 y = 0; int32 y = 0;
for (int c = 0; c < _setIds.size(); ++c) { for (int c = 0; c < _sets.size(); ++c) {
if (_setIds.at(c) == setId) break; if (_sets.at(c).id == setId) break;
int rows = (_sets[c].size() / StickerPanPerRow) + ((_sets[c].size() % StickerPanPerRow) ? 1 : 0); int rows = (_sets[c].pack.size() / StickerPanPerRow) + ((_sets[c].pack.size() % StickerPanPerRow) ? 1 : 0);
y += st::emojiPanHeader + rows * st::stickerPanSize.height(); y += st::emojiPanHeader + rows * st::stickerPanSize.height();
} }
@ -1658,7 +1659,7 @@ void StickerPanInner::showStickerSet(uint64 setId) {
update(); update();
} }
EmojiPan::EmojiPan(QWidget *parent) : TWidget(parent), EmojiPan::EmojiPan(QWidget *parent) : TWidget(parent), _maxHeight(st::emojiPanMaxHeight),
_horizontal(false), _noTabUpdate(false), _hiding(false), a_opacity(0), _shadow(st::dropdownDef.shadow), _horizontal(false), _noTabUpdate(false), _hiding(false), a_opacity(0), _shadow(st::dropdownDef.shadow),
_recent(this , qsl("emoji_group"), dbietRecent , QString(), true , st::rbEmojiRecent), _recent(this , qsl("emoji_group"), dbietRecent , QString(), true , st::rbEmojiRecent),
_people(this , qsl("emoji_group"), dbietPeople , QString(), false, st::rbEmojiPeople), _people(this , qsl("emoji_group"), dbietPeople , QString(), false, st::rbEmojiPeople),
@ -1679,12 +1680,12 @@ e_scroll(this, st::emojiScroll), e_inner(), s_scroll(this, st::emojiScroll), s_i
s_scroll.setFocusPolicy(Qt::NoFocus); s_scroll.setFocusPolicy(Qt::NoFocus);
s_scroll.viewport()->setFocusPolicy(Qt::NoFocus); s_scroll.viewport()->setFocusPolicy(Qt::NoFocus);
_width = st::dropdownDef.padding.left() + st::emojiPanFullSize.width() + st::dropdownDef.padding.right(); _width = st::dropdownDef.padding.left() + st::emojiPanWidth + st::dropdownDef.padding.right();
_height = st::dropdownDef.padding.top() + st::emojiPanFullSize.height() + st::dropdownDef.padding.bottom(); _height = st::dropdownDef.padding.top() + _maxHeight + st::dropdownDef.padding.bottom();
resize(_width, _height); resize(_width, _height);
e_scroll.resize(st::emojiPanFullSize.width(), st::emojiPanFullSize.height() - st::rbEmoji.height); e_scroll.resize(st::emojiPanWidth, _maxHeight - st::rbEmoji.height);
s_scroll.resize(st::emojiPanFullSize.width(), st::emojiPanFullSize.height() - st::rbEmoji.height); s_scroll.resize(st::emojiPanWidth, _maxHeight - st::rbEmoji.height);
e_scroll.move(st::dropdownDef.padding.left(), st::dropdownDef.padding.top()); e_scroll.move(st::dropdownDef.padding.left(), st::dropdownDef.padding.top());
e_scroll.setWidget(&e_inner); e_scroll.setWidget(&e_inner);
@ -1696,8 +1697,8 @@ e_scroll(this, st::emojiScroll), e_inner(), s_scroll(this, st::emojiScroll), s_i
s_inner.setAttribute(Qt::WA_OpaquePaintEvent); s_inner.setAttribute(Qt::WA_OpaquePaintEvent);
s_scroll.setAutoFillBackground(true); s_scroll.setAutoFillBackground(true);
int32 left = _iconsLeft = st::dropdownDef.padding.left() + (st::emojiPanFullSize.width() - 8 * st::rbEmoji.width) / 2; int32 left = _iconsLeft = st::dropdownDef.padding.left() + (st::emojiPanWidth - 8 * st::rbEmoji.width) / 2;
int32 top = _iconsTop = st::dropdownDef.padding.top() + st::emojiPanFullSize.height() - st::rbEmoji.height; int32 top = _iconsTop = st::dropdownDef.padding.top() + _maxHeight - st::rbEmoji.height;
prepareTab(left, top, _width, _recent); prepareTab(left, top, _width, _recent);
prepareTab(left, top, _width, _people); prepareTab(left, top, _width, _people);
prepareTab(left, top, _width, _nature); prepareTab(left, top, _width, _nature);
@ -1735,6 +1736,41 @@ e_scroll(this, st::emojiScroll), e_inner(), s_scroll(this, st::emojiScroll), s_i
// setAttribute(Qt::WA_AcceptTouchEvents); // setAttribute(Qt::WA_AcceptTouchEvents);
} }
void EmojiPan::setMaxHeight(int32 h) {
h = qMin(int(st::emojiPanMaxHeight), h);
if (h == _maxHeight) return;
int32 was = _maxHeight;
_maxHeight = h;
_height = st::dropdownDef.padding.top() + _maxHeight + st::dropdownDef.padding.bottom();
resize(_width, _height);
if (was > _maxHeight) {
e_scroll.resize(st::emojiPanWidth, _maxHeight - st::rbEmoji.height);
s_scroll.resize(st::emojiPanWidth, _maxHeight - st::rbEmoji.height);
s_inner.setMaxHeight(_maxHeight);
e_inner.setMaxHeight(_maxHeight);
} else {
s_inner.setMaxHeight(_maxHeight);
e_inner.setMaxHeight(_maxHeight);
e_scroll.resize(st::emojiPanWidth, _maxHeight - st::rbEmoji.height);
s_scroll.resize(st::emojiPanWidth, _maxHeight - st::rbEmoji.height);
}
_iconsTop = st::dropdownDef.padding.top() + _maxHeight - st::rbEmoji.height;
_recent.move(_recent.x(), _iconsTop);
_people.move(_people.x(), _iconsTop);
_nature.move(_nature.x(), _iconsTop);
_food.move(_food.x(), _iconsTop);
_celebration.move(_celebration.x(), _iconsTop);
_activity.move(_activity.x(), _iconsTop);
_travel.move(_travel.x(), _iconsTop);
_objects.move(_objects.x(), _iconsTop);
update();
}
void EmojiPan::prepareTab(int32 &left, int32 top, int32 _width, FlatRadiobutton &tab) { void EmojiPan::prepareTab(int32 &left, int32 top, int32 _width, FlatRadiobutton &tab) {
tab.moveToLeft(left, top, _width); tab.moveToLeft(left, top, _width);
left += tab.width(); left += tab.width();
@ -1794,11 +1830,11 @@ void EmojiPan::paintEvent(QPaintEvent *e) {
const StickerIcon &s(_icons.at(i)); const StickerIcon &s(_icons.at(i));
s.sticker->thumb->load(); s.sticker->thumb->load();
QPixmap pix(s.sticker->thumb->pix(s.pixw, s.pixh)); QPixmap pix(s.sticker->thumb->pix(s.pixw, s.pixh));
if (_iconSel == i) { //if (_iconSel == i) {
p.setOpacity(1); // p.setOpacity(1);
} else { //} else {
p.setOpacity(1. * _iconHovers.at(i) + st::stickerIconOpacity * (1 - _iconHovers.at(i))); // p.setOpacity(1. * _iconHovers.at(i) + st::stickerIconOpacity * (1 - _iconHovers.at(i)));
} //}
p.drawPixmapLeft(x + (st::rbEmoji.width - s.pixw) / 2, _iconsTop + (st::rbEmoji.height - s.pixh) / 2, width(), pix); p.drawPixmapLeft(x + (st::rbEmoji.width - s.pixw) / 2, _iconsTop + (st::rbEmoji.height - s.pixh) / 2, width(), pix);
x += st::rbEmoji.width; x += st::rbEmoji.width;
p.setOpacity(1); p.setOpacity(1);
@ -1939,6 +1975,7 @@ void EmojiPan::mouseReleaseEvent(QMouseEvent *e) {
updateSelected(); updateSelected();
if (wasDown == _iconOver && _iconOver >= 0) { if (wasDown == _iconOver && _iconOver >= 0) {
_iconSelX = anim::ivalue(_iconOver * st::rbEmoji.width, _iconOver * st::rbEmoji.width);
s_inner.showStickerSet(_icons.at(_iconOver).setId); s_inner.showStickerSet(_icons.at(_iconOver).setId);
} }
} }
@ -2361,9 +2398,9 @@ void EmojiPan::onSwitch() {
hideAll(); hideAll();
_moveStart = getms(); _moveStart = getms();
a_toCoord = (_stickersShown != rtl()) ? anim::ivalue(st::emojiPanFullSize.width(), 0) : anim::ivalue(-st::emojiPanFullSize.width(), 0); a_toCoord = (_stickersShown != rtl()) ? anim::ivalue(st::emojiPanWidth, 0) : anim::ivalue(-st::emojiPanWidth, 0);
a_toAlpha = anim::fvalue(0, 1); a_toAlpha = anim::fvalue(0, 1);
a_fromCoord = (_stickersShown != rtl()) ? anim::ivalue(0, -st::emojiPanFullSize.width()) : anim::ivalue(0, st::emojiPanFullSize.width()); a_fromCoord = (_stickersShown != rtl()) ? anim::ivalue(0, -st::emojiPanWidth) : anim::ivalue(0, st::emojiPanWidth);
a_fromAlpha = anim::fvalue(1, 0); a_fromAlpha = anim::fvalue(1, 0);
if (!animating()) anim::start(this); if (!animating()) anim::start(this);
@ -2372,7 +2409,7 @@ void EmojiPan::onSwitch() {
void EmojiPan::onRemoveSet(uint64 setId) { void EmojiPan::onRemoveSet(uint64 setId) {
StickerSets::const_iterator it = cStickerSets().constFind(setId); StickerSets::const_iterator it = cStickerSets().constFind(setId);
if (it != cStickerSets().cend() && setId != DefaultStickerSetId && setId != RecentStickerSetId) { if (it != cStickerSets().cend() && !(it->flags & MTPDstickerSet_flag_official)) {
_removingSetId = it->id; _removingSetId = it->id;
ConfirmBox *box = new ConfirmBox(lng_stickers_remove_pack(lt_sticker_pack, it->title)); ConfirmBox *box = new ConfirmBox(lng_stickers_remove_pack(lt_sticker_pack, it->title));
connect(box, SIGNAL(confirmed()), this, SLOT(onRemoveSetSure())); connect(box, SIGNAL(confirmed()), this, SLOT(onRemoveSetSure()));
@ -2384,7 +2421,7 @@ void EmojiPan::onRemoveSet(uint64 setId) {
void EmojiPan::onRemoveSetSure() { void EmojiPan::onRemoveSetSure() {
App::wnd()->hideLayer(); App::wnd()->hideLayer();
StickerSets::iterator it = cRefStickerSets().find(_removingSetId); StickerSets::iterator it = cRefStickerSets().find(_removingSetId);
if (it != cRefStickerSets().cend() && _removingSetId != DefaultStickerSetId && _removingSetId != RecentStickerSetId) { if (it != cRefStickerSets().cend() && !(it->flags & MTPDstickerSet_flag_official)) {
if (it->id && it->access) { if (it->id && it->access) {
MTP::send(MTPmessages_UninstallStickerSet(MTP_inputStickerSetID(MTP_long(it->id), MTP_long(it->access)))); MTP::send(MTPmessages_UninstallStickerSet(MTP_inputStickerSetID(MTP_long(it->id), MTP_long(it->access))));
} else if (!it->shortName.isEmpty()) { } else if (!it->shortName.isEmpty()) {
@ -2424,7 +2461,8 @@ void MentionsInner::paintEvent(QPaintEvent *e) {
QPainter p(this); QPainter p(this);
int32 atwidth = st::mentionFont->m.width('@'), hashwidth = st::mentionFont->m.width('#'); int32 atwidth = st::mentionFont->m.width('@'), hashwidth = st::mentionFont->m.width('#');
int32 availwidth = width() - 2 * st::mentionPadding.left() - st::mentionPhotoSize - 2 * st::mentionPadding.right(); int32 mentionleft = 2 * st::mentionPadding.left() + st::mentionPhotoSize;
int32 mentionwidth = width() - mentionleft - 2 * st::mentionPadding.right();
int32 htagleft = st::btnAttachPhoto.width + st::taMsgField.textMrg.left() - st::dlgShadow, htagwidth = width() - st::mentionPadding.right() - htagleft - st::mentionScroll.width; int32 htagleft = st::btnAttachPhoto.width + st::taMsgField.textMrg.left() - st::dlgShadow, htagwidth = width() - st::mentionPadding.right() - htagleft - st::mentionScroll.width;
int32 from = qFloor(e->rect().top() / st::mentionHeight), to = qFloor(e->rect().bottom() / st::mentionHeight) + 1; int32 from = qFloor(e->rect().top() / st::mentionHeight), to = qFloor(e->rect().bottom() / st::mentionHeight) + 1;
@ -2444,9 +2482,9 @@ void MentionsInner::paintEvent(QPaintEvent *e) {
UserData *user = _rows->at(i); UserData *user = _rows->at(i);
QString first = (_parent->filter().size() < 2) ? QString() : ('@' + user->username.mid(0, _parent->filter().size() - 1)), second = (_parent->filter().size() < 2) ? ('@' + user->username) : user->username.mid(_parent->filter().size() - 1); QString first = (_parent->filter().size() < 2) ? QString() : ('@' + user->username.mid(0, _parent->filter().size() - 1)), second = (_parent->filter().size() < 2) ? ('@' + user->username) : user->username.mid(_parent->filter().size() - 1);
int32 firstwidth = st::mentionFont->m.width(first), secondwidth = st::mentionFont->m.width(second), unamewidth = firstwidth + secondwidth, namewidth = user->nameText.maxWidth(); int32 firstwidth = st::mentionFont->m.width(first), secondwidth = st::mentionFont->m.width(second), unamewidth = firstwidth + secondwidth, namewidth = user->nameText.maxWidth();
if (availwidth < unamewidth + namewidth) { if (mentionwidth < unamewidth + namewidth) {
namewidth = (availwidth * namewidth) / (namewidth + unamewidth); namewidth = (mentionwidth * namewidth) / (namewidth + unamewidth);
unamewidth = availwidth - namewidth; unamewidth = mentionwidth - namewidth;
if (firstwidth < unamewidth + st::mentionFont->elidew) { if (firstwidth < unamewidth + st::mentionFont->elidew) {
if (firstwidth < unamewidth) { if (firstwidth < unamewidth) {
first = st::mentionFont->m.elidedText(first, Qt::ElideRight, unamewidth); first = st::mentionFont->m.elidedText(first, Qt::ElideRight, unamewidth);
@ -2464,10 +2502,10 @@ void MentionsInner::paintEvent(QPaintEvent *e) {
p.setFont(st::mentionFont->f); p.setFont(st::mentionFont->f);
p.setPen((selected ? st::mentionFgOverActive : st::mentionFgActive)->p); p.setPen((selected ? st::mentionFgOverActive : st::mentionFgActive)->p);
p.drawText(2 * st::mentionPadding.left() + st::mentionPhotoSize + namewidth + st::mentionPadding.right(), i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, first); p.drawText(mentionleft + namewidth + st::mentionPadding.right(), i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, first);
if (!second.isEmpty()) { if (!second.isEmpty()) {
p.setPen((selected ? st::mentionFgOver : st::mentionFg)->p); p.setPen((selected ? st::mentionFgOver : st::mentionFg)->p);
p.drawText(2 * st::mentionPadding.left() + st::mentionPhotoSize + namewidth + st::mentionPadding.right() + firstwidth, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, second); p.drawText(mentionleft + namewidth + st::mentionPadding.right() + firstwidth, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, second);
} }
} else if (!_hrows->isEmpty()) { } else if (!_hrows->isEmpty()) {
QString hrow = _hrows->at(i); QString hrow = _hrows->at(i);
@ -2494,63 +2532,42 @@ void MentionsInner::paintEvent(QPaintEvent *e) {
} else { } else {
UserData *user = _crows->at(i).first; UserData *user = _crows->at(i).first;
const BotCommand &command = _crows->at(i).second; const BotCommand *command = _crows->at(i).second;
QString toHighlight = command.command; QString toHighlight = command->command;
int32 botStatus = _parent->chat() ? _parent->chat()->botStatus : -1; int32 botStatus = _parent->chat() ? _parent->chat()->botStatus : -1;
if (hasUsername || botStatus == 0 || botStatus == 2) { if (hasUsername || botStatus == 0 || botStatus == 2) {
toHighlight += '@' + user->username; toHighlight += '@' + user->username;
} }
if (_parent->chat() || botStatus == 0 || botStatus == 2) { if (true || _parent->chat() || botStatus == 0 || botStatus == 2) {
user->photo->load(); user->photo->load();
p.drawPixmap(st::mentionPadding.left(), i * st::mentionHeight + st::mentionPadding.top(), user->photo->pixRounded(st::mentionPhotoSize)); p.drawPixmap(st::mentionPadding.left(), i * st::mentionHeight + st::mentionPadding.top(), user->photo->pixRounded(st::mentionPhotoSize));
} }
int32 addleft = 0, widthleft = htagwidth; int32 addleft = 0, widthleft = mentionwidth;
QString first = (_parent->filter().size() < 2) ? QString() : ('/' + toHighlight.mid(0, _parent->filter().size() - 1)), second = (_parent->filter().size() < 2) ? ('/' + toHighlight) : toHighlight.mid(_parent->filter().size() - 1); QString first = (_parent->filter().size() < 2) ? QString() : ('/' + toHighlight.mid(0, _parent->filter().size() - 1)), second = (_parent->filter().size() < 2) ? ('/' + toHighlight) : toHighlight.mid(_parent->filter().size() - 1);
int32 firstwidth = st::botCommandFont->m.width(first), secondwidth = st::botCommandFont->m.width(second); int32 firstwidth = st::mentionFont->m.width(first), secondwidth = st::mentionFont->m.width(second);
if (htagwidth < firstwidth + secondwidth) { if (widthleft < firstwidth + secondwidth) {
if (htagwidth < firstwidth + st::botCommandFont->elidew) { if (widthleft < firstwidth + st::mentionFont->elidew) {
first = st::botCommandFont->m.elidedText(first + second, Qt::ElideRight, htagwidth); first = st::mentionFont->m.elidedText(first + second, Qt::ElideRight, widthleft);
second = QString(); second = QString();
} else { } else {
second = st::botCommandFont->m.elidedText(second, Qt::ElideRight, htagwidth - firstwidth); second = st::mentionFont->m.elidedText(second, Qt::ElideRight, widthleft - firstwidth);
} }
} }
p.setFont(st::botCommandFont->f); p.setFont(st::mentionFont->f);
if (!first.isEmpty()) { if (!first.isEmpty()) {
p.setPen((selected ? st::mentionFgOverActive : st::mentionFgActive)->p); p.setPen((selected ? st::mentionFgOverActive : st::mentionFgActive)->p);
p.drawText(htagleft, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, first); p.drawText(mentionleft, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, first);
} }
if (!second.isEmpty()) { if (!second.isEmpty()) {
p.setPen((selected ? st::mentionFgOver : st::mentionFg)->p); p.setPen((selected ? st::mentionFgOver : st::mentionFg)->p);
p.drawText(htagleft + firstwidth, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, second); p.drawText(mentionleft + firstwidth, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, second);
} }
addleft += firstwidth + secondwidth + st::mentionPadding.left(); addleft += firstwidth + secondwidth + st::mentionPadding.left();
widthleft -= firstwidth + secondwidth + st::mentionPadding.left(); widthleft -= firstwidth + secondwidth + st::mentionPadding.left();
if (widthleft > st::mentionFont->elidew && !command->descriptionText().isEmpty()) {
QString params = command.params;
if (widthleft > st::mentionFont->elidew && !params.isEmpty()) {
p.setFont(st::mentionFont->f);
int32 paramswidth = st::mentionFont->m.width(params);
if (widthleft < paramswidth) {
params = st::mentionFont->m.elidedText(params, Qt::ElideRight, widthleft);
}
p.setPen((selected ? st::mentionFgOver : st::mentionFg)->p); p.setPen((selected ? st::mentionFgOver : st::mentionFg)->p);
p.drawText(htagleft + addleft, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, params); command->descriptionText().drawElided(p, mentionleft + addleft, i * st::mentionHeight + st::mentionTop, widthleft, 1, style::al_right);
addleft += paramswidth + st::mentionPadding.left();
widthleft -= paramswidth + st::mentionPadding.left();
}
QString description = command.description;
if (widthleft > st::botDescFont->elidew && !description.isEmpty()) {
p.setFont(st::botDescFont->f);
int32 descwidth = st::botDescFont->m.width(description);
if (widthleft < descwidth) {
description = st::botDescFont->m.elidedText(description, Qt::ElideRight, widthleft);
descwidth = st::botDescFont->m.width(description);
}
p.setPen((selected ? st::mentionFgOver : st::mentionFg)->p);
p.drawText(htagleft + addleft + (widthleft - descwidth), i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, description);
} }
} }
} }
@ -2586,6 +2603,15 @@ bool MentionsInner::moveSel(int direction) {
} }
bool MentionsInner::select() { bool MentionsInner::select() {
QString sel = getSelected();
if (!sel.isEmpty()) {
emit chosen(sel);
return true;
}
return false;
}
QString MentionsInner::getSelected() const {
int32 maxSel = (_rows->isEmpty() ? (_hrows->isEmpty() ? _crows->size() : _hrows->size()) : _rows->size()); int32 maxSel = (_rows->isEmpty() ? (_hrows->isEmpty() ? _crows->size() : _hrows->size()) : _rows->size());
if (_sel >= 0 && _sel < maxSel) { if (_sel >= 0 && _sel < maxSel) {
QString result; QString result;
@ -2595,18 +2621,17 @@ bool MentionsInner::select() {
result = '#' + _hrows->at(_sel); result = '#' + _hrows->at(_sel);
} else { } else {
UserData *user = _crows->at(_sel).first; UserData *user = _crows->at(_sel).first;
const BotCommand &command(_crows->at(_sel).second); const BotCommand *command(_crows->at(_sel).second);
int32 botStatus = _parent->chat() ? _parent->chat()->botStatus : -1; int32 botStatus = _parent->chat() ? _parent->chat()->botStatus : -1;
if (botStatus == 0 || botStatus == 2 || _parent->filter().indexOf('@') > 1) { if (botStatus == 0 || botStatus == 2 || _parent->filter().indexOf('@') > 1) {
result = '/' + command.command + '@' + user->username; result = '/' + command->command + '@' + user->username;
} else { } else {
result = '/' + command.command; result = '/' + command->command;
} }
} }
emit chosen(result); return result;
return true;
} }
return false; return QString();
} }
void MentionsInner::mousePressEvent(QMouseEvent *e) { void MentionsInner::mousePressEvent(QMouseEvent *e) {
@ -2732,6 +2757,12 @@ void MentionsDropdown::showFiltered(PeerData *peer, QString start) {
updateFiltered(toDown); updateFiltered(toDown);
} }
bool MentionsDropdown::clearFilteredCommands() {
if (_crows.isEmpty()) return false;
_crows.clear();
return true;
}
void MentionsDropdown::updateFiltered(bool toDown) { void MentionsDropdown::updateFiltered(bool toDown) {
int32 now = unixtime(); int32 now = unixtime();
MentionRows rows; MentionRows rows;
@ -2795,6 +2826,7 @@ void MentionsDropdown::updateFiltered(bool toDown) {
} }
} }
} else if (_user->botInfo) { } else if (_user->botInfo) {
if (!_user->botInfo->inited) App::api()->requestFullPeer(_user);
cnt = _user->botInfo->commands.size(); cnt = _user->botInfo->commands.size();
bots.insert(_user, true); bots.insert(_user, true);
} }
@ -2805,17 +2837,16 @@ void MentionsDropdown::updateFiltered(bool toDown) {
for (MentionRows::const_iterator i = _chat->lastAuthors.cbegin(), e = _chat->lastAuthors.cend(); i != e; ++i) { for (MentionRows::const_iterator i = _chat->lastAuthors.cbegin(), e = _chat->lastAuthors.cend(); i != e; ++i) {
UserData *user = *i; UserData *user = *i;
if (!user->botInfo) continue; if (!user->botInfo) continue;
if (!bots.contains(user)) continue;
if (!user->botInfo->inited) App::api()->requestFullPeer(user); if (!user->botInfo->inited) App::api()->requestFullPeer(user);
if (user->botInfo->commands.isEmpty()) continue; if (user->botInfo->commands.isEmpty()) continue;
bots.remove(user);
for (int32 j = 0, l = user->botInfo->commands.size(); j < l; ++j) { for (int32 j = 0, l = user->botInfo->commands.size(); j < l; ++j) {
if (_filter.size() > 1) { if (_filter.size() > 1) {
QString toFilter = (hasUsername || botStatus == 0 || botStatus == 2) ? user->botInfo->commands.at(j).command + '@' + user->username : user->botInfo->commands.at(j).command; QString toFilter = (hasUsername || botStatus == 0 || botStatus == 2) ? user->botInfo->commands.at(j).command + '@' + user->username : user->botInfo->commands.at(j).command;
if (!toFilter.startsWith(_filter.midRef(1), Qt::CaseInsensitive) || toFilter.size() + 1 == _filter.size()) continue; if (!toFilter.startsWith(_filter.midRef(1), Qt::CaseInsensitive)/* || toFilter.size() + 1 == _filter.size()*/) continue;
} }
crows.push_back(qMakePair(user, user->botInfo->commands.at(j))); crows.push_back(qMakePair(user, &user->botInfo->commands.at(j)));
}
if (!bots.isEmpty()) {
bots.remove(user);
} }
} }
} }
@ -2825,9 +2856,9 @@ void MentionsDropdown::updateFiltered(bool toDown) {
for (int32 j = 0, l = user->botInfo->commands.size(); j < l; ++j) { for (int32 j = 0, l = user->botInfo->commands.size(); j < l; ++j) {
if (_filter.size() > 1) { if (_filter.size() > 1) {
QString toFilter = (hasUsername || botStatus == 0 || botStatus == 2) ? user->botInfo->commands.at(j).command + '@' + user->username : user->botInfo->commands.at(j).command; QString toFilter = (hasUsername || botStatus == 0 || botStatus == 2) ? user->botInfo->commands.at(j).command + '@' + user->username : user->botInfo->commands.at(j).command;
if (!toFilter.startsWith(_filter.midRef(1), Qt::CaseInsensitive) || toFilter.size() + 1 == _filter.size()) continue; if (!toFilter.startsWith(_filter.midRef(1), Qt::CaseInsensitive)/* || toFilter.size() + 1 == _filter.size()*/) continue;
} }
crows.push_back(qMakePair(user, user->botInfo->commands.at(j))); crows.push_back(qMakePair(user, &user->botInfo->commands.at(j)));
} }
} }
} }
@ -2836,10 +2867,10 @@ void MentionsDropdown::updateFiltered(bool toDown) {
if (rows.isEmpty() && hrows.isEmpty() && crows.isEmpty()) { if (rows.isEmpty() && hrows.isEmpty() && crows.isEmpty()) {
if (!isHidden()) { if (!isHidden()) {
hideStart(); hideStart();
}
_rows.clear(); _rows.clear();
_hrows.clear(); _hrows.clear();
_crows.clear(); _crows.clear();
}
} else { } else {
_rows = rows; _rows = rows;
_hrows = hrows; _hrows = hrows;
@ -2869,13 +2900,13 @@ void MentionsDropdown::recount(bool toDown) {
int32 h = (_rows.isEmpty() ? (_hrows.isEmpty() ? _crows.size() : _hrows.size()) : _rows.size()) * st::mentionHeight, oldst = _scroll.scrollTop(), st = oldst; int32 h = (_rows.isEmpty() ? (_hrows.isEmpty() ? _crows.size() : _hrows.size()) : _rows.size()) * st::mentionHeight, oldst = _scroll.scrollTop(), st = oldst;
if (_inner.height() != h) { if (_inner.height() != h) {
st += h - _inner.height(); // st += h - _inner.height();
_inner.resize(width(), h); _inner.resize(width(), h);
} }
if (h > _boundings.height()) h = _boundings.height(); if (h > _boundings.height()) h = _boundings.height();
if (h > 4.5 * st::mentionHeight) h = 4.5 * st::mentionHeight; if (h > 4.5 * st::mentionHeight) h = 4.5 * st::mentionHeight;
if (height() != h) { if (height() != h) {
st += _scroll.height() - h; // st += _scroll.height() - h;
setGeometry(0, _boundings.height() - h, width(), h); setGeometry(0, _boundings.height() - h, width(), h);
_scroll.resize(width(), h); _scroll.resize(width(), h);
} else if (y() != _boundings.height() - h) { } else if (y() != _boundings.height() - h) {
@ -2966,6 +2997,10 @@ int32 MentionsDropdown::innerBottom() {
return _scroll.scrollTop() + _scroll.height(); return _scroll.scrollTop() + _scroll.height();
} }
QString MentionsDropdown::getSelected() const {
return _inner.getSelected();
}
bool MentionsDropdown::eventFilter(QObject *obj, QEvent *e) { bool MentionsDropdown::eventFilter(QObject *obj, QEvent *e) {
if (isHidden()) return QWidget::eventFilter(obj, e); if (isHidden()) return QWidget::eventFilter(obj, e);
if (e->type() == QEvent::KeyPress) { if (e->type() == QEvent::KeyPress) {

View file

@ -110,7 +110,7 @@ public:
signals: signals:
void dropped(QDropEvent *e); void dropped(const QMimeData *data);
public slots: public slots:
@ -202,6 +202,7 @@ public:
EmojiPanInner(QWidget *parent = 0); EmojiPanInner(QWidget *parent = 0);
void setMaxHeight(int32 h);
void paintEvent(QPaintEvent *e); void paintEvent(QPaintEvent *e);
void mousePressEvent(QMouseEvent *e); void mousePressEvent(QMouseEvent *e);
@ -244,6 +245,8 @@ signals:
private: private:
int32 _maxHeight;
int32 countHeight(); int32 countHeight();
void selectEmoji(EmojiPtr emoji); void selectEmoji(EmojiPtr emoji);
@ -286,6 +289,7 @@ public:
StickerPanInner(QWidget *parent = 0); StickerPanInner(QWidget *parent = 0);
void setMaxHeight(int32 h);
void paintEvent(QPaintEvent *e); void paintEvent(QPaintEvent *e);
void mousePressEvent(QMouseEvent *e); void mousePressEvent(QMouseEvent *e);
@ -329,6 +333,8 @@ signals:
private: private:
int32 _maxHeight;
void appendSet(uint64 setId); void appendSet(uint64 setId);
int32 countHeight(); int32 countHeight();
@ -339,10 +345,16 @@ private:
int32 _top; int32 _top;
QList<QString> _titles; struct DisplayedSet {
QList<uint64> _setIds; DisplayedSet(uint64 id, int32 flags, const QString &title, int32 hoversSize, const StickerPack &pack = StickerPack()) : id(id), flags(flags), title(title), hovers(hoversSize, 0), pack(pack) {
QList<StickerPack> _sets; }
QList<QVector<float64> > _hovers; uint64 id;
int32 flags;
QString title;
QVector<float64> hovers;
StickerPack pack;
};
QList<DisplayedSet> _sets;
QList<bool> _custom; QList<bool> _custom;
int32 _selected, _pressedSel; int32 _selected, _pressedSel;
@ -359,6 +371,7 @@ public:
EmojiPan(QWidget *parent); EmojiPan(QWidget *parent);
void setMaxHeight(int32 h);
void paintEvent(QPaintEvent *e); void paintEvent(QPaintEvent *e);
void enterEvent(QEvent *e); void enterEvent(QEvent *e);
@ -412,6 +425,7 @@ signals:
private: private:
int32 _maxHeight;
bool _horizontal; bool _horizontal;
void leaveToChildEvent(QEvent *e); void leaveToChildEvent(QEvent *e);
@ -467,7 +481,7 @@ private:
typedef QList<UserData*> MentionRows; typedef QList<UserData*> MentionRows;
typedef QList<QString> HashtagRows; typedef QList<QString> HashtagRows;
typedef QList<QPair<UserData*, BotCommand> > BotCommandRows; typedef QList<QPair<UserData*, const BotCommand*> > BotCommandRows;
class MentionsDropdown; class MentionsDropdown;
class MentionsInner : public QWidget { class MentionsInner : public QWidget {
@ -489,6 +503,8 @@ public:
bool moveSel(int direction); bool moveSel(int direction);
bool select(); bool select();
QString getSelected() const;
signals: signals:
void chosen(QString mentionOrHashtag); void chosen(QString mentionOrHashtag);
@ -525,6 +541,7 @@ public:
void fastHide(); void fastHide();
bool clearFilteredCommands();
void showFiltered(PeerData *peer, QString start); void showFiltered(PeerData *peer, QString start);
void updateFiltered(bool toDown = false); void updateFiltered(bool toDown = false);
void setBoundings(QRect boundings); void setBoundings(QRect boundings);
@ -538,6 +555,7 @@ public:
int32 innerBottom(); int32 innerBottom();
bool eventFilter(QObject *obj, QEvent *e); bool eventFilter(QObject *obj, QEvent *e);
QString getSelected() const;
~MentionsDropdown(); ~MentionsDropdown();

View file

@ -273,6 +273,7 @@ void FileUploader::partLoaded(const MTPBool &result, mtpRequestId requestId) {
audio->uploadOffset = audio->size; audio->uploadOffset = audio->size;
} }
} }
emit audioProgress(k.key());
} }
} }
} }

View file

@ -25,9 +25,9 @@ void filedialogInit() {
if (cDialogLastPath().isEmpty()) { if (cDialogLastPath().isEmpty()) {
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
// hack to restore previous dir without hurting performance // hack to restore previous dir without hurting performance
QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); QSettings settings(QSettings::UserScope, qstr("QtProject"));
settings.beginGroup(QLatin1String("Qt")); settings.beginGroup(qstr("Qt"));
QByteArray sd = settings.value(QLatin1String("filedialog")).toByteArray(); QByteArray sd = settings.value(qstr("filedialog")).toByteArray();
QDataStream stream(&sd, QIODevice::ReadOnly); QDataStream stream(&sd, QIODevice::ReadOnly);
if (!stream.atEnd()) { if (!stream.atEnd()) {
int version = 3, _QFileDialogMagic = 190; int version = 3, _QFileDialogMagic = 190;

View file

@ -45,7 +45,8 @@ namespace {
InputStyle<InputField> _inputFieldStyle; InputStyle<InputField> _inputFieldStyle;
} }
FlatInput::FlatInput(QWidget *parent, const style::flatInput &st, const QString &pholder, const QString &v) : QLineEdit(v, parent), _fullph(pholder), _oldtext(v), _kev(0), _customUpDown(false), _phVisible(!v.length()), FlatInput::FlatInput(QWidget *parent, const style::flatInput &st, const QString &pholder, const QString &v) : QLineEdit(v, parent),
_fullph(pholder), _oldtext(v), _fastph(false), _kev(0), _customUpDown(false), _phVisible(!v.length()),
a_phLeft(_phVisible ? 0 : st.phShift), a_phAlpha(_phVisible ? 1 : 0), a_phColor(st.phColor->c), a_phLeft(_phVisible ? 0 : st.phShift), a_phAlpha(_phVisible ? 1 : 0), a_phColor(st.phColor->c),
a_borderColor(st.borderColor->c), a_bgColor(st.bgColor->c), _notingBene(0), _st(st) { a_borderColor(st.borderColor->c), a_bgColor(st.bgColor->c), _notingBene(0), _st(st) {
resize(_st.width, _st.height); resize(_st.width, _st.height);
@ -133,7 +134,7 @@ QRect FlatInput::getTextRect() const {
} }
void FlatInput::paintEvent(QPaintEvent *e) { void FlatInput::paintEvent(QPaintEvent *e) {
QPainter p(this); Painter p(this);
p.fillRect(rect(), a_bgColor.current()); p.fillRect(rect(), a_bgColor.current());
if (_st.borderWidth) { if (_st.borderWidth) {
QBrush b(a_borderColor.current()); QBrush b(a_borderColor.current());
@ -154,9 +155,9 @@ void FlatInput::paintEvent(QPaintEvent *e) {
if (phDraw) { if (phDraw) {
p.save(); p.save();
p.setClipRect(rect()); p.setClipRect(rect());
QRect phRect(_st.textMrg.left() + _st.phPos.x() + a_phLeft.current(), _st.textMrg.top() + _st.phPos.y(), width() - _st.textMrg.left() - _st.textMrg.right(), height() - _st.textMrg.top() - _st.textMrg.bottom()); QRect phRect(placeholderRect());
p.setFont(_st.font->f); phRect.moveLeft(phRect.left() + a_phLeft.current());
p.setPen(a_phColor.current()); phPrepare(p);
p.drawText(phRect, _ph, QTextOption(_st.phAlign)); p.drawText(phRect, _ph, QTextOption(_st.phAlign));
p.restore(); p.restore();
} }
@ -231,20 +232,53 @@ bool FlatInput::animStep(float64 ms) {
return res; return res;
} }
void FlatInput::setPlaceholder(const QString &ph) {
_fullph = ph;
resizeEvent(0);
update();
}
void FlatInput::setPlaceholderFast(bool fast) {
_fastph = fast;
if (_fastph) {
a_phLeft = anim::ivalue(_phVisible ? 0 : _st.phShift, _phVisible ? 0 : _st.phShift);
a_phAlpha = anim::fvalue(_phVisible ? 1 : 0, _phVisible ? 1 : 0);
update();
}
}
void FlatInput::updatePlaceholder() { void FlatInput::updatePlaceholder() {
bool vis = !text().length(); bool vis = !text().length();
if (vis == _phVisible) return; if (vis == _phVisible) return;
if (_fastph) {
a_phLeft = anim::ivalue(vis ? 0 : _st.phShift, vis ? 0 : _st.phShift);
a_phAlpha = anim::fvalue(vis ? 1 : 0, vis ? 1 : 0);
update();
} else {
a_phLeft.start(vis ? 0 : _st.phShift); a_phLeft.start(vis ? 0 : _st.phShift);
a_phAlpha.start(vis ? 1 : 0); a_phAlpha.start(vis ? 1 : 0);
anim::start(this); anim::start(this);
}
_phVisible = vis; _phVisible = vis;
} }
const QString &FlatInput::placeholder() const {
return _fullph;
}
QRect FlatInput::placeholderRect() const {
return QRect(_st.textMrg.left() + _st.phPos.x(), _st.textMrg.top() + _st.phPos.y(), width() - _st.textMrg.left() - _st.textMrg.right(), height() - _st.textMrg.top() - _st.textMrg.bottom());
}
void FlatInput::correctValue(QKeyEvent *e, const QString &was) { void FlatInput::correctValue(QKeyEvent *e, const QString &was) {
} }
void FlatInput::phPrepare(Painter &p) {
p.setFont(_st.font->f);
p.setPen(a_phColor.current());
}
void FlatInput::keyPressEvent(QKeyEvent *e) { void FlatInput::keyPressEvent(QKeyEvent *e) {
QString was(text()); QString was(text());
_kev = e; _kev = e;
@ -350,13 +384,18 @@ void CountryCodeInput::correctValue(QKeyEvent *e, const QString &was) {
} }
} }
InputField::InputField(QWidget *parent, const style::InputField &st, const QString &pholder, const QString &v) : QLineEdit(v, parent), InputField::InputField(QWidget *parent, const style::InputField &st, const QString &ph, const QString &val) : QTextEdit(val, parent),
_lastText(v), _oldtext(val),
_keyEvent(0), _keyEvent(0),
_undoAvailable(false),
_redoAvailable(false),
_fakeMargin(0),
_customUpDown(false), _customUpDown(false),
_placeholderFull(pholder), _placeholderFull(ph),
_placeholderVisible(!v.length()), _placeholderVisible(val.isEmpty()),
a_placeholderLeft(_placeholderVisible ? 0 : st.placeholderShift), a_placeholderLeft(_placeholderVisible ? 0 : st.placeholderShift),
a_placeholderOpacity(_placeholderVisible ? 1 : 0), a_placeholderOpacity(_placeholderVisible ? 1 : 0),
a_placeholderFg(st.placeholderFg->c), a_placeholderFg(st.placeholderFg->c),
@ -367,47 +406,67 @@ a_borderFg(st.borderFg->c),
a_borderOpacityActive(0), a_borderOpacityActive(0),
_borderAnim(animFunc(this, &InputField::borderStep)), _borderAnim(animFunc(this, &InputField::borderStep)),
_focused(false), _error(false), _st(&st) { _st(&st),
_touchPress(false),
_touchRightButton(false),
_touchMove(false),
_replacingEmojis(false) {
setAcceptRichText(false);
resize(_st->width, _st->height); resize(_st->width, _st->height);
setWordWrapMode(QTextOption::NoWrap);
setLineWrapMode(QTextEdit::NoWrap);
setFont(_st->font->f); setFont(_st->font->f);
setAlignment(_st->textAlign); setAlignment(cRtl() ? Qt::AlignRight : Qt::AlignLeft);
setLayoutDirection(cLangDir());
_placeholder = _st->font->m.elidedText(_placeholderFull, Qt::ElideRight, width() - _st->textMargins.left() - _st->textMargins.right() - _st->placeholderMargins.left() - _st->placeholderMargins.right() - 1);
QPalette p(palette()); QPalette p(palette());
p.setColor(QPalette::Text, _st->textFg->c); p.setColor(QPalette::Text, _st->textFg->c);
setPalette(p); setPalette(p);
connect(this, SIGNAL(textChanged(const QString &)), this, SLOT(onTextChange(const QString &))); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
connect(this, SIGNAL(textEdited(const QString &)), this, SLOT(onTextEdited())); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
if (App::wnd()) connect(this, SIGNAL(selectionChanged()), App::wnd(), SLOT(updateGlobalMenu()));
setFrameStyle(QFrame::NoFrame | QFrame::Plain);
viewport()->setAutoFillBackground(false);
setStyle(&_inputFieldStyle);
setTextMargins(0, 0, 0, 0);
setContentsMargins(0, 0, 0, 0); setContentsMargins(0, 0, 0, 0);
setAttribute(Qt::WA_AcceptTouchEvents); //switch (cScale()) {
//case dbisOneAndQuarter: _fakeMargin = 1; break;
//case dbisOneAndHalf: _fakeMargin = 2; break;
//case dbisTwo: _fakeMargin = 4; break;
//}
//setStyleSheet(qsl("QTextEdit { margin: %1px; }").arg(_fakeMargin));
setStyleSheet(qsl("QTextEdit { padding: 2px 74px; }"));
viewport()->setAttribute(Qt::WA_AcceptTouchEvents);
_touchTimer.setSingleShot(true); _touchTimer.setSingleShot(true);
connect(&_touchTimer, SIGNAL(timeout()), this, SLOT(onTouchTimer())); connect(&_touchTimer, SIGNAL(timeout()), this, SLOT(onTouchTimer()));
}
void InputField::setCustomUpDown(bool customUpDown) { connect(document(), SIGNAL(contentsChange(int, int, int)), this, SLOT(onDocumentContentsChange(int, int, int)));
_customUpDown = customUpDown; connect(document(), SIGNAL(contentsChanged()), this, SLOT(onDocumentContentsChanged()));
connect(this, SIGNAL(undoAvailable(bool)), this, SLOT(onUndoAvailable(bool)));
connect(this, SIGNAL(redoAvailable(bool)), this, SLOT(onRedoAvailable(bool)));
if (App::wnd()) connect(this, SIGNAL(selectionChanged()), App::wnd(), SLOT(updateGlobalMenu()));
} }
void InputField::onTouchTimer() { void InputField::onTouchTimer() {
_touchRightButton = true; _touchRightButton = true;
} }
bool InputField::event(QEvent *e) { bool InputField::viewportEvent(QEvent *e) {
if (e->type() == QEvent::TouchBegin || e->type() == QEvent::TouchUpdate || e->type() == QEvent::TouchEnd || e->type() == QEvent::TouchCancel) { if (e->type() == QEvent::TouchBegin || e->type() == QEvent::TouchUpdate || e->type() == QEvent::TouchEnd || e->type() == QEvent::TouchCancel) {
QTouchEvent *ev = static_cast<QTouchEvent*>(e); QTouchEvent *ev = static_cast<QTouchEvent*>(e);
if (ev->device()->type() == QTouchDevice::TouchScreen) { if (ev->device()->type() == QTouchDevice::TouchScreen) {
touchEvent(ev); touchEvent(ev);
return QLineEdit::event(e); return QTextEdit::viewportEvent(e);
} }
} }
return QLineEdit::event(e); return QTextEdit::viewportEvent(e);
} }
void InputField::touchEvent(QTouchEvent *e) { void InputField::touchEvent(QTouchEvent *e) {
@ -450,18 +509,18 @@ void InputField::touchEvent(QTouchEvent *e) {
} }
QRect InputField::getTextRect() const { QRect InputField::getTextRect() const {
QMargins m = _st->textMargins + QMargins(-2, -1, -2, -1); return rect().marginsRemoved(_st->textMargins + st::textRectMargins);
if (rtl()) {
int l = m.left();
m.setLeft(m.right());
m.setRight(l);
} }
return rect().marginsRemoved(m);
int32 InputField::fakeMargin() const {
return _fakeMargin;
} }
void InputField::paintEvent(QPaintEvent *e) { void InputField::paintEvent(QPaintEvent *e) {
Painter p(this); Painter p(viewport());
QRect r(rect().intersected(e->rect()));
p.fillRect(r, st::white->b);
if (_st->border) { if (_st->border) {
p.fillRect(0, height() - _st->border, width(), _st->border, _st->borderFg->b); p.fillRect(0, height() - _st->border, width(), _st->border, _st->borderFg->b);
} }
@ -481,7 +540,7 @@ void InputField::paintEvent(QPaintEvent *e) {
} }
if (drawPlaceholder) { if (drawPlaceholder) {
p.save(); p.save();
p.setClipRect(rect()); p.setClipRect(r);
QRect r(rect().marginsRemoved(_st->textMargins + _st->placeholderMargins)); QRect r(rect().marginsRemoved(_st->textMargins + _st->placeholderMargins));
r.moveLeft(r.left() + a_placeholderLeft.current()); r.moveLeft(r.left() + a_placeholderLeft.current());
@ -493,7 +552,7 @@ void InputField::paintEvent(QPaintEvent *e) {
p.restore(); p.restore();
} }
QLineEdit::paintEvent(e); QTextEdit::paintEvent(e);
} }
void InputField::focusInEvent(QFocusEvent *e) { void InputField::focusInEvent(QFocusEvent *e) {
@ -507,7 +566,7 @@ void InputField::focusInEvent(QFocusEvent *e) {
a_borderOpacityActive.start(1); a_borderOpacityActive.start(1);
_borderAnim.start(); _borderAnim.start();
} }
QLineEdit::focusInEvent(e); QTextEdit::focusInEvent(e);
emit focused(); emit focused();
} }
@ -522,16 +581,10 @@ void InputField::focusOutEvent(QFocusEvent *e) {
a_borderOpacityActive.start(_error ? 1 : 0); a_borderOpacityActive.start(_error ? 1 : 0);
_borderAnim.start(); _borderAnim.start();
} }
QLineEdit::focusOutEvent(e); QTextEdit::focusOutEvent(e);
emit blurred(); emit blurred();
} }
void InputField::resizeEvent(QResizeEvent *e) {
int32 availw = width() - _st->textMargins.left() - _st->textMargins.right() - _st->placeholderMargins.left() - _st->placeholderMargins.right() - 2;
_placeholder = (_st->font->m.width(_placeholderFull) > availw) ? _st->font->m.elidedText(_placeholderFull, Qt::ElideRight, availw) : _placeholderFull;
update();
}
QSize InputField::sizeHint() const { QSize InputField::sizeHint() const {
return geometry().size(); return geometry().size();
} }
@ -540,6 +593,264 @@ QSize InputField::minimumSizeHint() const {
return geometry().size(); return geometry().size();
} }
QString InputField::getText(int32 start, int32 end) const {
if (end >= 0 && end <= start) return QString();
if (start < 0) start = 0;
bool full = (start == 0) && (end < 0);
QTextDocument *doc(document());
QTextBlock from = full ? doc->begin() : doc->findBlock(start), till = (end < 0) ? doc->end() : doc->findBlock(end);
if (till.isValid()) till = till.next();
int32 possibleLen = 0;
for (QTextBlock b = from; b != till; b = b.next()) {
possibleLen += b.length();
}
QString result;
result.reserve(possibleLen + 1);
if (!full && end < 0) {
end = possibleLen;
}
for (QTextBlock b = from; b != till; b = b.next()) {
for (QTextBlock::Iterator iter = b.begin(); !iter.atEnd(); ++iter) {
QTextFragment fragment(iter.fragment());
if (!fragment.isValid()) continue;
int32 p = full ? 0 : fragment.position(), e = full ? 0 : (p + fragment.length());
if (!full) {
if (p >= end || e <= start) {
continue;
}
}
QTextCharFormat f = fragment.charFormat();
QString emojiText;
QString t(fragment.text());
if (!full) {
if (p < start) {
t = t.mid(start - p, end - start);
} else if (e > end) {
t = t.mid(0, end - p);
}
}
QChar *ub = t.data(), *uc = ub, *ue = uc + t.size();
for (; uc != ue; ++uc) {
switch (uc->unicode()) {
case 0xfdd0: // QTextBeginningOfFrame
case 0xfdd1: // QTextEndOfFrame
case QChar::ParagraphSeparator:
case QChar::LineSeparator:
*uc = QLatin1Char('\n');
break;
case QChar::Nbsp:
*uc = QLatin1Char(' ');
break;
case QChar::ObjectReplacementCharacter:
if (emojiText.isEmpty() && f.isImageFormat()) {
QString imageName = static_cast<QTextImageFormat*>(&f)->name();
if (imageName.startsWith(qstr("emoji://e."))) {
if (EmojiPtr emoji = emojiFromUrl(imageName)) {
emojiText = emojiString(emoji);
}
}
}
if (uc > ub) result.append(ub, uc - ub);
if (!emojiText.isEmpty()) result.append(emojiText);
ub = uc + 1;
break;
}
}
if (uc > ub) result.append(ub, uc - ub);
}
result.append('\n');
}
result.chop(1);
return result;
}
bool InputField::hasText() const {
QTextDocument *doc(document());
QTextBlock from = doc->begin(), till = doc->end();
if (from == till) return false;
for (QTextBlock::Iterator iter = from.begin(); !iter.atEnd(); ++iter) {
QTextFragment fragment(iter.fragment());
if (!fragment.isValid()) continue;
if (!fragment.text().isEmpty()) return true;
}
return (from.next() != till);
}
bool InputField::isUndoAvailable() const {
return _undoAvailable;
}
bool InputField::isRedoAvailable() const {
return _redoAvailable;
}
void InputField::insertEmoji(EmojiPtr emoji, QTextCursor c) {
QTextImageFormat imageFormat;
int32 ew = ESize + st::emojiPadding * cIntRetinaFactor() * 2, eh = _st->font->height * cIntRetinaFactor();
imageFormat.setWidth(ew / cIntRetinaFactor());
imageFormat.setHeight(eh / cIntRetinaFactor());
imageFormat.setName(qsl("emoji://e.") + QString::number(emojiKey(emoji), 16));
imageFormat.setVerticalAlignment(QTextCharFormat::AlignBaseline);
static QString objectReplacement(QChar::ObjectReplacementCharacter);
c.insertText(objectReplacement, imageFormat);
}
QVariant InputField::loadResource(int type, const QUrl &name) {
QString imageName = name.toDisplayString();
if (imageName.startsWith(qstr("emoji://e."))) {
if (EmojiPtr emoji = emojiFromUrl(imageName)) {
return QVariant(App::emojiSingle(emoji, _st->font->height));
}
}
return QVariant();
}
void InputField::processDocumentContentsChange(int position, int charsAdded) {
int32 emojiPosition = 0, emojiLen = 0;
const EmojiData *emoji = 0;
QTextDocument *doc(document());
while (true) {
int32 start = position, end = position + charsAdded;
QTextBlock from = doc->findBlock(start), till = doc->findBlock(end);
if (till.isValid()) till = till.next();
for (QTextBlock b = from; b != till; b = b.next()) {
for (QTextBlock::Iterator iter = b.begin(); !iter.atEnd(); ++iter) {
QTextFragment fragment(iter.fragment());
if (!fragment.isValid()) continue;
int32 fp = fragment.position(), fe = fp + fragment.length();
if (fp >= end || fe <= start) {
continue;
}
QString t(fragment.text());
const QChar *ch = t.constData(), *e = ch + t.size();
for (; ch != e; ++ch) {
emoji = emojiFromText(ch, e, emojiLen);
if (emoji) {
emojiPosition = fp + (ch - t.constData());
break;
}
if (ch + 1 < e && ch->isHighSurrogate() && (ch + 1)->isLowSurrogate()) ++ch;
}
if (emoji) break;
}
if (emoji) break;
}
if (emoji) {
if (!document()->pageSize().isNull()) {
document()->setPageSize(QSizeF(0, 0));
}
QTextCursor c(doc->docHandle(), emojiPosition);
c.setPosition(emojiPosition + emojiLen, QTextCursor::KeepAnchor);
int32 removedUpto = c.position();
insertEmoji(emoji, c);
for (Insertions::iterator i = _insertions.begin(), e = _insertions.end(); i != e; ++i) {
if (i->first >= removedUpto) {
i->first -= removedUpto - emojiPosition - 1;
} else if (i->first >= emojiPosition) {
i->second -= removedUpto - emojiPosition;
i->first = emojiPosition + 1;
} else if (i->first + i->second > emojiPosition + 1) {
i->second -= qMin(removedUpto, i->first + i->second) - emojiPosition;
}
}
charsAdded -= removedUpto - position;
position = emojiPosition + 1;
emoji = 0;
emojiPosition = 0;
} else {
break;
}
}
}
void InputField::onDocumentContentsChange(int position, int charsRemoved, int charsAdded) {
if (_replacingEmojis) return;
if (document()->availableRedoSteps() > 0) return;
const int takeBack = 3;
position -= takeBack;
charsAdded += takeBack;
if (position < 0) {
charsAdded += position;
position = 0;
}
if (charsAdded <= 0) return;
// _insertions.push_back(Insertion(position, charsAdded));
_replacingEmojis = true;
QSizeF s = document()->pageSize();
processDocumentContentsChange(position, charsAdded);
if (document()->pageSize() != s) {
document()->setPageSize(s);
}
_replacingEmojis = false;
}
void InputField::onDocumentContentsChanged() {
if (_replacingEmojis) return;
if (!_insertions.isEmpty()) {
if (document()->availableRedoSteps() > 0) {
_insertions.clear();
} else {
_replacingEmojis = true;
QSizeF s = document()->pageSize();
do {
Insertion i = _insertions.front();
_insertions.pop_front();
if (i.second > 0) {
processDocumentContentsChange(i.first, i.second);
}
} while (!_insertions.isEmpty());
if (document()->pageSize() != s) {
document()->setPageSize(s);
}
_replacingEmojis = false;
}
}
QString curText(getText());
if (_oldtext != curText) {
_oldtext = curText;
emit changed();
}
updatePlaceholder();
if (App::wnd()) App::wnd()->updateGlobalMenu();
}
void InputField::onUndoAvailable(bool avail) {
_undoAvailable = avail;
if (App::wnd()) App::wnd()->updateGlobalMenu();
}
void InputField::onRedoAvailable(bool avail) {
_redoAvailable = avail;
if (App::wnd()) App::wnd()->updateGlobalMenu();
}
bool InputField::placeholderFgStep(float64 ms) { bool InputField::placeholderFgStep(float64 ms) {
float dt = ms / _st->duration; float dt = ms / _st->duration;
bool res = true; bool res = true;
@ -582,9 +893,12 @@ bool InputField::borderStep(float64 ms) {
update(); update();
return res; return res;
} }
const QString &InputField::getLastText() const {
return _oldtext;
}
void InputField::updatePlaceholder() { void InputField::updatePlaceholder() {
bool placeholderVisible = !_lastText.isEmpty(); bool placeholderVisible = _oldtext.isEmpty();
if (placeholderVisible != _placeholderVisible) { if (placeholderVisible != _placeholderVisible) {
_placeholderVisible = placeholderVisible; _placeholderVisible = placeholderVisible;
@ -597,50 +911,71 @@ void InputField::updatePlaceholder() {
void InputField::correctValue(QKeyEvent *e, const QString &was) { void InputField::correctValue(QKeyEvent *e, const QString &was) {
} }
void InputField::keyPressEvent(QKeyEvent *e) { QMimeData *InputField::createMimeDataFromSelection() const {
QString was(_lastText); QMimeData *result = new QMimeData();
QTextCursor c(textCursor());
int32 start = c.selectionStart(), end = c.selectionEnd();
if (end > start) {
result->setText(getText(start, end));
}
return result;
}
_keyEvent = e; void InputField::customUpDown(bool custom) {
if (_customUpDown && (e->key() == Qt::Key_Up || e->key() == Qt::Key_Down)) { _customUpDown = custom;
}
void InputField::keyPressEvent(QKeyEvent *e) {
bool shift = e->modifiers().testFlag(Qt::ShiftModifier);
bool macmeta = (cPlatform() == dbipMac) && e->modifiers().testFlag(Qt::ControlModifier) && !e->modifiers().testFlag(Qt::MetaModifier) && !e->modifiers().testFlag(Qt::AltModifier);
bool ctrl = e->modifiers().testFlag(Qt::ControlModifier) || e->modifiers().testFlag(Qt::MetaModifier), ctrlGood = (ctrl && cCtrlEnter()) || (!ctrl && !shift && !cCtrlEnter()) || (ctrl && shift);
bool enter = (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return);
if (macmeta && e->key() == Qt::Key_Backspace) {
QTextCursor tc(textCursor()), start(tc);
start.movePosition(QTextCursor::StartOfLine);
tc.setPosition(start.position(), QTextCursor::KeepAnchor);
tc.removeSelectedText();
} else if (enter && ctrlGood) {
emit submitted(ctrl && shift);
} else if (e->key() == Qt::Key_Escape) {
emit cancelled();
} else if (e->key() == Qt::Key_Tab || (ctrl && e->key() == Qt::Key_Backtab)) {
if (ctrl) {
e->ignore(); e->ignore();
} else { } else {
QLineEdit::keyPressEvent(e); emit tabbed();
}
} else if (e->key() == Qt::Key_Search || e == QKeySequence::Find) {
e->ignore();
} else {
QTextCursor tc(textCursor());
if (enter && ctrl) {
e->setModifiers(e->modifiers() & ~Qt::ControlModifier);
}
QTextEdit::keyPressEvent(e);
if (tc == textCursor()) {
bool check = false;
if (e->key() == Qt::Key_PageUp || e->key() == Qt::Key_Up) {
tc.movePosition(QTextCursor::Start, e->modifiers().testFlag(Qt::ShiftModifier) ? QTextCursor::KeepAnchor : QTextCursor::MoveAnchor);
check = true;
} else if (e->key() == Qt::Key_PageDown || e->key() == Qt::Key_Down) {
tc.movePosition(QTextCursor::End, e->modifiers().testFlag(Qt::ShiftModifier) ? QTextCursor::KeepAnchor : QTextCursor::MoveAnchor);
check = true;
}
if (check) {
if (tc == textCursor()) {
e->ignore();
} else {
setTextCursor(tc);
}
}
}
}
} }
if (was == _lastText) { // call correct manually void InputField::resizeEvent(QResizeEvent *e) {
correctValue(_keyEvent, was); _placeholder = _st->font->m.elidedText(_placeholderFull, Qt::ElideRight, width() - _st->textMargins.left() - _st->textMargins.right() - _st->placeholderMargins.left() - _st->placeholderMargins.right() - 1);
_lastText = text(); viewport()->setGeometry(rect().marginsRemoved(_st->textMargins));
if (was != _lastText) emit changed(); QTextEdit::resizeEvent(e);
updatePlaceholder();
}
if (e->key() == Qt::Key_Escape) {
emit cancelled();
} else if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) {
emit accepted();
}
_keyEvent = 0;
}
void InputField::onTextEdited() {
QString was(_lastText);
correctValue(_keyEvent, was);
_lastText = text();
if (was != _lastText) emit changed();
updatePlaceholder();
if (App::wnd()) App::wnd()->updateGlobalMenu();
}
void InputField::onTextChange(const QString &text) {
_lastText = text;
if (App::wnd()) App::wnd()->updateGlobalMenu();
}
void InputField::setError(bool error) {
if (error != _error) {
_error = error;
a_borderFg.start((_error ? _st->borderFgError : (_focused ? _st->borderFgActive : _st->borderFg))->c);
a_borderOpacityActive.start((_error || _focused) ? 1 : 0);
_borderAnim.start();
}
} }

View file

@ -38,7 +38,11 @@ public:
void notaBene(); void notaBene();
void setPlaceholder(const QString &ph);
void setPlaceholderFast(bool fast);
void updatePlaceholder(); void updatePlaceholder();
const QString &placeholder() const;
QRect placeholderRect() const;
QRect getTextRect() const; QRect getTextRect() const;
@ -68,9 +72,16 @@ protected:
virtual void correctValue(QKeyEvent *e, const QString &was); virtual void correctValue(QKeyEvent *e, const QString &was);
style::font phFont() {
return _st.font;
}
void phPrepare(Painter &p);
private: private:
QString _ph, _fullph, _oldtext; QString _ph, _fullph, _oldtext;
bool _fastph;
QKeyEvent *_kev; QKeyEvent *_kev;
bool _customUpDown; bool _customUpDown;
@ -116,15 +127,118 @@ private:
bool _nosignal; bool _nosignal;
}; };
//
//class InputField : public QTextEdit {
// Q_OBJECT
//
//public:
//
// InputField(QWidget *parent, const style::InputField &st, const QString &ph = QString(), const QString &val = QString());
//
// bool event(QEvent *e);
// void touchEvent(QTouchEvent *e);
// void paintEvent(QPaintEvent *e);
// void focusInEvent(QFocusEvent *e);
// void focusOutEvent(QFocusEvent *e);
// void keyPressEvent(QKeyEvent *e);
// void resizeEvent(QResizeEvent *e);
//
// void setError(bool error);
//
// void updatePlaceholder();
//
// QRect getTextRect() const;
//
// bool placeholderFgStep(float64 ms);
// bool placeholderShiftStep(float64 ms);
// bool borderStep(float64 ms);
//
// QSize sizeHint() const;
// QSize minimumSizeHint() const;
//
// void setCustomUpDown(bool customUpDown);
//
//public slots:
//
// void onTextChange(const QString &text);
// void onTextEdited();
//
// void onTouchTimer();
//
// void onDocumentContentsChange(int position, int charsRemoved, int charsAdded);
// void onDocumentContentsChanged();
//
// void onUndoAvailable(bool avail);
// void onRedoAvailable(bool avail);
//
//signals:
//
// void changed();
// void cancelled();
// void accepted();
// void focused();
// void blurred();
//
//protected:
//
// virtual void correctValue(QKeyEvent *e, const QString &was);
//
// void insertEmoji(EmojiPtr emoji, QTextCursor c);
// TWidget *tparent() {
// return qobject_cast<TWidget*>(parentWidget());
// }
// const TWidget *tparent() const {
// return qobject_cast<const TWidget*>(parentWidget());
// }
// void enterEvent(QEvent *e) {
// TWidget *p(tparent());
// if (p) p->leaveToChildEvent(e);
// return QTextEdit::enterEvent(e);
// }
// void leaveEvent(QEvent *e) {
// TWidget *p(tparent());
// if (p) p->enterFromChildEvent(e);
// return QTextEdit::leaveEvent(e);
// }
//
// QVariant loadResource(int type, const QUrl &name);
//
//private:
//
// QString _lastText;
// QKeyEvent *_keyEvent;
//
// bool _customUpDown;
//
// QString _placeholder, _placeholderFull;
// bool _placeholderVisible;
// anim::ivalue a_placeholderLeft;
// anim::fvalue a_placeholderOpacity;
// anim::cvalue a_placeholderFg;
// Animation _placeholderFgAnim, _placeholderShiftAnim;
//
// anim::fvalue a_borderOpacityActive;
// anim::cvalue a_borderFg;
// Animation _borderAnim;
//
// bool _focused, _error;
//
// const style::InputField *_st;
//
// QTimer _touchTimer;
// bool _touchPress, _touchRightButton, _touchMove;
// QPoint _touchStart;
//};
class InputField : public QLineEdit {
class InputField : public QTextEdit {
Q_OBJECT Q_OBJECT
public: public:
InputField(QWidget *parent, const style::InputField &st, const QString &ph = QString(), const QString &val = QString()); InputField(QWidget *parent, const style::InputField &st, const QString &ph = QString(), const QString &val = QString());
bool event(QEvent *e); bool viewportEvent(QEvent *e);
void touchEvent(QTouchEvent *e); void touchEvent(QTouchEvent *e);
void paintEvent(QPaintEvent *e); void paintEvent(QPaintEvent *e);
void focusInEvent(QFocusEvent *e); void focusInEvent(QFocusEvent *e);
@ -132,11 +246,11 @@ public:
void keyPressEvent(QKeyEvent *e); void keyPressEvent(QKeyEvent *e);
void resizeEvent(QResizeEvent *e); void resizeEvent(QResizeEvent *e);
void setError(bool error); const QString &getLastText() const;
void updatePlaceholder(); void updatePlaceholder();
QRect getTextRect() const; QRect getTextRect() const;
int32 fakeMargin() const;
bool placeholderFgStep(float64 ms); bool placeholderFgStep(float64 ms);
bool placeholderShiftStep(float64 ms); bool placeholderShiftStep(float64 ms);
@ -145,20 +259,33 @@ public:
QSize sizeHint() const; QSize sizeHint() const;
QSize minimumSizeHint() const; QSize minimumSizeHint() const;
void setCustomUpDown(bool customUpDown); QString getText(int32 start = 0, int32 end = -1) const;
bool hasText() const;
bool isUndoAvailable() const;
bool isRedoAvailable() const;
QMimeData *createMimeDataFromSelection() const;
void customUpDown(bool isCustom);
public slots: public slots:
void onTextChange(const QString &text);
void onTextEdited();
void onTouchTimer(); void onTouchTimer();
void onDocumentContentsChange(int position, int charsRemoved, int charsAdded);
void onDocumentContentsChanged();
void onUndoAvailable(bool avail);
void onRedoAvailable(bool avail);
signals: signals:
void changed(); void changed();
void submitted(bool ctrlShiftEnter);
void cancelled(); void cancelled();
void accepted(); void tabbed();
void focused(); void focused();
void blurred(); void blurred();
@ -166,11 +293,38 @@ protected:
virtual void correctValue(QKeyEvent *e, const QString &was); virtual void correctValue(QKeyEvent *e, const QString &was);
void insertEmoji(EmojiPtr emoji, QTextCursor c);
TWidget *tparent() {
return qobject_cast<TWidget*>(parentWidget());
}
const TWidget *tparent() const {
return qobject_cast<const TWidget*>(parentWidget());
}
void enterEvent(QEvent *e) {
TWidget *p(tparent());
if (p) p->leaveToChildEvent(e);
return QTextEdit::enterEvent(e);
}
void leaveEvent(QEvent *e) {
TWidget *p(tparent());
if (p) p->enterFromChildEvent(e);
return QTextEdit::leaveEvent(e);
}
QVariant loadResource(int type, const QUrl &name);
private: private:
QString _lastText; void processDocumentContentsChange(int position, int charsAdded);
QString _oldtext;
QKeyEvent *_keyEvent; QKeyEvent *_keyEvent;
bool _undoAvailable, _redoAvailable;
int32 _fakeMargin;
bool _customUpDown; bool _customUpDown;
QString _placeholder, _placeholderFull; QString _placeholder, _placeholderFull;
@ -191,4 +345,9 @@ private:
QTimer _touchTimer; QTimer _touchTimer;
bool _touchPress, _touchRightButton, _touchMove; bool _touchPress, _touchRightButton, _touchMove;
QPoint _touchStart; QPoint _touchStart;
bool _replacingEmojis;
typedef QPair<int, int> Insertion;
typedef QList<Insertion> Insertions;
Insertions _insertions;
}; };

View file

@ -128,7 +128,8 @@ int32 FlatTextarea::fakeMargin() const {
void FlatTextarea::paintEvent(QPaintEvent *e) { void FlatTextarea::paintEvent(QPaintEvent *e) {
QPainter p(viewport()); QPainter p(viewport());
p.fillRect(rect(), _st.bgColor->b); QRect r(rect().intersected(e->rect()));
p.fillRect(r, _st.bgColor->b);
bool phDraw = _phVisible; bool phDraw = _phVisible;
if (animating()) { if (animating()) {
p.setOpacity(a_phAlpha.current()); p.setOpacity(a_phAlpha.current());
@ -136,7 +137,7 @@ void FlatTextarea::paintEvent(QPaintEvent *e) {
} }
if (phDraw) { if (phDraw) {
p.save(); p.save();
p.setClipRect(rect()); p.setClipRect(r);
QRect phRect(_st.textMrg.left() - _fakeMargin + _st.phPos.x() + a_phLeft.current(), _st.textMrg.top() - _fakeMargin + _st.phPos.y(), width() - _st.textMrg.left() - _st.textMrg.right(), height() - _st.textMrg.top() - _st.textMrg.bottom()); QRect phRect(_st.textMrg.left() - _fakeMargin + _st.phPos.x() + a_phLeft.current(), _st.textMrg.top() - _fakeMargin + _st.phPos.y(), width() - _st.textMrg.left() - _st.textMrg.right(), height() - _st.textMrg.top() - _st.textMrg.bottom());
p.setFont(_st.font->f); p.setFont(_st.font->f);
p.setPen(a_phColor.current()); p.setPen(a_phColor.current());
@ -174,7 +175,10 @@ EmojiPtr FlatTextarea::getSingleEmoji() const {
if (!text.isEmpty()) { if (!text.isEmpty()) {
QTextCharFormat format = fragment.charFormat(); QTextCharFormat format = fragment.charFormat();
return emojiFromUrl(static_cast<const QTextImageFormat*>(&format)->name()); QString imageName = static_cast<QTextImageFormat*>(&format)->name();
if (imageName.startsWith(qstr("emoji://e."))) {
return emojiFromUrl(imageName);
}
} }
return 0; return 0;
} }
@ -303,7 +307,7 @@ void FlatTextarea::getSingleEmojiFragment(QString &text, QTextFragment &fragment
} }
if (f.isImageFormat() && !t.isEmpty() && t.at(0).unicode() == QChar::ObjectReplacementCharacter) { if (f.isImageFormat() && !t.isEmpty() && t.at(0).unicode() == QChar::ObjectReplacementCharacter) {
QString imageName = static_cast<QTextImageFormat*>(&f)->name(); QString imageName = static_cast<QTextImageFormat*>(&f)->name();
if (imageName.startsWith(QLatin1String("emoji://e."))) { if (imageName.startsWith(qstr("emoji://e."))) {
fragment = fr; fragment = fr;
text = t; text = t;
return; return;
@ -387,7 +391,7 @@ QString FlatTextarea::getText(int32 start, int32 end) const {
case QChar::ObjectReplacementCharacter: case QChar::ObjectReplacementCharacter:
if (emojiText.isEmpty() && f.isImageFormat()) { if (emojiText.isEmpty() && f.isImageFormat()) {
QString imageName = static_cast<QTextImageFormat*>(&f)->name(); QString imageName = static_cast<QTextImageFormat*>(&f)->name();
if (imageName.startsWith(QLatin1String("emoji://e."))) { if (imageName.startsWith(qstr("emoji://e."))) {
if (EmojiPtr emoji = emojiFromUrl(imageName)) { if (EmojiPtr emoji = emojiFromUrl(imageName)) {
emojiText = emojiString(emoji); emojiText = emojiString(emoji);
} }
@ -530,17 +534,25 @@ void FlatTextarea::insertFromMimeData(const QMimeData *source) {
} }
void FlatTextarea::insertEmoji(EmojiPtr emoji, QTextCursor c) { void FlatTextarea::insertEmoji(EmojiPtr emoji, QTextCursor c) {
c.removeSelectedText();
QPixmap img(App::emojiSingle(emoji, _st.font->height));
QString url = qsl("emoji://e.") + QString::number(emojiKey(emoji), 16);
document()->addResource(QTextDocument::ImageResource, QUrl(url), QVariant(img));
QTextImageFormat imageFormat; QTextImageFormat imageFormat;
imageFormat.setWidth(img.width() / cIntRetinaFactor()); int32 ew = ESize + st::emojiPadding * cIntRetinaFactor() * 2, eh = _st.font->height * cIntRetinaFactor();
imageFormat.setHeight(img.height() / cIntRetinaFactor()); imageFormat.setWidth(ew / cIntRetinaFactor());
imageFormat.setName(url); imageFormat.setHeight(eh / cIntRetinaFactor());
imageFormat.setName(qsl("emoji://e.") + QString::number(emojiKey(emoji), 16));
imageFormat.setVerticalAlignment(QTextCharFormat::AlignBaseline); imageFormat.setVerticalAlignment(QTextCharFormat::AlignBaseline);
c.insertImage(imageFormat);
static QString objectReplacement(QChar::ObjectReplacementCharacter);
c.insertText(objectReplacement, imageFormat);
}
QVariant FlatTextarea::loadResource(int type, const QUrl &name) {
QString imageName = name.toDisplayString();
if (imageName.startsWith(qstr("emoji://e."))) {
if (EmojiPtr emoji = emojiFromUrl(imageName)) {
return QVariant(App::emojiSingle(emoji, _st.font->height));
}
}
return QVariant();
} }
void FlatTextarea::processDocumentContentsChange(int position, int charsAdded) { void FlatTextarea::processDocumentContentsChange(int position, int charsAdded) {
@ -579,6 +591,10 @@ void FlatTextarea::processDocumentContentsChange(int position, int charsAdded) {
if (emoji) break; if (emoji) break;
} }
if (emoji) { if (emoji) {
if (!document()->pageSize().isNull()) {
document()->setPageSize(QSizeF(0, 0));
}
QTextCursor c(doc->docHandle(), emojiPosition); QTextCursor c(doc->docHandle(), emojiPosition);
c.setPosition(emojiPosition + emojiLen, QTextCursor::KeepAnchor); c.setPosition(emojiPosition + emojiLen, QTextCursor::KeepAnchor);
int32 removedUpto = c.position(); int32 removedUpto = c.position();
@ -608,6 +624,8 @@ void FlatTextarea::processDocumentContentsChange(int position, int charsAdded) {
} }
void FlatTextarea::onDocumentContentsChange(int position, int charsRemoved, int charsAdded) { void FlatTextarea::onDocumentContentsChange(int position, int charsRemoved, int charsAdded) {
if (_replacingEmojis) return;
if (!_links.isEmpty()) { if (!_links.isEmpty()) {
bool changed = false; bool changed = false;
for (LinkRanges::iterator i = _links.begin(); i != _links.end();) { for (LinkRanges::iterator i = _links.begin(); i != _links.end();) {
@ -624,7 +642,7 @@ void FlatTextarea::onDocumentContentsChange(int position, int charsRemoved, int
if (changed) emit linksChanged(); if (changed) emit linksChanged();
} }
if (_replacingEmojis || document()->availableRedoSteps() > 0) return; if (document()->availableRedoSteps() > 0) return;
const int takeBack = 3; const int takeBack = 3;
@ -636,7 +654,14 @@ void FlatTextarea::onDocumentContentsChange(int position, int charsRemoved, int
} }
if (charsAdded <= 0) return; if (charsAdded <= 0) return;
_insertions.push_back(Insertion(position, charsAdded)); // _insertions.push_back(Insertion(position, charsAdded));
_replacingEmojis = true;
QSizeF s = document()->pageSize();
processDocumentContentsChange(position, charsAdded);
if (document()->pageSize() != s) {
document()->setPageSize(s);
}
_replacingEmojis = false;
} }
void FlatTextarea::onDocumentContentsChanged() { void FlatTextarea::onDocumentContentsChanged() {
@ -647,6 +672,8 @@ void FlatTextarea::onDocumentContentsChanged() {
_insertions.clear(); _insertions.clear();
} else { } else {
_replacingEmojis = true; _replacingEmojis = true;
QSizeF s = document()->pageSize();
do { do {
Insertion i = _insertions.front(); Insertion i = _insertions.front();
_insertions.pop_front(); _insertions.pop_front();
@ -654,6 +681,10 @@ void FlatTextarea::onDocumentContentsChanged() {
processDocumentContentsChange(i.first, i.second); processDocumentContentsChange(i.first, i.second);
} }
} while (!_insertions.isEmpty()); } while (!_insertions.isEmpty());
if (document()->pageSize() != s) {
document()->setPageSize(s);
}
_replacingEmojis = false; _replacingEmojis = false;
} }
} }
@ -743,6 +774,8 @@ void FlatTextarea::keyPressEvent(QKeyEvent *e) {
} else { } else {
emit tabbed(); emit tabbed();
} }
} else if (e->key() == Qt::Key_Search || e == QKeySequence::Find) {
e->ignore();
} else { } else {
QTextCursor tc(textCursor()); QTextCursor tc(textCursor());
if (enter && ctrl) { if (enter && ctrl) {
@ -781,7 +814,3 @@ void FlatTextarea::resizeEvent(QResizeEvent *e) {
_phelided = _st.font->m.elidedText(_ph, Qt::ElideRight, width() - _st.textMrg.left() - _st.textMrg.right() - _st.phPos.x() - 1); _phelided = _st.font->m.elidedText(_ph, Qt::ElideRight, width() - _st.textMrg.left() - _st.textMrg.right() - _st.phPos.x() - 1);
QTextEdit::resizeEvent(e); QTextEdit::resizeEvent(e);
} }
void FlatTextarea::mousePressEvent(QMouseEvent *e) {
QTextEdit::mousePressEvent(e);
}

View file

@ -35,7 +35,6 @@ public:
void focusOutEvent(QFocusEvent *e); void focusOutEvent(QFocusEvent *e);
void keyPressEvent(QKeyEvent *e); void keyPressEvent(QKeyEvent *e);
void resizeEvent(QResizeEvent *e); void resizeEvent(QResizeEvent *e);
void mousePressEvent(QMouseEvent *e);
const QString &getLastText() const; const QString &getLastText() const;
void updatePlaceholder(); void updatePlaceholder();
@ -62,6 +61,8 @@ public:
void insertFromMimeData(const QMimeData *source); void insertFromMimeData(const QMimeData *source);
QMimeData *createMimeDataFromSelection() const;
public slots: public slots:
void onTouchTimer(); void onTouchTimer();
@ -103,13 +104,13 @@ protected:
return QTextEdit::leaveEvent(e); return QTextEdit::leaveEvent(e);
} }
QVariant loadResource(int type, const QUrl &name);
private: private:
void getSingleEmojiFragment(QString &text, QTextFragment &fragment) const; void getSingleEmojiFragment(QString &text, QTextFragment &fragment) const;
void processDocumentContentsChange(int position, int charsAdded); void processDocumentContentsChange(int position, int charsAdded);
QMimeData *createMimeDataFromSelection() const;
QString _ph, _phelided, _oldtext; QString _ph, _phelided, _oldtext;
bool _phVisible; bool _phVisible;
anim::ivalue a_phLeft; anim::ivalue a_phLeft;

View file

@ -29,6 +29,9 @@ struct StorageImageLocation {
} }
StorageImageLocation(int32 width, int32 height, const MTPDfileLocation &location) : width(width), height(height), dc(location.vdc_id.v), volume(location.vvolume_id.v), local(location.vlocal_id.v), secret(location.vsecret.v) { StorageImageLocation(int32 width, int32 height, const MTPDfileLocation &location) : width(width), height(height), dc(location.vdc_id.v), volume(location.vvolume_id.v), local(location.vlocal_id.v), secret(location.vsecret.v) {
} }
bool isNull() const {
return !dc;
}
int32 width, height; int32 width, height;
int32 dc; int32 dc;
uint64 volume; uint64 volume;
@ -36,6 +39,13 @@ struct StorageImageLocation {
uint64 secret; uint64 secret;
}; };
inline bool operator==(const StorageImageLocation &a, const StorageImageLocation &b) {
return !memcmp(&a, &b, sizeof(StorageImageLocation));
}
inline bool operator!=(const StorageImageLocation &a, const StorageImageLocation &b) {
return !(a == b);
}
class Image { class Image {
public: public:
@ -144,6 +154,10 @@ inline StorageKey storageKey(int32 dc, const uint64 &volume, int32 local) {
inline StorageKey storageKey(const MTPDfileLocation &location) { inline StorageKey storageKey(const MTPDfileLocation &location) {
return storageKey(location.vdc_id.v, location.vvolume_id.v, location.vlocal_id.v); return storageKey(location.vdc_id.v, location.vvolume_id.v, location.vlocal_id.v);
} }
inline StorageKey storageKey(const StorageImageLocation &location) {
return storageKey(location.dc, location.volume, location.local);
}
enum StorageFileType { enum StorageFileType {
StorageFileUnknown = 0xaa963b05, // mtpc_storage_fileUnknown StorageFileUnknown = 0xaa963b05, // mtpc_storage_fileUnknown
StorageFileJpeg = 0x7efe0e, // mtpc_storage_fileJpeg StorageFileJpeg = 0x7efe0e, // mtpc_storage_fileJpeg

View file

@ -19,8 +19,30 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
#include "style.h" #include "style.h"
#include "gui/phoneinput.h" #include "gui/phoneinput.h"
#include "numbers.h"
#include "lang.h"
PhoneInput::PhoneInput(QWidget *parent, const style::flatInput &st, const QString &ph) : FlatInput(parent, st, ph) { PhoneInput::PhoneInput(QWidget *parent, const style::flatInput &st) : FlatInput(parent, st, lang(lng_phone_ph)) {
}
void PhoneInput::paintEvent(QPaintEvent *e) {
FlatInput::paintEvent(e);
Painter p(this);
QString t(text());
if (!pattern.isEmpty() && !t.isEmpty()) {
QString ph = placeholder().mid(t.size());
if (!ph.isEmpty()) {
p.setClipRect(rect());
QRect phRect(placeholderRect());
int tw = phFont()->m.width(t);
if (tw < phRect.width()) {
phRect.setLeft(phRect.left() + tw);
phPrepare(p);
p.drawText(phRect, ph, style::al_left);
}
}
}
} }
void PhoneInput::correctValue(QKeyEvent *e, const QString &was) { void PhoneInput::correctValue(QKeyEvent *e, const QString &was) {
@ -36,36 +58,60 @@ void PhoneInput::correctValue(QKeyEvent *e, const QString &was) {
} }
} }
if (digitCount > MaxPhoneTailLength) digitCount = MaxPhoneTailLength; if (digitCount > MaxPhoneTailLength) digitCount = MaxPhoneTailLength;
bool strict = (digitCount == MaxPhoneTailLength);
bool inPart = !pattern.isEmpty();
int curPart = -1, leftInPart = 0;
newText.reserve(oldLen); newText.reserve(oldLen);
for (int i = 0; i < oldLen; ++i) { for (int i = 0; i < oldLen; ++i) {
if (i == oldPos && newPos < 0) {
newPos = newText.length();
}
QChar ch(oldText[i]); QChar ch(oldText[i]);
if (ch.isDigit()) { if (ch.isDigit()) {
if (!digitCount--) { if (!digitCount--) {
break; break;
} }
newText += ch; if (inPart) {
if (strict && !digitCount) { if (leftInPart) {
break; --leftInPart;
} else {
newText += ' ';
++curPart;
inPart = curPart < pattern.size();
leftInPart = inPart ? (pattern.at(curPart) - 1) : 0;
++oldPos;
} }
}
newText += ch;
} else if (ch == ' ' || ch == '-' || ch == '(' || ch == ')') { } else if (ch == ' ' || ch == '-' || ch == '(' || ch == ')') {
if (inPart) {
if (leftInPart) {
} else {
newText += ch;
++curPart;
inPart = curPart < pattern.size();
leftInPart = inPart ? pattern.at(curPart) : 0;
}
} else {
newText += ch; newText += ch;
} }
if (i == oldPos) {
newPos = newText.length();
} }
} }
int32 newlen = newText.size();
while (newlen > 0 && newText.at(newlen - 1).isSpace()) {
--newlen;
}
if (newlen < newText.size()) newText = newText.mid(0, newlen);
if (newPos < 0) { if (newPos < 0) {
newPos = newText.length(); newPos = newText.length();
} }
if (newText != oldText) { if (newText != oldText) {
setText(newText); setText(newText);
if (newPos != oldPos) {
setCursorPosition(newPos); setCursorPosition(newPos);
} }
} }
}
void PhoneInput::addedToNumber(const QString &added) { void PhoneInput::addedToNumber(const QString &added) {
setFocus(); setFocus();
@ -76,6 +122,29 @@ void PhoneInput::addedToNumber(const QString &added) {
updatePlaceholder(); updatePlaceholder();
} }
void PhoneInput::onChooseCode(const QString &code) {
pattern = phoneNumberParse(code);
if (!pattern.isEmpty() && pattern.at(0) == code.size()) {
pattern.pop_front();
} else {
pattern.clear();
}
if (pattern.isEmpty()) {
setPlaceholder(lang(lng_phone_ph));
} else {
QString ph;
ph.reserve(20);
for (int i = 0, l = pattern.size(); i < l; ++i) {
ph.append(' ');
ph.append(QString(QChar(0x2212)).repeated(pattern.at(i)));
}
setPlaceholder(ph);
}
correctValue(0, text());
setPlaceholderFast(!pattern.isEmpty());
updatePlaceholder();
}
PortInput::PortInput(QWidget *parent, const style::flatInput &st, const QString &ph, const QString &val) : FlatInput(parent, st, ph, val) { PortInput::PortInput(QWidget *parent, const style::flatInput &st, const QString &ph, const QString &val) : FlatInput(parent, st, ph, val) {
correctValue(0, QString()); correctValue(0, QString());
} }

View file

@ -24,11 +24,14 @@ class PhoneInput : public FlatInput {
public: public:
PhoneInput(QWidget *parent, const style::flatInput &st, const QString &ph); PhoneInput(QWidget *parent, const style::flatInput &st);
void paintEvent(QPaintEvent *e);
public slots: public slots:
void addedToNumber(const QString &added); void addedToNumber(const QString &added);
void onChooseCode(const QString &code);
signals: signals:
@ -38,6 +41,10 @@ protected:
void correctValue(QKeyEvent *e, const QString &was); void correctValue(QKeyEvent *e, const QString &was);
private:
QVector<int> pattern;
}; };
class PortInput : public FlatInput { class PortInput : public FlatInput {

View file

@ -47,7 +47,7 @@ ScrollBar::ScrollBar(ScrollArea *parent, bool vert, const style::flatScroll *st)
_hideTimer.setSingleShot(true); _hideTimer.setSingleShot(true);
connect(&_hideTimer, SIGNAL(timeout()), this, SLOT(onHideTimer())); connect(&_hideTimer, SIGNAL(timeout()), this, SLOT(onHideTimer()));
connect(_connected, SIGNAL(valueChanged(int)), this, SLOT(updateBar())); connect(_connected, SIGNAL(valueChanged(int)), this, SLOT(onValueChanged()));
connect(_connected, SIGNAL(rangeChanged(int, int)), this, SLOT(updateBar())); connect(_connected, SIGNAL(rangeChanged(int, int)), this, SLOT(updateBar()));
updateBar(); updateBar();
@ -57,6 +57,11 @@ void ScrollBar::recountSize() {
setGeometry(_vertical ? QRect(rtl() ? 0 : (_area->width() - _st->width), _st->deltat, _st->width, _area->height() - _st->deltat - _st->deltab) : QRect(_st->deltat, _area->height() - _st->width, _area->width() - _st->deltat - _st->deltab, _st->width)); setGeometry(_vertical ? QRect(rtl() ? 0 : (_area->width() - _st->width), _st->deltat, _st->width, _area->height() - _st->deltat - _st->deltab) : QRect(_st->deltat, _area->height() - _st->width, _area->width() - _st->deltat - _st->deltab, _st->width));
} }
void ScrollBar::onValueChanged() {
_area->onScrolled();
updateBar();
}
void ScrollBar::updateBar(bool force) { void ScrollBar::updateBar(bool force) {
QRect newBar; QRect newBar;
if (_connected->maximum() != _scrollMax) { if (_connected->maximum() != _scrollMax) {
@ -266,8 +271,6 @@ _touchScrollState(TouchScrollManual), _touchPrevPosValid(false), _touchWaitingAc
_touchSpeedTime(0), _touchAccelerationTime(0), _touchTime(0), _widgetAcceptsTouch(false) { _touchSpeedTime(0), _touchAccelerationTime(0), _touchTime(0), _widgetAcceptsTouch(false) {
setLayoutDirection(cLangDir()); setLayoutDirection(cLangDir());
connect(horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(onScrolled()));
connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(onScrolled()));
connect(&vert, SIGNAL(topShadowVisibility(bool)), &topSh, SLOT(changeVisibility(bool))); connect(&vert, SIGNAL(topShadowVisibility(bool)), &topSh, SLOT(changeVisibility(bool)));
connect(&vert, SIGNAL(bottomShadowVisibility(bool)), &bottomSh, SLOT(changeVisibility(bool))); connect(&vert, SIGNAL(bottomShadowVisibility(bool)), &bottomSh, SLOT(changeVisibility(bool)));
vert.updateBar(true); vert.updateBar(true);
@ -297,6 +300,8 @@ void ScrollArea::touchDeaccelerate(int32 elapsed) {
} }
void ScrollArea::onScrolled() { void ScrollArea::onScrolled() {
myEnsureResized(widget());
bool em = false; bool em = false;
int32 horValue = horizontalScrollBar()->value(), vertValue = verticalScrollBar()->value(); int32 horValue = horizontalScrollBar()->value(), vertValue = verticalScrollBar()->value();
if (_horValue != horValue) { if (_horValue != horValue) {
@ -325,27 +330,29 @@ void ScrollArea::onScrolled() {
} }
int ScrollArea::scrollWidth() const { int ScrollArea::scrollWidth() const {
return scrollLeftMax() + width(); QWidget *w(widget());
return w ? qMax(w->width(), width()) : width();
} }
int ScrollArea::scrollHeight() const { int ScrollArea::scrollHeight() const {
return scrollTopMax() + height(); QWidget *w(widget());
return w ? qMax(w->height(), height()) : height();
} }
int ScrollArea::scrollLeftMax() const { int ScrollArea::scrollLeftMax() const {
return horizontalScrollBar()->maximum(); return scrollWidth() - width();
} }
int ScrollArea::scrollTopMax() const { int ScrollArea::scrollTopMax() const {
return verticalScrollBar()->maximum(); return scrollHeight() - height();
} }
int ScrollArea::scrollLeft() const { int ScrollArea::scrollLeft() const {
return horizontalScrollBar()->value(); return _horValue;
} }
int ScrollArea::scrollTop() const { int ScrollArea::scrollTop() const {
return verticalScrollBar()->value(); return _vertValue;
} }
void ScrollArea::onTouchTimer() { void ScrollArea::onTouchTimer() {
@ -612,6 +619,8 @@ void ScrollArea::leaveEvent(QEvent *e) {
} }
void ScrollArea::scrollToY(int toTop, int toBottom) { void ScrollArea::scrollToY(int toTop, int toBottom) {
myEnsureResized(widget());
int toMin = 0, toMax = scrollTopMax(); int toMin = 0, toMax = scrollTopMax();
if (toTop < toMin) { if (toTop < toMin) {
toTop = toMin; toTop = toMin;

View file

@ -70,6 +70,7 @@ public:
public slots: public slots:
void onValueChanged();
void updateBar(bool force = false); void updateBar(bool force = false);
void onHideTimer(); void onHideTimer();

View file

@ -26,8 +26,17 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
#include <QtGui/QCursor> #include <QtGui/QCursor>
#include <QtGui/QFont> #include <QtGui/QFont>
inline QPoint rtlpoint(int x, int y, int outerw) {
return QPoint(rtl() ? (outerw - x) : x, y);
}
inline QPoint rtlpoint(const QPoint &p, int outerw) {
return rtl() ? QPoint(outerw - p.x(), p.y()) : p;
}
inline QRect rtlrect(int x, int y, int w, int h, int outerw) { inline QRect rtlrect(int x, int y, int w, int h, int outerw) {
return rtl() ? QRect(outerw - x - w, y, w, h) : QRect(x, y, w, h); return QRect(rtl() ? (outerw - x - w) : x, y, w, h);
}
inline QRect rtlrect(const QRect &r, int outerw) {
return rtl() ? QRect(outerw - r.x() - r.width(), r.y(), r.width(), r.height()) : r;
} }
inline QRect centerrect(const QRect &inRect, const QRect &rect) { inline QRect centerrect(const QRect &inRect, const QRect &rect) {
return QRect(inRect.x() + (inRect.width() - rect.width()) / 2, inRect.y() + (inRect.height() - rect.height()) / 2, rect.width(), rect.height()); return QRect(inRect.x() + (inRect.width() - rect.width()) / 2, inRect.y() + (inRect.height() - rect.height()) / 2, rect.width(), rect.height());

View file

@ -24,7 +24,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
namespace { namespace {
const QRegularExpression _reDomain(QString::fromUtf8("(?<![\\w\\$\\-\\_%=\\.])(?:([a-zA-Z]+)://)?((?:[A-Za-zА-яА-ЯёЁ0-9\\-\\_]+\\.){1,5}([A-Za-zрф\\-\\d]{2,22})(\\:\\d+)?)"), QRegularExpression::UseUnicodePropertiesOption); const QRegularExpression _reDomain(QString::fromUtf8("(?<![\\w\\$\\-\\_%=\\.])(?:([a-zA-Z]+)://)?((?:[A-Za-zА-яА-ЯёЁ0-9\\-\\_]+\\.){1,10}([A-Za-zрф\\-\\d]{2,22})(\\:\\d+)?)"), QRegularExpression::UseUnicodePropertiesOption);
const QRegularExpression _reExplicitDomain(QString::fromUtf8("(?<![\\w\\$\\-\\_%=\\.])(?:([a-zA-Z]+)://)((?:[A-Za-zА-яА-ЯёЁ0-9\\-\\_]+\\.){0,5}([A-Za-zрф\\-\\d]{2,22})(\\:\\d+)?)"), QRegularExpression::UseUnicodePropertiesOption); const QRegularExpression _reExplicitDomain(QString::fromUtf8("(?<![\\w\\$\\-\\_%=\\.])(?:([a-zA-Z]+)://)((?:[A-Za-zА-яА-ЯёЁ0-9\\-\\_]+\\.){0,5}([A-Za-zрф\\-\\d]{2,22})(\\:\\d+)?)"), QRegularExpression::UseUnicodePropertiesOption);
const QRegularExpression _reMailName(qsl("[a-zA-Z\\-_\\.0-9]{1,256}$")); const QRegularExpression _reMailName(qsl("[a-zA-Z\\-_\\.0-9]{1,256}$"));
const QRegularExpression _reMailStart(qsl("^[a-zA-Z\\-_\\.0-9]{1,256}\\@")); const QRegularExpression _reMailStart(qsl("^[a-zA-Z\\-_\\.0-9]{1,256}\\@"));
@ -863,7 +863,7 @@ public:
} }
void draw(int32 left, int32 top, int32 w, style::align align, int32 yFrom, int32 yTo, uint16 selectedFrom = 0, uint16 selectedTo = 0) { void draw(int32 left, int32 top, int32 w, style::align align, int32 yFrom, int32 yTo, uint16 selectedFrom = 0, uint16 selectedTo = 0) {
if (_t->_blocks.isEmpty()) return; if (_t->isEmpty()) return;
_blocksSize = _t->_blocks.size(); _blocksSize = _t->_blocks.size();
if (!_textStyle) _initDefault(); if (!_textStyle) _initDefault();
@ -1043,7 +1043,7 @@ public:
} }
void drawElided(int32 left, int32 top, int32 w, style::align align, int32 lines, int32 yFrom, int32 yTo, int32 removeFromEnd) { void drawElided(int32 left, int32 top, int32 w, style::align align, int32 lines, int32 yFrom, int32 yTo, int32 removeFromEnd) {
if (lines <= 0) return; if (lines <= 0 || _t->isNull()) return;
if (yTo < 0 || (lines - 1) * _t->_font->height < yTo) { if (yTo < 0 || (lines - 1) * _t->_font->height < yTo) {
yTo = lines * _t->_font->height; yTo = lines * _t->_font->height;
@ -1057,7 +1057,7 @@ public:
_lnkX = x; _lnkX = x;
_lnkY = y; _lnkY = y;
_lnkResult = &_zeroLnk; _lnkResult = &_zeroLnk;
if (_lnkX >= 0 && _lnkX < w && _lnkY >= 0) { if (!_t->isNull() && _lnkX >= 0 && _lnkX < w && _lnkY >= 0) {
draw(0, 0, w, align, _lnkY, _lnkY + 1); draw(0, 0, w, align, _lnkY, _lnkY + 1);
} }
return *_lnkResult; return *_lnkResult;
@ -1067,7 +1067,7 @@ public:
lnk = TextLinkPtr(); lnk = TextLinkPtr();
inText = false; inText = false;
if (x >= 0 && x < w && y >= 0) { if (!_t->isNull() && x >= 0 && x < w && y >= 0) {
_lnkX = x; _lnkX = x;
_lnkY = y; _lnkY = y;
_lnkResult = &lnk; _lnkResult = &lnk;
@ -1081,8 +1081,7 @@ public:
symbol = 0; symbol = 0;
after = false; after = false;
upon = false; upon = false;
if (!_t->isNull() && y >= 0) {
if (y >= 0) {
_lnkX = x; _lnkX = x;
_lnkY = y; _lnkY = y;
_getSymbol = &symbol; _getSymbol = &symbol;
@ -1615,25 +1614,36 @@ public:
} }
} }
style::font applyFlags(int32 flags, const style::font &f) {
style::font result = f;
if (flags & TextBlockBold) result = result->bold();
if (flags & TextBlockItalic) result = result->italic();
if (flags & TextBlockUnderline) result = result->underline();
return result;
}
void eSetFont(ITextBlock *block) { void eSetFont(ITextBlock *block) {
style::font newFont = _t->_font; style::font newFont = _t->_font;
int flags = block->flags(); int flags = block->flags();
if (!flags && block->lnkIndex()) { if (flags) {
newFont = applyFlags(flags, _t->_font);
}
if (block->lnkIndex()) {
const TextLinkPtr &l(_t->_links.at(block->lnkIndex() - 1)); const TextLinkPtr &l(_t->_links.at(block->lnkIndex() - 1));
if (l == _overLnk) { if (l == _overLnk) {
if (l == _downLnk || !_downLnk) { if (l == _downLnk || !_downLnk) {
flags = _textStyle->lnkOverFlags->flags(); if (_t->_font != _textStyle->lnkOverFlags) newFont = _textStyle->lnkOverFlags;
} else { } else {
flags = _textStyle->lnkFlags->flags(); if (_t->_font != _textStyle->lnkFlags) newFont = _textStyle->lnkFlags;
} }
} else { } else {
flags = _textStyle->lnkFlags->flags(); if (_t->_font != _textStyle->lnkFlags) newFont = _textStyle->lnkFlags;
} }
} }
if (flags & TextBlockBold) newFont = newFont->bold();
if (flags & TextBlockItalic) newFont = newFont->italic();
if (flags & TextBlockUnderline) newFont = newFont->underline();
if (newFont != _f) { if (newFont != _f) {
if (newFont->family() == _t->_font->family()) {
newFont = applyFlags(flags | newFont->flags(), _t->_font);
}
_f = newFont; _f = newFont;
_e->fnt = _f->f; _e->fnt = _f->f;
_e->resetFontEngineCache(); _e->resetFontEngineCache();

View file

@ -259,13 +259,23 @@ public:
virtual QString encoded() const { virtual QString encoded() const {
return QString(); return QString();
} }
virtual const QLatin1String &type() const = 0;
virtual ~ITextLink() { virtual ~ITextLink() {
} }
}; };
#define TEXT_LINK_CLASS(ClassName) public: \
const QLatin1String &type() const { \
static const QLatin1String _type(qstr(#ClassName)); \
return _type; \
}
typedef QSharedPointer<ITextLink> TextLinkPtr; typedef QSharedPointer<ITextLink> TextLinkPtr;
class TextLink : public ITextLink { class TextLink : public ITextLink {
TEXT_LINK_CLASS(TextLink)
public: public:
TextLink(const QString &url, bool fullDisplayed = true) : _url(url), _fullDisplayed(fullDisplayed) { TextLink(const QString &url, bool fullDisplayed = true) : _url(url), _fullDisplayed(fullDisplayed) {
@ -289,7 +299,7 @@ public:
QString encoded() const { QString encoded() const {
QUrl u(_url), good(u.isValid() ? u.toEncoded() : QString()); QUrl u(_url), good(u.isValid() ? u.toEncoded() : QString());
QString result(good.isValid() ? good.toEncoded() : _url); QString result(good.isValid() ? QString::fromUtf8(good.toEncoded()) : _url);
if (!QRegularExpression(qsl("^[a-zA-Z]+://")).match(result).hasMatch()) { // no protocol if (!QRegularExpression(qsl("^[a-zA-Z]+://")).match(result).hasMatch()) { // no protocol
return qsl("http://") + result; return qsl("http://") + result;
@ -305,6 +315,8 @@ private:
}; };
class EmailLink : public ITextLink { class EmailLink : public ITextLink {
TEXT_LINK_CLASS(EmailLink)
public: public:
EmailLink(const QString &email) : _email(email) { EmailLink(const QString &email) : _email(email) {
@ -335,6 +347,8 @@ private:
}; };
class MentionLink : public ITextLink { class MentionLink : public ITextLink {
TEXT_LINK_CLASS(MentionLink)
public: public:
MentionLink(const QString &tag) : _tag(tag) { MentionLink(const QString &tag) : _tag(tag) {
@ -361,6 +375,8 @@ private:
}; };
class HashtagLink : public ITextLink { class HashtagLink : public ITextLink {
TEXT_LINK_CLASS(HashtagLink)
public: public:
HashtagLink(const QString &tag) : _tag(tag) { HashtagLink(const QString &tag) : _tag(tag) {
@ -387,6 +403,8 @@ private:
}; };
class BotCommandLink : public ITextLink { class BotCommandLink : public ITextLink {
TEXT_LINK_CLASS(BotCommandLink)
public: public:
BotCommandLink(const QString &cmd) : _cmd(cmd) { BotCommandLink(const QString &cmd) : _cmd(cmd) {
@ -485,6 +503,9 @@ public:
bool isEmpty() const { bool isEmpty() const {
return _text.isEmpty(); return _text.isEmpty();
} }
bool isNull() const {
return !_font;
}
QString original(uint16 selectedFrom = 0, uint16 selectedTo = 0xFFFF, bool expandLinks = true) const; QString original(uint16 selectedFrom = 0, uint16 selectedTo = 0xFFFF, bool expandLinks = true) const;
bool lastDots(int32 dots, int32 maxdots = 3) { // hack for typing animation bool lastDots(int32 dots, int32 maxdots = 3) { // hack for typing animation

View file

@ -34,12 +34,16 @@ namespace {
} }
} }
void myEnsureResized(QWidget *target) {
if (target && (target->testAttribute(Qt::WA_PendingResizeEvent) || !target->testAttribute(Qt::WA_WState_Created))) {
_sendResizeEvents(target);
}
}
QPixmap myGrab(QWidget *target, const QRect &rect) { QPixmap myGrab(QWidget *target, const QRect &rect) {
if (!cRetina()) return target->grab(rect); if (!cRetina()) return target->grab(rect);
if (target->testAttribute(Qt::WA_PendingResizeEvent) || !target->testAttribute(Qt::WA_WState_Created)) { myEnsureResized(target);
_sendResizeEvents(target);
}
qreal dpr = App::app()->devicePixelRatio(); qreal dpr = App::app()->devicePixelRatio();
QPixmap result(rect.size() * dpr); QPixmap result(rect.size() * dpr);

View file

@ -17,20 +17,6 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
*/ */
#pragma once #pragma once
class Widget : public QWidget {
public:
Widget(QWidget *parent = 0) : QWidget(parent) {
}
void moveToLeft(int x, int y, int outerw) {
move(rtl() ? (outerw - x - width()) : x, y);
}
void moveToRight(int x, int y, int outerw) {
move(rtl() ? x : (outerw - x - width()), y);
}
};
namespace App { namespace App {
const QPixmap &sprite(); const QPixmap &sprite();
} }
@ -119,14 +105,20 @@ public:
void drawSpriteCenter(const QRect &in, const style::sprite &sprite) { void drawSpriteCenter(const QRect &in, const style::sprite &sprite) {
return drawPixmap(QPoint(in.x() + (in.width() - sprite.pxWidth()) / 2, in.y() + (in.height() - sprite.pxHeight()) / 2), App::sprite(), sprite); return drawPixmap(QPoint(in.x() + (in.width() - sprite.pxWidth()) / 2, in.y() + (in.height() - sprite.pxHeight()) / 2), App::sprite(), sprite);
} }
void drawSpriteCenterLeft(const QRect &in, int outerw, const style::sprite &sprite) {
return drawPixmapLeft(QPoint(in.x() + (in.width() - sprite.pxWidth()) / 2, in.y() + (in.height() - sprite.pxHeight()) / 2), outerw, App::sprite(), sprite);
}
void drawSpriteCenterRight(const QRect &in, int outerw, const style::sprite &sprite) {
return drawPixmapRight(QPoint(in.x() + (in.width() - sprite.pxWidth()) / 2, in.y() + (in.height() - sprite.pxHeight()) / 2), outerw, App::sprite(), sprite);
}
}; };
class TWidget : public Widget { class TWidget : public QWidget {
Q_OBJECT Q_OBJECT
public: public:
TWidget(QWidget *parent = 0) : Widget(parent) { TWidget(QWidget *parent = 0) : QWidget(parent) {
} }
TWidget *tparent() { TWidget *tparent() {
return qobject_cast<TWidget*>(parentWidget()); return qobject_cast<TWidget*>(parentWidget());
@ -140,6 +132,27 @@ public:
virtual void enterFromChildEvent(QEvent *e) { // e -- from leaveEvent() of child TWidget virtual void enterFromChildEvent(QEvent *e) { // e -- from leaveEvent() of child TWidget
} }
void moveToLeft(int x, int y, int outerw) {
move(rtl() ? (outerw - x - width()) : x, y);
}
void moveToRight(int x, int y, int outerw) {
move(rtl() ? x : (outerw - x - width()), y);
}
QPoint myrtlpoint(int x, int y) const {
return rtlpoint(x, y, width());
}
QPoint myrtlpoint(const QPoint p) const {
return rtlpoint(p, width());
}
QRect myrtlrect(int x, int y, int w, int h) const {
return rtlrect(x, y, w, h, width());
}
QRect myrtlrect(const QRect &r) {
return rtlrect(r, width());
}
void rtlupdate(const QRect &r) {
update(myrtlrect(r));
}
bool event(QEvent *e) { bool event(QEvent *e) {
return QWidget::event(e); return QWidget::event(e);
} }
@ -149,16 +162,17 @@ protected:
void enterEvent(QEvent *e) { void enterEvent(QEvent *e) {
TWidget *p(tparent()); TWidget *p(tparent());
if (p) p->leaveToChildEvent(e); if (p) p->leaveToChildEvent(e);
return Widget::enterEvent(e); return QWidget::enterEvent(e);
} }
void leaveEvent(QEvent *e) { void leaveEvent(QEvent *e) {
TWidget *p(tparent()); TWidget *p(tparent());
if (p) p->enterFromChildEvent(e); if (p) p->enterFromChildEvent(e);
return Widget::leaveEvent(e); return QWidget::leaveEvent(e);
} }
private: private:
}; };
void myEnsureResized(QWidget *target);
QPixmap myGrab(QWidget *target, const QRect &rect); QPixmap myGrab(QWidget *target, const QRect &rect);

File diff suppressed because it is too large Load diff

View file

@ -41,7 +41,7 @@ struct Histories : public QHash<PeerId, History*>, public Animated {
Histories() : unreadFull(0), unreadMuted(0) { Histories() : unreadFull(0), unreadMuted(0) {
} }
void regTyping(History *history, UserData *user); void regSendAction(History *history, UserData *user, const MTPSendMessageAction &action);
bool animStep(float64 ms); bool animStep(float64 ms);
void clear(); void clear();
@ -106,6 +106,7 @@ enum MediaOverviewType {
OverviewVideos, OverviewVideos,
OverviewDocuments, OverviewDocuments,
OverviewAudios, OverviewAudios,
OverviewAudioDocuments,
OverviewCount OverviewCount
}; };
@ -127,11 +128,31 @@ inline MTPMessagesFilter typeToMediaFilter(MediaOverviewType &type) {
case OverviewVideos: return MTP_inputMessagesFilterVideo(); case OverviewVideos: return MTP_inputMessagesFilterVideo();
case OverviewDocuments: return MTP_inputMessagesFilterDocument(); case OverviewDocuments: return MTP_inputMessagesFilterDocument();
case OverviewAudios: return MTP_inputMessagesFilterAudio(); case OverviewAudios: return MTP_inputMessagesFilterAudio();
case OverviewAudioDocuments: return MTP_inputMessagesFilterAudioDocuments();
default: type = OverviewCount; break; default: type = OverviewCount; break;
} }
return MTPMessagesFilter(); return MTPMessagesFilter();
} }
enum SendActionType {
SendActionTyping,
SendActionRecordVideo,
SendActionUploadVideo,
SendActionRecordAudio,
SendActionUploadAudio,
SendActionUploadPhoto,
SendActionUploadFile,
SendActionChooseLocation,
SendActionChooseContact,
};
struct SendAction {
SendAction(SendActionType type, uint64 until, int32 progress = 0) : type(type), until(until), progress(progress) {
}
SendActionType type;
uint64 until;
int32 progress;
};
class HistoryMedia; class HistoryMedia;
class HistoryMessage; class HistoryMessage;
class HistoryUnreadBar; class HistoryUnreadBar;
@ -178,15 +199,14 @@ struct History : public QList<HistoryBlock*> {
void addUnreadBar(); void addUnreadBar();
void clearNotifications(); void clearNotifications();
bool readyForWork() const; // all unread loaded or loaded around activeMsgId
bool loadedAtBottom() const; // last message is in the list bool loadedAtBottom() const; // last message is in the list
bool loadedAtTop() const; // nothing was added after loading history back bool loadedAtTop() const; // nothing was added after loading history back
bool isReadyFor(MsgId msgId, bool check = false) const; // has messages for showing history at msgId
void getReadyFor(MsgId msgId);
void setLastMessage(HistoryItem *msg);
void fixLastMessage(bool wasAtBottom); void fixLastMessage(bool wasAtBottom);
void loadAround(MsgId msgId);
bool canShowAround(MsgId msgId) const;
MsgId minMsgId() const; MsgId minMsgId() const;
MsgId maxMsgId() const; MsgId maxMsgId() const;
@ -199,7 +219,7 @@ struct History : public QList<HistoryBlock*> {
PeerData *peer; PeerData *peer;
bool oldLoaded, newLoaded; bool oldLoaded, newLoaded;
HistoryItem *lastMsg; HistoryItem *lastMsg;
MsgId activeMsgId; QDateTime lastMsgDate;
typedef QList<HistoryItem*> NotifyQueue; typedef QList<HistoryItem*> NotifyQueue;
NotifyQueue notifies; NotifyQueue notifies;
@ -249,11 +269,13 @@ struct History : public QList<HistoryBlock*> {
MessageCursor draftCursor; MessageCursor draftCursor;
bool draftPreviewCancelled; bool draftPreviewCancelled;
int32 lastWidth, lastScrollTop; int32 lastWidth, lastScrollTop;
MsgId lastShowAtMsgId;
bool mute; bool mute;
bool lastKeyboardInited, lastKeyboardUsed; bool lastKeyboardInited, lastKeyboardUsed;
MsgId lastKeyboardId; MsgId lastKeyboardId;
PeerId lastKeyboardFrom; PeerId lastKeyboardFrom;
void clearLastKeyboard();
mtpRequestId sendRequestId; mtpRequestId sendRequestId;
@ -272,11 +294,13 @@ struct History : public QList<HistoryBlock*> {
typedef QMap<UserData*, uint64> TypingUsers; typedef QMap<UserData*, uint64> TypingUsers;
TypingUsers typing; TypingUsers typing;
typedef QMap<UserData*, SendAction> SendActionUsers;
SendActionUsers sendActions;
QString typingStr; QString typingStr;
Text typingText; Text typingText;
uint32 typingFrame; uint32 typingFrame;
bool updateTyping(uint64 ms = 0, uint32 dots = 0, bool force = false); bool updateTyping(uint64 ms = 0, uint32 dots = 0, bool force = false);
uint64 myTyping; QMap<SendActionType, uint64> mySendActions;
typedef QList<MsgId> MediaOverview; typedef QList<MsgId> MediaOverview;
typedef QMap<MsgId, NullType> MediaOverviewIds; typedef QMap<MsgId, NullType> MediaOverviewIds;
@ -285,6 +309,8 @@ struct History : public QList<HistoryBlock*> {
MediaOverviewIds _overviewIds[OverviewCount]; MediaOverviewIds _overviewIds[OverviewCount];
int32 _overviewCount[OverviewCount]; // -1 - not loaded, 0 - all loaded, > 0 - count, but not all loaded int32 _overviewCount[OverviewCount]; // -1 - not loaded, 0 - all loaded, > 0 - count, but not all loaded
void eraseFromOverview(MediaOverviewType type, MsgId msgId);
static const int32 ScrollMax = INT_MAX; static const int32 ScrollMax = INT_MAX;
}; };
@ -422,11 +448,11 @@ struct DialogsList {
DialogRow *row = addToEnd(history), *change = row; DialogRow *row = addToEnd(history), *change = row;
const QString &peerName(history->peer->name); const QString &peerName(history->peer->name);
while (change->prev && change->prev->history->peer->name > peerName) { while (change->prev && change->prev->history->peer->name.compare(peerName, Qt::CaseInsensitive) > 0) {
change = change->prev; change = change->prev;
} }
if (!insertBefore(row, change)) { if (!insertBefore(row, change)) {
while (change->next != end && change->next->history->peer->name < peerName) { while (change->next != end && change->next->history->peer->name.compare(peerName, Qt::CaseInsensitive) < 0) {
change = change->next; change = change->next;
} }
insertAfter(row, change); insertAfter(row, change);
@ -635,6 +661,12 @@ class HistoryReply; // dynamic_cast optimize
class HistoryMessage; // dynamic_cast optimize class HistoryMessage; // dynamic_cast optimize
class HistoryForwarded; // dynamic_cast optimize class HistoryForwarded; // dynamic_cast optimize
enum HistoryCursorState {
HistoryDefaultCursorState,
HistoryInTextCursorState,
HistoryInDateCursorState
};
class HistoryMedia; class HistoryMedia;
class HistoryItem : public HistoryElem { class HistoryItem : public HistoryElem {
public: public:
@ -697,9 +729,9 @@ public:
virtual bool hasPoint(int32 x, int32 y) const { virtual bool hasPoint(int32 x, int32 y) const {
return false; return false;
} }
virtual void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const { virtual void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const {
lnk = TextLinkPtr(); lnk = TextLinkPtr();
inText = false; state = HistoryDefaultCursorState;
} }
virtual void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const { // from text virtual void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const { // from text
upon = hasPoint(x, y); upon = hasPoint(x, y);
@ -717,8 +749,6 @@ public:
} }
virtual void updateMedia(const MTPMessageMedia &media) { virtual void updateMedia(const MTPMessageMedia &media) {
} }
virtual void updateStickerEmoji() {
}
virtual QString selectedText(uint32 selection) const { virtual QString selectedText(uint32 selection) const {
return qsl("[-]"); return qsl("[-]");
@ -787,6 +817,8 @@ protected:
}; };
class MessageLink : public ITextLink { class MessageLink : public ITextLink {
TEXT_LINK_CLASS(MessageLink)
public: public:
MessageLink(PeerId peer, MsgId msgid) : _peer(peer), _msgid(msgid) { MessageLink(PeerId peer, MsgId msgid) : _peer(peer), _msgid(msgid) {
} }
@ -827,7 +859,7 @@ public:
w = qMin(width, _maxw); w = qMin(width, _maxw);
return _height; return _height;
} }
virtual void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const = 0; virtual void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const = 0;
virtual void draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width = -1) const = 0; virtual void draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width = -1) const = 0;
virtual bool uploading() const { virtual bool uploading() const {
return false; return false;
@ -847,10 +879,6 @@ public:
return false; return false;
} }
virtual bool updateStickerEmoji() {
return false;
}
virtual bool animating() const { virtual bool animating() const {
return false; return false;
} }
@ -890,7 +918,7 @@ public:
const QString inHistoryText() const; const QString inHistoryText() const;
const Text &captionForClone() const; const Text &captionForClone() const;
bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const;
void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const;
HistoryMedia *clone() const; HistoryMedia *clone() const;
PhotoData *photo() const { PhotoData *photo() const {
@ -922,6 +950,7 @@ private:
}; };
QString formatSizeText(qint64 size); QString formatSizeText(qint64 size);
QString formatDownloadText(qint64 ready, qint64 total);
QString formatDurationText(qint64 duration); QString formatDurationText(qint64 duration);
class HistoryVideo : public HistoryMedia { class HistoryVideo : public HistoryMedia {
@ -938,7 +967,8 @@ public:
const QString inDialogsText() const; const QString inDialogsText() const;
const QString inHistoryText() const; const QString inHistoryText() const;
bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const;
void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; int32 countHeight(const HistoryItem *parent, int32 width = -1) const;
void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const;
bool uploading() const { bool uploading() const {
return (data->status == FileUploading); return (data->status == FileUploading);
} }
@ -978,7 +1008,7 @@ public:
const QString inDialogsText() const; const QString inDialogsText() const;
const QString inHistoryText() const; const QString inHistoryText() const;
bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const;
void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const;
bool uploading() const { bool uploading() const {
return (data->status == FileUploading); return (data->status == FileUploading);
} }
@ -1021,7 +1051,7 @@ public:
bool uploading() const { bool uploading() const {
return (data->status == FileUploading); return (data->status == FileUploading);
} }
void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const;
HistoryMedia *clone() const; HistoryMedia *clone() const;
DocumentData *document() { DocumentData *document() {
@ -1038,6 +1068,9 @@ public:
} }
ImagePtr replyPreview(); ImagePtr replyPreview();
void drawInPlaylist(QPainter &p, const HistoryItem *parent, bool selected, bool over, int32 width) const;
TextLinkPtr linkInPlaylist();
private: private:
DocumentData *data; DocumentData *data;
@ -1066,7 +1099,7 @@ public:
const QString inHistoryText() const; const QString inHistoryText() const;
bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const;
int32 countHeight(const HistoryItem *parent, int32 width = -1) const; int32 countHeight(const HistoryItem *parent, int32 width = -1) const;
void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const;
HistoryMedia *clone() const; HistoryMedia *clone() const;
DocumentData *document() { DocumentData *document() {
@ -1077,7 +1110,6 @@ public:
void unregItem(HistoryItem *item); void unregItem(HistoryItem *item);
void updateFrom(const MTPMessageMedia &media); void updateFrom(const MTPMessageMedia &media);
bool updateStickerEmoji();
private: private:
@ -1101,7 +1133,7 @@ public:
const QString inDialogsText() const; const QString inDialogsText() const;
const QString inHistoryText() const; const QString inHistoryText() const;
bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width) const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width) const;
void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width) const; void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const;
HistoryMedia *clone() const; HistoryMedia *clone() const;
void updateFrom(const MTPMessageMedia &media); void updateFrom(const MTPMessageMedia &media);
@ -1131,7 +1163,7 @@ public:
const QString inDialogsText() const; const QString inDialogsText() const;
const QString inHistoryText() const; const QString inHistoryText() const;
bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const;
void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const;
HistoryMedia *clone() const; HistoryMedia *clone() const;
void regItem(HistoryItem *item); void regItem(HistoryItem *item);
@ -1224,7 +1256,7 @@ public:
const QString inDialogsText() const; const QString inDialogsText() const;
const QString inHistoryText() const; const QString inHistoryText() const;
bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const;
void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const;
HistoryMedia *clone() const; HistoryMedia *clone() const;
bool isImageLink() const { bool isImageLink() const {
@ -1266,8 +1298,8 @@ public:
int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0); int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0);
bool hasPoint(int32 x, int32 y) const; bool hasPoint(int32 x, int32 y) const;
void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const; void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const;
virtual void getStateFromMessageText(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const QRect &r) const; virtual void getStateFromMessageText(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const QRect &r) const;
void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const; void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const;
uint32 adjustSelection(uint16 from, uint16 to, TextSelectType type) const { uint32 adjustSelection(uint16 from, uint16 to, TextSelectType type) const {
@ -1283,7 +1315,6 @@ public:
_media->updateFrom(media); _media->updateFrom(media);
} }
} }
void updateStickerEmoji();
QString selectedText(uint32 selection) const; QString selectedText(uint32 selection) const;
QString inDialogsText() const; QString inDialogsText() const;
@ -1342,9 +1373,9 @@ public:
void drawMessageText(QPainter &p, const QRect &trect, uint32 selection) const; void drawMessageText(QPainter &p, const QRect &trect, uint32 selection) const;
int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0); int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0);
bool hasPoint(int32 x, int32 y) const; bool hasPoint(int32 x, int32 y) const;
void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const; void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const;
void getStateFromMessageText(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const QRect &r) const; void getStateFromMessageText(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const QRect &r) const;
void getForwardedState(TextLinkPtr &lnk, bool &inText, int32 x, int32 w) const; void getForwardedState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 w) const;
void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const; void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const;
QDateTime dateForwarded() const { QDateTime dateForwarded() const {
@ -1395,8 +1426,8 @@ public:
void drawMessageText(QPainter &p, const QRect &trect, uint32 selection) const; void drawMessageText(QPainter &p, const QRect &trect, uint32 selection) const;
int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0); int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0);
bool hasPoint(int32 x, int32 y) const; bool hasPoint(int32 x, int32 y) const;
void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const; void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const;
void getStateFromMessageText(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const QRect &r) const; void getStateFromMessageText(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const QRect &r) const;
void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const; void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const;
UserData *replyTo() const { UserData *replyTo() const {
@ -1429,14 +1460,14 @@ class HistoryServiceMsg : public HistoryItem {
public: public:
HistoryServiceMsg(History *history, HistoryBlock *block, const MTPDmessageService &msg); HistoryServiceMsg(History *history, HistoryBlock *block, const MTPDmessageService &msg);
HistoryServiceMsg(History *history, HistoryBlock *block, MsgId msgId, QDateTime date, const QString &msg, int32 flags = 0, HistoryMedia *media = 0); HistoryServiceMsg(History *history, HistoryBlock *block, MsgId msgId, QDateTime date, const QString &msg, int32 flags = 0, HistoryMedia *media = 0, int32 from = 0);
void initDimensions(const HistoryItem *parent = 0); void initDimensions(const HistoryItem *parent = 0);
void draw(QPainter &p, uint32 selection) const; void draw(QPainter &p, uint32 selection) const;
int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0); int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0);
bool hasPoint(int32 x, int32 y) const; bool hasPoint(int32 x, int32 y) const;
void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const; void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const;
void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const; void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const;
uint32 adjustSelection(uint16 from, uint16 to, TextSelectType type) const { uint32 adjustSelection(uint16 from, uint16 to, TextSelectType type) const {
return _text.adjustSelection(from, to, type); return _text.adjustSelection(from, to, type);
@ -1477,9 +1508,9 @@ class HistoryDateMsg : public HistoryServiceMsg {
public: public:
HistoryDateMsg(History *history, HistoryBlock *block, const QDate &date); HistoryDateMsg(History *history, HistoryBlock *block, const QDate &date);
void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const { void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const {
lnk = TextLinkPtr(); lnk = TextLinkPtr();
inText = false; state = HistoryDefaultCursorState;
} }
void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const { void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const {
symbol = 0xFFFF; symbol = 0xFFFF;

File diff suppressed because it is too large Load diff

View file

@ -81,6 +81,9 @@ public:
void updateBotInfo(bool recount = true); void updateBotInfo(bool recount = true);
bool wasSelectedText() const;
void setFirstLoading(bool loading);
~HistoryList(); ~HistoryList();
public slots: public slots:
@ -104,6 +107,7 @@ public slots:
void onMenuDestroy(QObject *obj); void onMenuDestroy(QObject *obj);
void onTouchSelect(); void onTouchSelect();
void onTouchScrollTimer(); void onTouchScrollTimer();
void onDragExec();
private: private:
@ -115,7 +119,6 @@ private:
HistoryItem *prevItem(HistoryItem *item); HistoryItem *prevItem(HistoryItem *item);
HistoryItem *nextItem(HistoryItem *item); HistoryItem *nextItem(HistoryItem *item);
void updateDragSelection(HistoryItem *dragSelFrom, HistoryItem *dragSelTo, bool dragSelecting, bool force = false); void updateDragSelection(HistoryItem *dragSelFrom, HistoryItem *dragSelTo, bool dragSelecting, bool force = false);
void applyDragSelection();
History *hist; History *hist;
@ -128,11 +131,16 @@ private:
ScrollArea *scrollArea; ScrollArea *scrollArea;
int32 currentBlock, currentItem; int32 currentBlock, currentItem;
bool _firstLoading;
QTimer linkTipTimer; QTimer linkTipTimer;
Qt::CursorShape _cursor; Qt::CursorShape _cursor;
typedef QMap<HistoryItem*, uint32> SelectedItems; typedef QMap<HistoryItem*, uint32> SelectedItems;
SelectedItems _selected; SelectedItems _selected;
void applyDragSelection();
void applyDragSelection(SelectedItems *toItems) const;
enum DragAction { enum DragAction {
NoDrag = 0x00, NoDrag = 0x00,
PrepareDrag = 0x01, PrepareDrag = 0x01,
@ -144,6 +152,7 @@ private:
TextSelectType _dragSelType; TextSelectType _dragSelType;
QPoint _dragStartPos, _dragPos; QPoint _dragStartPos, _dragPos;
HistoryItem *_dragItem; HistoryItem *_dragItem;
HistoryCursorState _dragCursorState;
uint16 _dragSymbol; uint16 _dragSymbol;
bool _dragWasInactive; bool _dragWasInactive;
@ -154,6 +163,7 @@ private:
HistoryItem *_dragSelFrom, *_dragSelTo; HistoryItem *_dragSelFrom, *_dragSelTo;
bool _dragSelecting; bool _dragSelecting;
bool _wasSelectedText; // was some text selected in current drag action
bool _touchScroll, _touchSelect, _touchInProgress; bool _touchScroll, _touchSelect, _touchInProgress;
QPoint _touchStart, _touchPrevPos, _touchPos; QPoint _touchStart, _touchPrevPos, _touchPos;
@ -214,6 +224,7 @@ public:
bool updateMarkup(HistoryItem *last); bool updateMarkup(HistoryItem *last);
bool hasMarkup() const; bool hasMarkup() const;
bool forceReply() const;
bool hoverStep(float64 ms); bool hoverStep(float64 ms);
void resizeToWidth(int32 width, int32 maxOuterHeight); void resizeToWidth(int32 width, int32 maxOuterHeight);
@ -237,7 +248,7 @@ private:
MsgId _wasForMsgId; MsgId _wasForMsgId;
int32 _height, _maxOuterHeight; int32 _height, _maxOuterHeight;
bool _maximizeSize, _singleUse; bool _maximizeSize, _singleUse, _forceReply;
QTimer _cmdTipTimer; QTimer _cmdTipTimer;
QPoint _lastMousePos; QPoint _lastMousePos;
@ -335,6 +346,7 @@ public:
void start(); void start();
void messagesReceived(const MTPmessages_Messages &messages, mtpRequestId requestId); void messagesReceived(const MTPmessages_Messages &messages, mtpRequestId requestId);
void historyLoaded();
void windowShown(); void windowShown();
bool isActive() const; bool isActive() const;
@ -361,7 +373,8 @@ public:
void loadMessages(); void loadMessages();
void loadMessagesDown(); void loadMessagesDown();
void loadMessagesAround(); void firstLoadMessages();
void delayedShowAt(MsgId showAtMsgId);
void peerMessagesUpdated(PeerId peer); void peerMessagesUpdated(PeerId peer);
void peerMessagesUpdated(); void peerMessagesUpdated();
@ -373,10 +386,12 @@ public:
QRect historyRect() const; QRect historyRect() const;
void updateTyping(bool typing = true); void updateSendAction(History *history, SendActionType type, int32 progress = 0);
void cancelSendAction(History *history, SendActionType type);
void updateRecentStickers(); void updateRecentStickers();
void stickersInstalled(uint64 setId); void stickersInstalled(uint64 setId);
void typingDone(const MTPBool &result, mtpRequestId req); void sendActionDone(const MTPBool &result, mtpRequestId req);
void destroyData(); void destroyData();
void uploadImage(const QImage &img, bool withText = false, const QString &source = QString()); void uploadImage(const QImage &img, bool withText = false, const QString &source = QString());
@ -389,7 +404,6 @@ public:
void confirmSendImage(const ReadyLocalMedia &img); void confirmSendImage(const ReadyLocalMedia &img);
void cancelSendImage(); void cancelSendImage();
void checkUnreadLoaded(bool checkOnlyShow = false);
void updateControlsVisibility(); void updateControlsVisibility();
void updateOnlineDisplay(int32 x, int32 w); void updateOnlineDisplay(int32 x, int32 w);
void updateOnlineDisplayTimer(); void updateOnlineDisplayTimer();
@ -400,14 +414,12 @@ public:
void shareContact(const PeerId &peer, const QString &phone, const QString &fname, const QString &lname, MsgId replyTo, int32 userId = 0); void shareContact(const PeerId &peer, const QString &phone, const QString &fname, const QString &lname, MsgId replyTo, int32 userId = 0);
PeerData *peer() const; PeerData *peer() const;
PeerData *activePeer() const; MsgId msgId() const;
MsgId activeMsgId() const;
int32 lastWidth() const;
int32 lastScrollTop() const;
void animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTopBarCache, bool back = false); void animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTopBarCache, bool back = false);
bool showStep(float64 ms); bool showStep(float64 ms);
void animStop(); void animStop();
void doneShow();
QPoint clampMousePosition(QPoint point); QPoint clampMousePosition(QPoint point);
@ -418,7 +430,7 @@ public:
QString prepareMessage(QString text); QString prepareMessage(QString text);
uint64 animActiveTime() const; uint64 animActiveTime(MsgId id) const;
void stopAnimActive(); void stopAnimActive();
void fillSelectedItems(SelectedItemSet &sel, bool forDelete = true); void fillSelectedItems(SelectedItemSet &sel, bool forDelete = true);
@ -430,7 +442,8 @@ public:
MsgId replyToId() const; MsgId replyToId() const;
void updateReplyTo(bool force = false); void updateReplyTo(bool force = false);
void cancelReply(); bool lastForceReplyReplied(MsgId replyTo = -1) const;
void cancelReply(bool lastKeyboardUsed = false);
void updateForwarding(bool force = false); void updateForwarding(bool force = false);
void cancelForwarding(); // called by MainWidget void cancelForwarding(); // called by MainWidget
@ -458,6 +471,13 @@ public:
bool eventFilter(QObject *obj, QEvent *e); bool eventFilter(QObject *obj, QEvent *e);
void updateBotKeyboard(); void updateBotKeyboard();
DragState getDragState(const QMimeData *d);
void fastShowAtEnd(History *h);
void showPeerHistory(const PeerId &peer, MsgId showAtMsgId);
void clearDelayedShowAt();
void clearAllLoadRequests();
~HistoryWidget(); ~HistoryWidget();
signals: signals:
@ -471,6 +491,8 @@ public slots:
void onReplyToMessage(); void onReplyToMessage();
void onReplyForwardPreviewCancel(); void onReplyForwardPreviewCancel();
void onCancelSendAction();
void onStickerPackInfo(); void onStickerPackInfo();
void onPreviewParse(); void onPreviewParse();
@ -480,40 +502,44 @@ public slots:
void peerUpdated(PeerData *data); void peerUpdated(PeerData *data);
void onFullPeerUpdated(PeerData *data); void onFullPeerUpdated(PeerData *data);
void cancelTyping();
void onPhotoUploaded(MsgId msgId, const MTPInputFile &file); void onPhotoUploaded(MsgId msgId, const MTPInputFile &file);
void onDocumentUploaded(MsgId msgId, const MTPInputFile &file); void onDocumentUploaded(MsgId msgId, const MTPInputFile &file);
void onThumbDocumentUploaded(MsgId msgId, const MTPInputFile &file, const MTPInputFile &thumb); void onThumbDocumentUploaded(MsgId msgId, const MTPInputFile &file, const MTPInputFile &thumb);
void onAudioUploaded(MsgId msgId, const MTPInputFile &file); void onAudioUploaded(MsgId msgId, const MTPInputFile &file);
void onPhotoProgress(MsgId msgId);
void onDocumentProgress(MsgId msgId); void onDocumentProgress(MsgId msgId);
void onAudioProgress(MsgId msgId); void onAudioProgress(MsgId msgId);
void onPhotoFailed(MsgId msgId);
void onDocumentFailed(MsgId msgId); void onDocumentFailed(MsgId msgId);
void onAudioFailed(MsgId msgId); void onAudioFailed(MsgId msgId);
void onListScroll(); void onListScroll();
void onHistoryToEnd(); void onHistoryToEnd();
void onSend(bool ctrlShiftEnter = false, MsgId replyTo = -1); void onSend(bool ctrlShiftEnter = false, MsgId replyTo = -1);
void onUnblock();
void onBotStart(); void onBotStart();
void onPhotoSelect(); void onPhotoSelect();
void onDocumentSelect(); void onDocumentSelect();
void onPhotoDrop(QDropEvent *e); void onPhotoDrop(const QMimeData *data);
void onDocumentDrop(QDropEvent *e); void onDocumentDrop(const QMimeData *data);
void onFilesDrop(const QMimeData *data);
void onKbToggle(bool manual = true); void onKbToggle(bool manual = true);
void onCmdStart();
void onPhotoReady(); void onPhotoReady();
void onSendConfirmed(); void onSendConfirmed();
void onSendCancelled(); void onSendCancelled();
void onPhotoFailed(quint64 id); void onPhotoFailed(quint64 id);
void showPeer(const PeerId &peer, MsgId msgId = 0, bool force = false, bool leaveActive = false);
void clearLoadingAround();
void activate(); void activate();
void onMentionHashtagOrBotCommandInsert(QString str);
void onTextChange(); void onTextChange();
void onFieldTabbed();
void onStickerSend(DocumentData *sticker); void onStickerSend(DocumentData *sticker);
void onVisibleChanged(); void onVisibleChanged();
@ -539,6 +565,7 @@ public slots:
void onDraftSave(bool delayed = false); void onDraftSave(bool delayed = false);
void updateStickers(); void updateStickers();
void botCommandsChanged(UserData *user);
void onRecordError(); void onRecordError();
void onRecordDone(QByteArray result, qint32 samples); void onRecordDone(QByteArray result, qint32 samples);
@ -578,6 +605,11 @@ private:
void addMessagesToFront(const QVector<MTPMessage> &messages); void addMessagesToFront(const QVector<MTPMessage> &messages);
void addMessagesToBack(const QVector<MTPMessage> &messages); void addMessagesToBack(const QVector<MTPMessage> &messages);
void unblockDone(PeerData *peer, const MTPBool &result);
bool unblockFail(const RPCError &error);
void countHistoryShowFrom();
void updateToEndVisibility(); void updateToEndVisibility();
void stickersGot(const MTPmessages_AllStickers &stickers); void stickersGot(const MTPmessages_AllStickers &stickers);
@ -589,32 +621,36 @@ private:
void setFieldText(const QString &text); void setFieldText(const QString &text);
QStringList getMediasFromMime(const QMimeData *d); QStringList getMediasFromMime(const QMimeData *d);
DragState getDragState(const QMimeData *d);
void updateDragAreas(); void updateDragAreas();
bool _loadingMessages; PeerData *_peer;
int32 histRequestsCount; MsgId _showAtMsgId;
PeerData *histPeer;
History *_activeHist;
MTPinputPeer histInputPeer;
mtpRequestId histPreloading, histPreloadingDown;
QVector<MTPMessage> histPreload, histPreloadDown;
int32 _loadingAroundId; mtpRequestId _firstLoadRequest, _preloadRequest, _preloadDownRequest;
mtpRequestId _loadingAroundRequest;
MsgId _delayedShowAtMsgId;
mtpRequestId _delayedShowAtRequest;
MsgId _activeAnimMsgId;
ScrollArea _scroll; ScrollArea _scroll;
HistoryList *_list; HistoryList *_list;
History *hist; History *_history;
bool _histInited, _histNeedUpdate; // initial updateListSize() called bool _histInited; // initial updateListSize() called
IconedButton _toHistoryEnd; IconedButton _toHistoryEnd;
MentionsDropdown _attachMention; MentionsDropdown _attachMention;
FlatButton _send, _botStart; bool isBotStart() const;
IconedButton _attachDocument, _attachPhoto, _attachEmoji, _kbShow, _kbHide; bool isBlocked() const;
bool updateCmdStartShown();
FlatButton _send, _unblock, _botStart;
mtpRequestId _unblockRequest;
IconedButton _attachDocument, _attachPhoto, _attachEmoji, _kbShow, _kbHide, _cmdStart;
bool _cmdStartShown;
MessageField _field; MessageField _field;
Animation _recordAnim, _recordingAnim; Animation _recordAnim, _recordingAnim;
bool _recording, _inRecord, _inField, _inReply; bool _recording, _inRecord, _inField, _inReply;
@ -636,19 +672,17 @@ private:
int32 _selCount; // < 0 - text selected, focus list, not _field int32 _selCount; // < 0 - text selected, focus list, not _field
LocalImageLoader imageLoader; LocalImageLoader _imageLoader;
bool _synthedTextUpdate; bool _synthedTextUpdate;
int64 serviceImageCacheSize; int64 _serviceImageCacheSize;
QImage confirmImage; QImage _confirmImage;
PhotoId confirmImageId; PhotoId _confirmImageId;
bool confirmWithText; bool _confirmWithText;
QString confirmSource; QString _confirmSource;
QString titlePeerText; QString _titlePeerText;
int32 titlePeerTextWidth; int32 _titlePeerTextWidth;
bool hiderOffered;
Animation _showAnim; Animation _showAnim;
QPixmap _animCache, _bgAnimCache, _animTopBarCache, _bgAnimTopBarCache; QPixmap _animCache, _bgAnimCache, _animTopBarCache, _bgAnimTopBarCache;
@ -661,8 +695,8 @@ private:
QTimer _animActiveTimer; QTimer _animActiveTimer;
float64 _animActiveStart; float64 _animActiveStart;
mtpRequestId _typingRequest; QMap<QPair<History*, SendActionType>, mtpRequestId> _sendActionRequests;
QTimer _typingStopTimer; QTimer _sendActionStopTimer;
uint64 _saveDraftStart; uint64 _saveDraftStart;
bool _saveDraftText; bool _saveDraftText;

View file

@ -26,6 +26,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
namespace { namespace {
class SignUpLink : public ITextLink { class SignUpLink : public ITextLink {
TEXT_LINK_CLASS(SignUpLink)
public: public:
SignUpLink(IntroPhone *widget) : _widget(widget) { SignUpLink(IntroPhone *widget) : _widget(widget) {
@ -44,7 +46,7 @@ IntroPhone::IntroPhone(IntroWidget *parent) : IntroStage(parent),
errorAlpha(0), changed(false), errorAlpha(0), changed(false),
next(this, lang(lng_intro_next), st::btnIntroNext), next(this, lang(lng_intro_next), st::btnIntroNext),
country(this, st::introCountry), country(this, st::introCountry),
phone(this, st::inpIntroPhone, lang(lng_phone_ph)), code(this, st::inpIntroCountryCode), phone(this, st::inpIntroPhone), code(this, st::inpIntroCountryCode),
_signup(this, lng_phone_notreg(lt_signup_start, textcmdStartLink(1), lt_signup_end, textcmdStopLink()), st::introErrLabel, st::introErrLabelTextStyle), _signup(this, lng_phone_notreg(lt_signup_start, textcmdStartLink(1), lt_signup_end, textcmdStopLink()), st::introErrLabel, st::introErrLabelTextStyle),
_showSignup(false) { _showSignup(false) {
setVisible(false); setVisible(false);
@ -55,6 +57,8 @@ IntroPhone::IntroPhone(IntroWidget *parent) : IntroStage(parent),
connect(&phone, SIGNAL(voidBackspace(QKeyEvent*)), &code, SLOT(startErasing(QKeyEvent*))); connect(&phone, SIGNAL(voidBackspace(QKeyEvent*)), &code, SLOT(startErasing(QKeyEvent*)));
connect(&country, SIGNAL(codeChanged(const QString &)), &code, SLOT(codeSelected(const QString &))); connect(&country, SIGNAL(codeChanged(const QString &)), &code, SLOT(codeSelected(const QString &)));
connect(&code, SIGNAL(codeChanged(const QString &)), &country, SLOT(onChooseCode(const QString &))); connect(&code, SIGNAL(codeChanged(const QString &)), &country, SLOT(onChooseCode(const QString &)));
connect(&code, SIGNAL(codeChanged(const QString &)), &phone, SLOT(onChooseCode(const QString &)));
connect(&country, SIGNAL(codeChanged(const QString &)), &phone, SLOT(onChooseCode(const QString &)));
connect(&code, SIGNAL(addedToNumber(const QString &)), &phone, SLOT(addedToNumber(const QString &))); connect(&code, SIGNAL(addedToNumber(const QString &)), &phone, SLOT(addedToNumber(const QString &)));
connect(&country, SIGNAL(selectClosed()), this, SLOT(onSelectClose())); connect(&country, SIGNAL(selectClosed()), this, SLOT(onSelectClose()));
connect(&phone, SIGNAL(changed()), this, SLOT(onInputChange())); connect(&phone, SIGNAL(changed()), this, SLOT(onInputChange()));

View file

@ -71,28 +71,28 @@ void LangLoader::foundKeyValue(LangKey key) {
} }
QString Translator::translate(const char *context, const char *sourceText, const char *disambiguation, int n) const { QString Translator::translate(const char *context, const char *sourceText, const char *disambiguation, int n) const {
if (QLatin1String("QMenuBar") == context) { if (qstr("QMenuBar") == context) {
if (QLatin1String("Services") == sourceText) return lang(lng_mac_menu_services); if (qstr("Services") == sourceText) return lang(lng_mac_menu_services);
if (QLatin1String("Hide %1") == sourceText) return lng_mac_menu_hide_telegram(lt_telegram, qsl("%1")); if (qstr("Hide %1") == sourceText) return lng_mac_menu_hide_telegram(lt_telegram, qsl("%1"));
if (QLatin1String("Hide Others") == sourceText) return lang(lng_mac_menu_hide_others); if (qstr("Hide Others") == sourceText) return lang(lng_mac_menu_hide_others);
if (QLatin1String("Show All") == sourceText) return lang(lng_mac_menu_show_all); if (qstr("Show All") == sourceText) return lang(lng_mac_menu_show_all);
if (QLatin1String("Preferences...") == sourceText) return lang(lng_mac_menu_preferences); if (qstr("Preferences...") == sourceText) return lang(lng_mac_menu_preferences);
if (QLatin1String("Quit %1") == sourceText) return lng_mac_menu_quit_telegram(lt_telegram, qsl("%1")); if (qstr("Quit %1") == sourceText) return lng_mac_menu_quit_telegram(lt_telegram, qsl("%1"));
if (QLatin1String("About %1") == sourceText) return lng_mac_menu_about_telegram(lt_telegram, qsl("%1")); if (qstr("About %1") == sourceText) return lng_mac_menu_about_telegram(lt_telegram, qsl("%1"));
return QString(); return QString();
} }
if (QLatin1String("QWidgetTextControl") == context || QLatin1String("QLineEdit") == context) { if (qstr("QWidgetTextControl") == context || qstr("QLineEdit") == context) {
if (QLatin1String("&Undo") == sourceText) return lang((cPlatform() == dbipWindows) ? lng_wnd_menu_undo : ((cPlatform() == dbipMac) ? lng_mac_menu_undo : lng_linux_menu_undo)); if (qstr("&Undo") == sourceText) return lang((cPlatform() == dbipWindows) ? lng_wnd_menu_undo : ((cPlatform() == dbipMac) ? lng_mac_menu_undo : lng_linux_menu_undo));
if (QLatin1String("&Redo") == sourceText) return lang((cPlatform() == dbipWindows) ? lng_wnd_menu_redo : ((cPlatform() == dbipMac) ? lng_mac_menu_redo : lng_linux_menu_redo)); if (qstr("&Redo") == sourceText) return lang((cPlatform() == dbipWindows) ? lng_wnd_menu_redo : ((cPlatform() == dbipMac) ? lng_mac_menu_redo : lng_linux_menu_redo));
if (QLatin1String("Cu&t") == sourceText) return lang(lng_mac_menu_cut); if (qstr("Cu&t") == sourceText) return lang(lng_mac_menu_cut);
if (QLatin1String("&Copy") == sourceText) return lang(lng_mac_menu_copy); if (qstr("&Copy") == sourceText) return lang(lng_mac_menu_copy);
if (QLatin1String("&Paste") == sourceText) return lang(lng_mac_menu_paste); if (qstr("&Paste") == sourceText) return lang(lng_mac_menu_paste);
if (QLatin1String("Delete") == sourceText) return lang(lng_mac_menu_delete); if (qstr("Delete") == sourceText) return lang(lng_mac_menu_delete);
if (QLatin1String("Select All") == sourceText) return lang(lng_mac_menu_select_all); if (qstr("Select All") == sourceText) return lang(lng_mac_menu_select_all);
return QString(); return QString();
} }
if (QLatin1String("QUnicodeControlCharacterMenu") == context) { if (qstr("QUnicodeControlCharacterMenu") == context) {
if (QLatin1String("Insert Unicode control character") == sourceText) return lang(lng_menu_insert_unicode); if (qstr("Insert Unicode control character") == sourceText) return lang(lng_menu_insert_unicode);
return QString(); return QString();
} }
return QString(); return QString();

View file

@ -28,7 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_open_from_tray" = "Telegram öffnen"; "lng_open_from_tray" = "Telegram öffnen";
"lng_minimize_to_tray" = "Minimieren"; "lng_minimize_to_tray" = "Minimieren";
"lng_quit_from_tray" = "Telegram beenden"; "lng_quit_from_tray" = "Telegram beenden";
"lng_tray_icon_text" = "Telegram ist noch aktiv,\ndu kannst das in den Einstellungen anpassen.\n\nWenn dieses Symbol aus der Taskleiste verschwindet,\nkannst du es wieder hierher ziehen."; "lng_tray_icon_text" = "Telegram ist minimiert und läuft im Hintergrund,\ndu kannst das in den Einstellungen ändern.\nUm Telegram wieder anzuzeigen, klicke auf \ndas Symbol im Benachrichtigungsfeld.";
"lng_month1" = "Januar"; "lng_month1" = "Januar";
"lng_month2" = "Februar"; "lng_month2" = "Februar";
@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_reconnecting_try_now" = "Jetzt versuchen"; "lng_reconnecting_try_now" = "Jetzt versuchen";
"lng_status_service_notifications" = "Servicemeldungen"; "lng_status_service_notifications" = "Servicemeldungen";
"lng_status_support" = "Support";
"lng_status_bot" = "Bot"; "lng_status_bot" = "Bot";
"lng_status_bot_reads_all" = "hat Zugriff auf Nachrichten"; "lng_status_bot_reads_all" = "hat Zugriff auf Nachrichten";
"lng_status_bot_not_reads_all" = "hat keinen Zugriff auf Nachrichten"; "lng_status_bot_not_reads_all" = "hat keinen Zugriff auf Nachrichten";
@ -156,8 +157,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_dlg_new_group_name" = "Name der Gruppe"; "lng_dlg_new_group_name" = "Name der Gruppe";
"lng_dlg_create_group" = "Erstellen"; "lng_dlg_create_group" = "Erstellen";
"lng_no_contacts" = "Du hast keine Kontakte"; "lng_no_contacts" = "Du hast keine Kontakte";
"lng_no_chats" = "Noch keine Chats";
"lng_contacts_loading" = "Lade.."; "lng_contacts_loading" = "Lade..";
"lng_contacts_not_found" = "Keine Kontakte gefunden"; "lng_contacts_not_found" = "Keine Kontakte gefunden";
"lng_dlg_search_chat" = "In diesem Chat suchen";
"lng_dlg_search_for_messages" = "Nach Nachrichten suchen";
"lng_settings_save" = "Speichern"; "lng_settings_save" = "Speichern";
"lng_settings_upload" = "Profilbild festlegen"; "lng_settings_upload" = "Profilbild festlegen";
@ -166,11 +170,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_username_title" = "Benutzernamen ändern"; "lng_username_title" = "Benutzernamen ändern";
"lng_username_about" = "Wähle einen (optionalen) öffentlichen \nBenutzernamen, wenn du von anderen \ngefunden werden willst, ohne, dass sie \ndeine Nummer kennen müssen.\n\nErlaubt sind a-z, 0-9 und Unterstriche. \nDie Mindestlänge beträgt 5 Zeichen."; "lng_username_about" = "Wähle einen (optionalen) öffentlichen \nBenutzernamen, wenn du von anderen \ngefunden werden willst, ohne, dass sie \ndeine Nummer kennen müssen.\n\nErlaubt sind a-z, 0-9 und Unterstriche. \nDie Mindestlänge beträgt 5 Zeichen.";
"lng_username_invalid" = "Der Benutzername ist fehlerhaft."; "lng_username_invalid" = "Benutzername ungültig.";
"lng_username_occupied" = "Der Benutzername ist bereits belegt."; "lng_username_occupied" = "Benutzername ist bereits belegt.";
"lng_username_too_short" = "Der Benutzername ist zu kurz."; "lng_username_too_short" = "Benutzername ist zu kurz.";
"lng_username_bad_symbols" = "Nur a-z, 0-9 und Unterstriche sind erlaubt."; "lng_username_bad_symbols" = "Ungültige Zeichen im Benutzernamen.";
"lng_username_available" = "Der Benutzername ist noch verfügbar."; "lng_username_available" = "Benutzername ist verfügbar.";
"lng_username_not_found" = "Kontakt @{user} konnte nicht gefunden werden."; "lng_username_not_found" = "Kontakt @{user} konnte nicht gefunden werden.";
"lng_settings_section_contact_info" = "Kontaktprofil"; "lng_settings_section_contact_info" = "Kontaktprofil";
@ -180,8 +184,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_settings_section_notify" = "Benachrichtigungen"; "lng_settings_section_notify" = "Benachrichtigungen";
"lng_settings_desktop_notify" = "Desktopbenachrichtigungen"; "lng_settings_desktop_notify" = "Desktopbenachrichtigungen";
"lng_settings_show_name" = "Sendername anzeigen"; "lng_settings_show_name" = "Absendername anzeigen";
"lng_settings_show_preview" = "Nachrichtenvorschau anzeigen"; "lng_settings_show_preview" = "Nachrichtenvorschau anzeigen";
"lng_settings_use_windows" = "Windows Benachrichtigungen";
"lng_settings_sound_notify" = "Ton abspielen"; "lng_settings_sound_notify" = "Ton abspielen";
"lng_notification_preview" = "Du hast eine neue Nachricht"; "lng_notification_preview" = "Du hast eine neue Nachricht";
@ -289,7 +294,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_cloud_password_bad" = "Kennwort und Hinweis müssen sich unterscheiden."; "lng_cloud_password_bad" = "Kennwort und Hinweis müssen sich unterscheiden.";
"lng_cloud_password_email" = "E-Mail für die Wiederherstellung"; "lng_cloud_password_email" = "E-Mail für die Wiederherstellung";
"lng_cloud_password_bad_email" = "Ungültige E-Mai, bitte erneut versuchen."; "lng_cloud_password_bad_email" = "Ungültige E-Mai, bitte erneut versuchen.";
"lng_cloud_password_about" = "Du kannst ein eigenes Kennwort festlegen, um dich an einem neuen Gerät anzumelden, zusätzlich zum SMS-Code."; "lng_cloud_password_about" = "Dieses Kennwort brauchst du, wenn du dich mit einem neuen Gerät anmeldest.";
"lng_cloud_password_about_recover" = "Hinweis! Möchtest du wirklich keine E-Mail\nAdresse hinterlegen? \n\nWenn dir dein Kennwort nicht mehr einfällt, \nverlierst du Zugriff auf dein Telegram Konto."; "lng_cloud_password_about_recover" = "Hinweis! Möchtest du wirklich keine E-Mail\nAdresse hinterlegen? \n\nWenn dir dein Kennwort nicht mehr einfällt, \nverlierst du Zugriff auf dein Telegram Konto.";
"lng_cloud_password_almost" = "Ein Bestätigungslink wurde an\ndeine E-Mail Adresse gesendet.\n\nZweistufige Bestätigung wird aktiviert,\nsobald du den Link öffnest."; "lng_cloud_password_almost" = "Ein Bestätigungslink wurde an\ndeine E-Mail Adresse gesendet.\n\nZweistufige Bestätigung wird aktiviert,\nsobald du den Link öffnest.";
"lng_cloud_password_was_set" = "Zweistufige Bestätigung aktiviert."; "lng_cloud_password_was_set" = "Zweistufige Bestätigung aktiviert.";
@ -301,13 +306,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_connection_type" = "Verbindungsart:"; "lng_connection_type" = "Verbindungsart:";
"lng_connection_auto_connecting" = "Standard (verbinden..)"; "lng_connection_auto_connecting" = "Standard (verbinden..)";
"lng_connection_auto" = "Standard ({type} verwendet)"; "lng_connection_auto" = "Standard ({transport} verwendet)";
"lng_connection_http_proxy" = "HTTP mit Proxy"; "lng_connection_proxy_connecting" = "Verbinde über Proxy...";
"lng_connection_tcp_proxy" = "TCP mit Proxy"; "lng_connection_proxy" = "{transport} mit Proxy";
"lng_connection_header" = "Verbindungsart"; "lng_connection_header" = "Verbindungsart";
"lng_connection_auto_rb" = "Auto (TCP wenn verfügbar oder HTTP)"; "lng_connection_auto_rb" = "Auto (TCP wenn verfügbar oder HTTP)";
"lng_connection_http_proxy_rb" = "HTTP mit benutzerdef. http-Proxy"; "lng_connection_http_proxy_rb" = "HTTP mit benutzerdef. http-Proxy";
"lng_connection_tcp_proxy_rb" = "TCP mit benutzerdef. socks5-Proxy"; "lng_connection_tcp_proxy_rb" = "TCP mit benutzerdef. socks5-Proxy";
"lng_connection_try_ipv6" = "Über IPv6 verbinden";
"lng_connection_host_ph" = "Hostname"; "lng_connection_host_ph" = "Hostname";
"lng_connection_port_ph" = "Port"; "lng_connection_port_ph" = "Port";
"lng_connection_user_ph" = "Benutzername"; "lng_connection_user_ph" = "Benutzername";
@ -319,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_settings_reset_one_sure" = "Dieses Gerät wirklich abmelden?"; "lng_settings_reset_one_sure" = "Dieses Gerät wirklich abmelden?";
"lng_settings_reset_button" = "Beenden"; "lng_settings_reset_button" = "Beenden";
"lng_settings_reset_done" = "Alle anderen Sitzungen wurden erfolgreich beendet."; "lng_settings_reset_done" = "Alle anderen Sitzungen wurden erfolgreich beendet.";
"lng_settings_ask_question" = "Eine Frage stellen";
"lng_settings_ask_sure" = "Bedenke bitte, dass der Telegram Support von ehrenamtlichen Helfern betreut wird.\n\nKennst du schon die Telegram FAQ? Dort findest du Antworten auf die am häufigsten gestellten Fragen.";
"lng_settings_faq_button" = "FAQ öffnen";
"lng_settings_ask_ok" = "Frage stellen";
"lng_settings_faq" = "Telegram FAQ";
"lng_settings_logout" = "Abmelden"; "lng_settings_logout" = "Abmelden";
"lng_sure_logout" = "Du kannst Telegram von all deinen Geräten gleichzeitig nutzen. Wirklich abmelden?"; "lng_sure_logout" = "Du kannst Telegram von all deinen Geräten gleichzeitig nutzen. Wirklich abmelden?";
@ -338,6 +349,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_topbar_info" = "Info"; "lng_topbar_info" = "Info";
"lng_profile_about_section" = "Info"; "lng_profile_about_section" = "Info";
"lng_profile_settings_section" = "Einstellungen"; "lng_profile_settings_section" = "Einstellungen";
"lng_profile_actions_section" = "Aktionen";
"lng_profile_bot_settings" = "Einstellungen"; "lng_profile_bot_settings" = "Einstellungen";
"lng_profile_bot_help" = "Hilfe"; "lng_profile_bot_help" = "Hilfe";
"lng_profile_participants_section" = "Teilnehmer"; "lng_profile_participants_section" = "Teilnehmer";
@ -347,6 +359,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_profile_edit_contact" = "Bearbeiten"; "lng_profile_edit_contact" = "Bearbeiten";
"lng_profile_enable_notifications" = "Benachrichtigungen"; "lng_profile_enable_notifications" = "Benachrichtigungen";
"lng_profile_clear_history" = "Chatverlauf löschen"; "lng_profile_clear_history" = "Chatverlauf löschen";
"lng_profile_delete_conversation" = "Chat entfernen";
"lng_profile_clear_and_exit" = "Löschen und verlassen";
"lng_profile_search_messages" = "In diesem Chat suchen";
"lng_profile_block_user" = "Blockieren";
"lng_profile_unblock_user" = "Freigeben";
"lng_profile_block_bot" = "Bot anhalten und blockieren";
"lng_profile_unblock_bot" = "Bot freigeben";
"lng_profile_send_message" = "Nachricht senden"; "lng_profile_send_message" = "Nachricht senden";
"lng_profile_share_contact" = "Kontakt teilen"; "lng_profile_share_contact" = "Kontakt teilen";
"lng_profile_invite_to_group" = "In eine Gruppe einladen"; "lng_profile_invite_to_group" = "In eine Gruppe einladen";
@ -367,6 +386,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_profile_files_header" = "Dateiübersicht"; "lng_profile_files_header" = "Dateiübersicht";
"lng_profile_audios" = "{count:_not_used_|# Sprachnachricht|# Sprachnachrichten} »"; "lng_profile_audios" = "{count:_not_used_|# Sprachnachricht|# Sprachnachrichten} »";
"lng_profile_audios_header" = "Übersicht Sprachnachrichten"; "lng_profile_audios_header" = "Übersicht Sprachnachrichten";
"lng_profile_audio_files_header" = "Wiedergabeliste";
"lng_profile_show_all_types" = "Alle Filter anzeigen"; "lng_profile_show_all_types" = "Alle Filter anzeigen";
"lng_profile_copy_phone" = "Telefonnummer kopieren"; "lng_profile_copy_phone" = "Telefonnummer kopieren";
@ -377,13 +397,16 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_create_group_title" = "Neue Gruppe erstellen"; "lng_create_group_title" = "Neue Gruppe erstellen";
"lng_failed_add_participant" = "Kann Teilnehmer nicht hinzufügen. Später erneut versuchen."; "lng_failed_add_participant" = "Kann Teilnehmer nicht hinzufügen. Später erneut versuchen.";
"lng_failed_add_not_mutual" = "Wenn man eine Gruppe verlässt, kann nur \nein gemeinsamer Kontakt die Person erneut \neinladen (beide Seiten müssen die Nummer\n des anderen gespeichert haben).";
"lng_sure_delete_contact" = "Bist du sicher, dass du {contact} von deinen Kontakten löschen willst?"; "lng_sure_delete_contact" = "Bist du sicher, dass du {contact} von deinen Kontakten löschen willst?";
"lng_sure_delete_history" = "Sicher, dass du den kompletten Verlauf mit {contact} löschen willst?\n\nDas kann man nicht rückgängig machen."; "lng_sure_delete_history" = "Sicher, dass du den kompletten Verlauf mit {contact} löschen willst?\n\nDas kann man nicht rückgängig machen.";
"lng_sure_delete_group_history" = "Möchtest du wirklich deinen Verlauf von «{group}» löschen?\n\nDas kann man nicht rückgängig machen.";
"lng_sure_delete_and_exit" = "Deinen Verlauf von «{group}» löschen und die Gruppe verlassen?\n\nDas kann man nicht rückgängig machen."; "lng_sure_delete_and_exit" = "Deinen Verlauf von «{group}» löschen und die Gruppe verlassen?\n\nDas kann man nicht rückgängig machen.";
"lng_message_empty" = "(empty)"; "lng_message_empty" = "Leere Nachricht";
"lng_media_unsupported" = "Format Nicht Unterstützt";
"lng_action_add_user" = "{from} hat {user} hinzugefügt"; "lng_action_add_user" = "{from} hat {user} hinzugefügt";
"lng_action_kick_user" = "{from} hat {user} entfernt"; "lng_action_kick_user" = "{from} hat {user} entfernt";
@ -459,10 +482,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_message_ph" = "Schreibe deine Nachricht.."; "lng_message_ph" = "Schreibe deine Nachricht..";
"lng_record_cancel" = "Zum Abbrechen rausbewegen"; "lng_record_cancel" = "Zum Abbrechen rausbewegen";
"lng_empty_history" = ""; "lng_empty_history" = "";
"lng_willbe_history" = "Wähle einen Chat aus, um zu schreiben"; "lng_willbe_history" = "Chat auswählen um zu schreiben";
"lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_message_with_from" = "[c]{from}:[/c] {message}";
"lng_from_you" = "Ich"; "lng_from_you" = "Ich";
"lng_bot_description" = "Was kann dieser Bot?"; "lng_bot_description" = "Was kann dieser Bot?";
"lng_unblock_button" = "Freigeben";
"lng_bot_start" = "Starten"; "lng_bot_start" = "Starten";
"lng_bot_choose_group" = "Gruppe auswählen"; "lng_bot_choose_group" = "Gruppe auswählen";
@ -475,6 +499,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_user_typing" = "{user} tippt"; "lng_user_typing" = "{user} tippt";
"lng_users_typing" = "{user} und {second_user} tippen"; "lng_users_typing" = "{user} und {second_user} tippen";
"lng_many_typing" = "{count:_not_used_|# tippt|# tippen}"; "lng_many_typing" = "{count:_not_used_|# tippt|# tippen}";
"lng_send_action_record_video" = "schickt Video";
"lng_user_action_record_video" = "{user} sendet Video";
"lng_send_action_upload_video" = "schickt Video";
"lng_user_action_upload_video" = "{user} sendet Video";
"lng_send_action_record_audio" = "nimmt Audio auf";
"lng_user_action_record_audio" = "{user} nimmt Audio auf";
"lng_send_action_upload_audio" = "nimmt Audio auf";
"lng_user_action_upload_audio" = "{user} sendet Audio";
"lng_send_action_upload_photo" = "sendet Bild";
"lng_user_action_upload_photo" = "{user} sendet Bild";
"lng_send_action_upload_file" = "sendet Datei";
"lng_user_action_upload_file" = "{user} sendet Datei";
"lng_send_action_geo_location" = "wählt Standort aus";
"lng_user_action_geo_location" = "{user} wählt Standort aus";
"lng_send_action_choose_contact" = "wählt Kontakt aus";
"lng_user_action_choose_contact" = "{user} wählt Kontakt aus";
"lng_unread_bar" = "{count:_not_used_|# Ungelesene Nachricht|# Ungelesene Nachrichten}"; "lng_unread_bar" = "{count:_not_used_|# Ungelesene Nachricht|# Ungelesene Nachrichten}";
"lng_maps_point" = "Standort"; "lng_maps_point" = "Standort";
@ -508,6 +548,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_context_open_audio" = "Sprachnachricht öffnen"; "lng_context_open_audio" = "Sprachnachricht öffnen";
"lng_context_save_audio" = "Sprachnachricht speichern unter.."; "lng_context_save_audio" = "Sprachnachricht speichern unter..";
"lng_context_pack_info" = "Sticker-Paket"; "lng_context_pack_info" = "Sticker-Paket";
"lng_context_pack_add" = "Sticker hinzufügen";
"lng_context_open_file" = "Datei öffnen"; "lng_context_open_file" = "Datei öffnen";
"lng_context_save_file" = "Datei speichern als.."; "lng_context_save_file" = "Datei speichern als..";
"lng_context_forward_file" = "Datei weiterleiten"; "lng_context_forward_file" = "Datei weiterleiten";
@ -571,7 +612,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_selected_delete_confirm" = "Löschen"; "lng_selected_delete_confirm" = "Löschen";
"lng_about_version" = "Version {version}"; "lng_about_version" = "Version {version}";
"lng_about_text" = "Telegram Desktop basiert auf [a href=\"https://core.telegram.org/mtproto\"]MTProto[/a] und\ndem [a href=\"https://core.telegram.org/api\"]Telegram API[/a], um Geschwindigkeit \nund Sicherheit zu gewährleisten.\n\nSoftware steht unter der [a href=\"https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\"]GNU GPL[/a] Version 3,\nQuelltext ist bei [a href=\"https://github.com/telegramdesktop/tdesktop\"]GitHub[/a] verfügbar."; "lng_about_text" = "Telegram Desktop basiert auf [a href=\"https://core.telegram.org/mtproto\"]MTProto[/a] und\nder [a href=\"https://core.telegram.org/api\"]Telegram API[/a], um Geschwindigkeit \nund Sicherheit zu gewährleisten.\n\nSoftware steht unter der [a href=\"https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\"]GNU GPL[/a] Version 3,\nQuelltext ist bei [a href=\"https://github.com/telegramdesktop/tdesktop\"]GitHub[/a] verfügbar.";
"lng_about_done" = "Fertig"; "lng_about_done" = "Fertig";
"lng_search_found_results" = "{count:Keine Nachrichten|# Nachricht|# Nachrichten}"; "lng_search_found_results" = "{count:Keine Nachrichten|# Nachricht|# Nachrichten}";
@ -600,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_new_version_wrap" = "Telegram Desktop wurde aktualisiert auf Version {version}\n\n{changes}\n\nGesamter Versionsverlauf:\n{link}"; "lng_new_version_wrap" = "Telegram Desktop wurde aktualisiert auf Version {version}\n\n{changes}\n\nGesamter Versionsverlauf:\n{link}";
"lng_new_version_minor" = "— Fehlerbehebungen und Softwareoptimierungen"; "lng_new_version_minor" = "— Fehlerbehebungen und Softwareoptimierungen";
"lng_new_version_text" = "Diese neue Version enthält Unterstützung für die neue Bot API, welche für alle kostenlos verfügbar ist. Kannst du programmieren? Erstelle deine eigenen Bots für Spiele, Dienste oder Integrationen.\n\nMehr dazu unter {blog_link}"; "lng_new_version_text" = "— Blockiere Nutzer über die Profilseite (im Chat auf den Namen oben tippen)\n— Windows 8, 8.1 und 10: Native Windowsbenachrichtigungen\n— Fehlerbehebung: Eingabemethoden unter Linux (Fcitx und iBus)";
"lng_menu_insert_unicode" = "Unicode-Steuerzeichen einfügen"; "lng_menu_insert_unicode" = "Unicode-Steuerzeichen einfügen";

View file

@ -28,7 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_open_from_tray" = "Abrir Telegram"; "lng_open_from_tray" = "Abrir Telegram";
"lng_minimize_to_tray" = "Minimizar al icono"; "lng_minimize_to_tray" = "Minimizar al icono";
"lng_quit_from_tray" = "Salir de Telegram"; "lng_quit_from_tray" = "Salir de Telegram";
"lng_tray_icon_text" = "Telegram sigue funcionando aquí, \npuedes cambiar esto desde los ajustes.\n\nSi este ícono desaparece desde el menú,\npuedes arrastrarlo de regreso desde los iconos ocultos."; "lng_tray_icon_text" = "Telegram aún está funcionando,\npuedes cambiar esto en los ajustes. \nSi este icono desaparece del menú, \npuedes arrastrarlo aquí desde los iconos ocultos.";
"lng_month1" = "enero"; "lng_month1" = "enero";
"lng_month2" = "febrero"; "lng_month2" = "febrero";
@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_reconnecting_try_now" = "Intentar ahora"; "lng_reconnecting_try_now" = "Intentar ahora";
"lng_status_service_notifications" = "servicio de notificaciones"; "lng_status_service_notifications" = "servicio de notificaciones";
"lng_status_support" = "soporte";
"lng_status_bot" = "bot"; "lng_status_bot" = "bot";
"lng_status_bot_reads_all" = "tiene acceso a los mensajes"; "lng_status_bot_reads_all" = "tiene acceso a los mensajes";
"lng_status_bot_not_reads_all" = "no tiene acceso a los mensajes"; "lng_status_bot_not_reads_all" = "no tiene acceso a los mensajes";
@ -156,8 +157,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_dlg_new_group_name" = "Nombre del grupo"; "lng_dlg_new_group_name" = "Nombre del grupo";
"lng_dlg_create_group" = "Crear"; "lng_dlg_create_group" = "Crear";
"lng_no_contacts" = "No tienes contactos"; "lng_no_contacts" = "No tienes contactos";
"lng_no_chats" = "Tus chats estarán aquí";
"lng_contacts_loading" = "Cargando..."; "lng_contacts_loading" = "Cargando...";
"lng_contacts_not_found" = "No se encontraron contactos"; "lng_contacts_not_found" = "No se encontraron contactos";
"lng_dlg_search_chat" = "Buscar en este chat";
"lng_dlg_search_for_messages" = "Buscar mensajes";
"lng_settings_save" = "Guardar"; "lng_settings_save" = "Guardar";
"lng_settings_upload" = "Poner foto de perfil"; "lng_settings_upload" = "Poner foto de perfil";
@ -182,6 +186,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_settings_desktop_notify" = "Notificaciones de escritorio"; "lng_settings_desktop_notify" = "Notificaciones de escritorio";
"lng_settings_show_name" = "Mostrar el nombre del remitente"; "lng_settings_show_name" = "Mostrar el nombre del remitente";
"lng_settings_show_preview" = "Mostrar la vista previa del mensaje"; "lng_settings_show_preview" = "Mostrar la vista previa del mensaje";
"lng_settings_use_windows" = "Usar notificaciones de Windows";
"lng_settings_sound_notify" = "Reproducir sonido"; "lng_settings_sound_notify" = "Reproducir sonido";
"lng_notification_preview" = "Tienes un nuevo mensaje"; "lng_notification_preview" = "Tienes un nuevo mensaje";
@ -289,7 +294,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_cloud_password_bad" = "La contraseña y la pista no pueden ser iguales."; "lng_cloud_password_bad" = "La contraseña y la pista no pueden ser iguales.";
"lng_cloud_password_email" = "Pon un e-mail de recuperación"; "lng_cloud_password_email" = "Pon un e-mail de recuperación";
"lng_cloud_password_bad_email" = "E-mail incorrecto. Por favor, prueba otro."; "lng_cloud_password_bad_email" = "E-mail incorrecto. Por favor, prueba otro.";
"lng_cloud_password_about" = "Esta contraseña será requerida cuando inicies sesión en un nuevo dispositivo, además del código de activación."; "lng_cloud_password_about" = "Necesitarás la contraseña al iniciar sesión en un nuevo dispositivo, además del código de activación.";
"lng_cloud_password_about_recover" = "¡Advertencia! ¿No quieres añadir un e-mail \nde recuperación para la contraseña?\n\nSi olvidas tu contraseña, perderás\nel acceso a tu cuenta de Telegram."; "lng_cloud_password_about_recover" = "¡Advertencia! ¿No quieres añadir un e-mail \nde recuperación para la contraseña?\n\nSi olvidas tu contraseña, perderás\nel acceso a tu cuenta de Telegram.";
"lng_cloud_password_almost" = "Un enlace de confirmación fue enviado\nal e-mail que estableciste.\n\nLa verificación en dos pasos se activará\nen cuanto sigas ese enlace."; "lng_cloud_password_almost" = "Un enlace de confirmación fue enviado\nal e-mail que estableciste.\n\nLa verificación en dos pasos se activará\nen cuanto sigas ese enlace.";
"lng_cloud_password_was_set" = "Verificación en dos pasos activada."; "lng_cloud_password_was_set" = "Verificación en dos pasos activada.";
@ -301,13 +306,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_connection_type" = "Tipo de conexión:"; "lng_connection_type" = "Tipo de conexión:";
"lng_connection_auto_connecting" = "Por defecto (conectando...)"; "lng_connection_auto_connecting" = "Por defecto (conectando...)";
"lng_connection_auto" = "Por defecto ({type} en uso)"; "lng_connection_auto" = "Por defecto ({transport} en uso)";
"lng_connection_http_proxy" = "HTTP con proxy"; "lng_connection_proxy_connecting" = "Conectando a través de un proxy...";
"lng_connection_tcp_proxy" = "TCP con proxy"; "lng_connection_proxy" = "{transport} con un proxy";
"lng_connection_header" = "Tipo de conexión"; "lng_connection_header" = "Tipo de conexión";
"lng_connection_auto_rb" = "Automático (TCP si está disponible o HTTP)"; "lng_connection_auto_rb" = "Automático (TCP si está disponible o HTTP)";
"lng_connection_http_proxy_rb" = "HTTP con http-proxy personalizado"; "lng_connection_http_proxy_rb" = "HTTP con http-proxy personalizado";
"lng_connection_tcp_proxy_rb" = "TCP con socks5-proxy personalizado"; "lng_connection_tcp_proxy_rb" = "TCP con socks5-proxy personalizado";
"lng_connection_try_ipv6" = "Intentar conectar a través de IPv6";
"lng_connection_host_ph" = "Nombre del host"; "lng_connection_host_ph" = "Nombre del host";
"lng_connection_port_ph" = "Puerto"; "lng_connection_port_ph" = "Puerto";
"lng_connection_user_ph" = "Alias"; "lng_connection_user_ph" = "Alias";
@ -319,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_settings_reset_one_sure" = "¿Quieres cerrar esta sesión?"; "lng_settings_reset_one_sure" = "¿Quieres cerrar esta sesión?";
"lng_settings_reset_button" = "Cerrar"; "lng_settings_reset_button" = "Cerrar";
"lng_settings_reset_done" = "Se cerraron las otras sesiones"; "lng_settings_reset_done" = "Se cerraron las otras sesiones";
"lng_settings_ask_question" = "Hacer una pregunta";
"lng_settings_ask_sure" = "Por favor, considera que el soporte de Telegram está hecho por voluntarios. Respondemos lo antes posible, pero puede tomar tiempo.\n\nSi quieres, mira las preguntas frecuentes de Telegram: tienen soluciones a problemas y respuestas para la mayoría de las preguntas.";
"lng_settings_faq_button" = "Preguntas frecuentes";
"lng_settings_ask_ok" = "Preguntar";
"lng_settings_faq" = "Preguntas frecuentes";
"lng_settings_logout" = "Cerrar sesión"; "lng_settings_logout" = "Cerrar sesión";
"lng_sure_logout" = "¿Quieres cerrar sesión?"; "lng_sure_logout" = "¿Quieres cerrar sesión?";
@ -338,6 +349,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_topbar_info" = "Información"; "lng_topbar_info" = "Información";
"lng_profile_about_section" = "Acerca de"; "lng_profile_about_section" = "Acerca de";
"lng_profile_settings_section" = "Ajustes"; "lng_profile_settings_section" = "Ajustes";
"lng_profile_actions_section" = "Acciones";
"lng_profile_bot_settings" = "Ajustes"; "lng_profile_bot_settings" = "Ajustes";
"lng_profile_bot_help" = "Ayuda"; "lng_profile_bot_help" = "Ayuda";
"lng_profile_participants_section" = "Miembros"; "lng_profile_participants_section" = "Miembros";
@ -347,6 +359,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_profile_edit_contact" = "Editar"; "lng_profile_edit_contact" = "Editar";
"lng_profile_enable_notifications" = "Notificaciones"; "lng_profile_enable_notifications" = "Notificaciones";
"lng_profile_clear_history" = "Borrar historial"; "lng_profile_clear_history" = "Borrar historial";
"lng_profile_delete_conversation" = "Eliminar chat";
"lng_profile_clear_and_exit" = "Eliminar y salir";
"lng_profile_search_messages" = "Buscar mensajes";
"lng_profile_block_user" = "Bloquear";
"lng_profile_unblock_user" = "Desbloquear";
"lng_profile_block_bot" = "Detener y bloquear el bot";
"lng_profile_unblock_bot" = "Desbloquear el bot";
"lng_profile_send_message" = "Enviar mensaje"; "lng_profile_send_message" = "Enviar mensaje";
"lng_profile_share_contact" = "Compartir contacto"; "lng_profile_share_contact" = "Compartir contacto";
"lng_profile_invite_to_group" = "Añadir al grupo"; "lng_profile_invite_to_group" = "Añadir al grupo";
@ -358,15 +377,16 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_profile_sure_kick" = "¿Quieres expulsar a {user} del grupo?"; "lng_profile_sure_kick" = "¿Quieres expulsar a {user} del grupo?";
"lng_profile_loading" = "Cargando..."; "lng_profile_loading" = "Cargando...";
"lng_profile_shared_media" = "Todos los archivos"; "lng_profile_shared_media" = "Todos los archivos";
"lng_profile_no_media" = "No hay multimedia en esta conversación."; "lng_profile_no_media" = "No hay multimedia en este chat.";
"lng_profile_photos" = "{count:_not_used_|# foto|# fotos} »"; "lng_profile_photos" = "{count:_not_used_|# foto|# fotos} »";
"lng_profile_photos_header" = "Todas las fotos"; "lng_profile_photos_header" = "Todas las fotos";
"lng_profile_videos" = "{count:_not_used_|# vídeo|# vídeos} »"; "lng_profile_videos" = "{count:_not_used_|# vídeo|# vídeos} »";
"lng_profile_videos_header" = "Todos los vídeos"; "lng_profile_videos_header" = "Vídeos";
"lng_profile_files" = "{count:_not_used_|# archivo|# archivos} »"; "lng_profile_files" = "{count:_not_used_|# archivo|# archivos} »";
"lng_profile_files_header" = "Todos los archivos"; "lng_profile_files_header" = "Archivos";
"lng_profile_audios" = "{count:_not_used_|# mensaje de voz|# mensajes de voz} »"; "lng_profile_audios" = "{count:_not_used_|# mensaje de voz|# mensajes de voz} »";
"lng_profile_audios_header" = "Todos los mensajes de voz"; "lng_profile_audios_header" = "Mensajes de voz";
"lng_profile_audio_files_header" = "Lista de reproducción";
"lng_profile_show_all_types" = "Mostrar todos los tipos"; "lng_profile_show_all_types" = "Mostrar todos los tipos";
"lng_profile_copy_phone" = "Copiar número"; "lng_profile_copy_phone" = "Copiar número";
@ -377,13 +397,16 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_create_group_title" = "Nuevo grupo"; "lng_create_group_title" = "Nuevo grupo";
"lng_failed_add_participant" = "No se pudo añadir el usuario. Por favor, inténtalo más tarde."; "lng_failed_add_participant" = "No se pudo añadir el usuario. Por favor, inténtalo más tarde.";
"lng_failed_add_not_mutual" = "Si una persona dejó el grupo, sólo\nun contacto mutuo puede volver \na invitarlo (necesitan tener tu \nnúmero y tú el de ellos).";
"lng_sure_delete_contact" = "¿Quieres eliminar a {contact} de tu lista de contactos?"; "lng_sure_delete_contact" = "¿Quieres eliminar a {contact} de tu lista de contactos?";
"lng_sure_delete_history" = "¿Quieres eliminar todo el historial de mensajes con {contact}?\n\nEsta acción no se puede deshacer."; "lng_sure_delete_history" = "¿Quieres eliminar todo el historial de mensajes con {contact}?\n\nEsta acción no se puede deshacer.";
"lng_sure_delete_group_history" = "¿Quieres borrar todo el historial en «{group}»?\n\nEsta acción no se puede deshacer.";
"lng_sure_delete_and_exit" = "¿Quieres eliminar todo el historial de mensajes y dejar el grupo «{group}»?\n\nEsta acción no se puede deshacer."; "lng_sure_delete_and_exit" = "¿Quieres eliminar todo el historial de mensajes y dejar el grupo «{group}»?\n\nEsta acción no se puede deshacer.";
"lng_message_empty" = "(vacío)"; "lng_message_empty" = "Mensaje vacío";
"lng_media_unsupported" = "Multimedia no soportada";
"lng_action_add_user" = "{from} añadió a {user}"; "lng_action_add_user" = "{from} añadió a {user}";
"lng_action_kick_user" = "{from} expulsó a {user}"; "lng_action_kick_user" = "{from} expulsó a {user}";
@ -459,12 +482,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_message_ph" = "Escribir un mensaje..."; "lng_message_ph" = "Escribir un mensaje...";
"lng_record_cancel" = "Suelta fuera de aquí para cancelar"; "lng_record_cancel" = "Suelta fuera de aquí para cancelar";
"lng_empty_history" = ""; "lng_empty_history" = "";
"lng_willbe_history" = "Por favor, elige un chat para comenzar a conversar"; "lng_willbe_history" = "Por favor, elige un chat para comenzar";
"lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_message_with_from" = "[c]{from}:[/c] {message}";
"lng_from_you" = "Tú"; "lng_from_you" = "Tú";
"lng_bot_description" = "¿Qué puede hacer este bot?"; "lng_bot_description" = "¿Qué puede hacer este bot?";
"lng_unblock_button" = "Desbloquear";
"lng_bot_start" = "Empezar"; "lng_bot_start" = "Iniciar";
"lng_bot_choose_group" = "Elegir grupo"; "lng_bot_choose_group" = "Elegir grupo";
"lng_bot_no_groups" = "No tienes grupos"; "lng_bot_no_groups" = "No tienes grupos";
"lng_bot_groups_not_found" = "No se encontraron grupos"; "lng_bot_groups_not_found" = "No se encontraron grupos";
@ -475,6 +499,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_user_typing" = "{user} está escribiendo"; "lng_user_typing" = "{user} está escribiendo";
"lng_users_typing" = "{user} y {second_user} están escribiendo"; "lng_users_typing" = "{user} y {second_user} están escribiendo";
"lng_many_typing" = "{count:_not_used_|# está|# están} escribiendo"; "lng_many_typing" = "{count:_not_used_|# está|# están} escribiendo";
"lng_send_action_record_video" = "grabando vídeo";
"lng_user_action_record_video" = "{user} está grabando un vídeo";
"lng_send_action_upload_video" = "enviando vídeo";
"lng_user_action_upload_video" = "{user} está enviando un vídeo";
"lng_send_action_record_audio" = "grabando audio";
"lng_user_action_record_audio" = "{user} está grabando un audio";
"lng_send_action_upload_audio" = "enviando audio";
"lng_user_action_upload_audio" = "{user} está enviando un audio";
"lng_send_action_upload_photo" = "enviando foto";
"lng_user_action_upload_photo" = "{user} está enviando una foto";
"lng_send_action_upload_file" = "enviando archivo";
"lng_user_action_upload_file" = "{user} está enviando un archivo";
"lng_send_action_geo_location" = "obteniendo ubicación";
"lng_user_action_geo_location" = "{user} está obteniendo una ubicación";
"lng_send_action_choose_contact" = "eligiendo contacto";
"lng_user_action_choose_contact" = "{user} está eligiendo un contacto";
"lng_unread_bar" = "{count:_not_used_|# mensaje sin leer|# mensajes sin leer}"; "lng_unread_bar" = "{count:_not_used_|# mensaje sin leer|# mensajes sin leer}";
"lng_maps_point" = "Ubicación"; "lng_maps_point" = "Ubicación";
@ -508,6 +548,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_context_open_audio" = "Abrir audio"; "lng_context_open_audio" = "Abrir audio";
"lng_context_save_audio" = "Guardar como..."; "lng_context_save_audio" = "Guardar como...";
"lng_context_pack_info" = "Información del pack"; "lng_context_pack_info" = "Información del pack";
"lng_context_pack_add" = "Añadir stickers";
"lng_context_open_file" = "Abrir archivo"; "lng_context_open_file" = "Abrir archivo";
"lng_context_save_file" = "Guardar como..."; "lng_context_save_file" = "Guardar como...";
"lng_context_forward_file" = "Reenviar archivo"; "lng_context_forward_file" = "Reenviar archivo";
@ -600,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_new_version_wrap" = "Telegram Desktop fue actualizada a la versión {version}\n\n{changes}\n\nEl historial completo está disponible aquí:\n{link}"; "lng_new_version_wrap" = "Telegram Desktop fue actualizada a la versión {version}\n\n{changes}\n\nEl historial completo está disponible aquí:\n{link}";
"lng_new_version_minor" = "— Corrección de errores y otras mejoras menores"; "lng_new_version_minor" = "— Corrección de errores y otras mejoras menores";
"lng_new_version_text" = "Esta nueva versión incluye el soporte para bots, usando la nueva API para bots, gratis para todos. Si eres un ingeniero, crea tus propios bots para juegos, servicios o integraciones .\n\nConoce más en {blog_link}"; "lng_new_version_text" = "— Bloquea usuarios desde sus perfiles\n— Añadido el soporte para notificaciones Windows toast\n— Arreglados los métodos de entrada en Linux (Fcitx e IBus)";
"lng_menu_insert_unicode" = "Insertar caracteres de control Unicode"; "lng_menu_insert_unicode" = "Insertar caracteres de control Unicode";

View file

@ -26,9 +26,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_menu_back" = "Indietro"; "lng_menu_back" = "Indietro";
"lng_open_from_tray" = "Apri Telegram"; "lng_open_from_tray" = "Apri Telegram";
"lng_minimize_to_tray" = "Minimizza"; "lng_minimize_to_tray" = "Riduci a icona";
"lng_quit_from_tray" = "Chiudi Telegram"; "lng_quit_from_tray" = "Chiudi Telegram";
"lng_tray_icon_text" = "Telegram è ancora aperto qui,\npuoi cambiare questo nelle impostazioni.\n\nSe l'icona scompare dall'area di notifica,\npuoi riportarla indietro dalle icone nascoste."; "lng_tray_icon_text" = "Telegram è ancora attivo qui,\npuoi modificarlo nelle impostazioni.\nSe l'icona scompare dall'area di notifica,\npuoi ripristinarla dalle icone nascoste.";
"lng_month1" = "Gennaio"; "lng_month1" = "Gennaio";
"lng_month2" = "Febbraio"; "lng_month2" = "Febbraio";
@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_reconnecting_try_now" = "Prova ora"; "lng_reconnecting_try_now" = "Prova ora";
"lng_status_service_notifications" = "notifiche di servizio"; "lng_status_service_notifications" = "notifiche di servizio";
"lng_status_support" = "supporto";
"lng_status_bot" = "bot"; "lng_status_bot" = "bot";
"lng_status_bot_reads_all" = "ha accesso ai messaggi"; "lng_status_bot_reads_all" = "ha accesso ai messaggi";
"lng_status_bot_not_reads_all" = "non ha accesso ai messaggi"; "lng_status_bot_not_reads_all" = "non ha accesso ai messaggi";
@ -156,8 +157,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_dlg_new_group_name" = "Nome gruppo"; "lng_dlg_new_group_name" = "Nome gruppo";
"lng_dlg_create_group" = "Crea"; "lng_dlg_create_group" = "Crea";
"lng_no_contacts" = "Non hai contatti"; "lng_no_contacts" = "Non hai contatti";
"lng_no_chats" = "Le tua chat saranno qui";
"lng_contacts_loading" = "Caricamento.."; "lng_contacts_loading" = "Caricamento..";
"lng_contacts_not_found" = "Nessun contatto trovato"; "lng_contacts_not_found" = "Nessun contatto trovato";
"lng_dlg_search_chat" = "Cerca in questa chat";
"lng_dlg_search_for_messages" = "Cerca messaggi";
"lng_settings_save" = "Salva"; "lng_settings_save" = "Salva";
"lng_settings_upload" = "Imposta foto profilo"; "lng_settings_upload" = "Imposta foto profilo";
@ -166,11 +170,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_username_title" = "Cambia username"; "lng_username_title" = "Cambia username";
"lng_username_about" = "Puoi scegliere un username su Telegram.\nSe lo fai, le altre persone potranno trovarti\ntramite questo nome utente e contattarti \nsenza conoscere il tuo numero di telefono.\n\nPuoi usare a-z, 0-9 e underscore.\nLa lunghezza minima è di 5 caratteri."; "lng_username_about" = "Puoi scegliere un username su Telegram.\nSe lo fai, le altre persone potranno trovarti\ntramite questo nome utente e contattarti \nsenza conoscere il tuo numero di telefono.\n\nPuoi usare a-z, 0-9 e underscore.\nLa lunghezza minima è di 5 caratteri.";
"lng_username_invalid" = "Il nome non è valido."; "lng_username_invalid" = "L'username non è valido.";
"lng_username_occupied" = "Il nome è già occupato."; "lng_username_occupied" = "L'username è già occupato.";
"lng_username_too_short" = "Il nome è troppo corto."; "lng_username_too_short" = "L'username è troppo corto.";
"lng_username_bad_symbols" = "Questo nome ha simboli errati."; "lng_username_bad_symbols" = "Questo username ha simboli errati.";
"lng_username_available" = "Il nome è disponibile."; "lng_username_available" = "L'username è disponibile.";
"lng_username_not_found" = "Utente @{user} non trovato."; "lng_username_not_found" = "Utente @{user} non trovato.";
"lng_settings_section_contact_info" = "Informazioni di contatto"; "lng_settings_section_contact_info" = "Informazioni di contatto";
@ -182,6 +186,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_settings_desktop_notify" = "Notifiche desktop"; "lng_settings_desktop_notify" = "Notifiche desktop";
"lng_settings_show_name" = "Mostra nome del mittente"; "lng_settings_show_name" = "Mostra nome del mittente";
"lng_settings_show_preview" = "Mostra anteprima messaggio"; "lng_settings_show_preview" = "Mostra anteprima messaggio";
"lng_settings_use_windows" = "Usa le notifiche di Windows";
"lng_settings_sound_notify" = "Riproduci suono"; "lng_settings_sound_notify" = "Riproduci suono";
"lng_notification_preview" = "Hai un nuovo messaggio"; "lng_notification_preview" = "Hai un nuovo messaggio";
@ -267,7 +272,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_passcode_enter_first" = "Inserisci un codice"; "lng_passcode_enter_first" = "Inserisci un codice";
"lng_passcode_enter_new" = "Inserisci il nuovo codice"; "lng_passcode_enter_new" = "Inserisci il nuovo codice";
"lng_passcode_confirm_new" = "Reinserisci il nuovo codice"; "lng_passcode_confirm_new" = "Reinserisci il nuovo codice";
"lng_passcode_about" = "Quando imposti un codice, un'icona col lucchetto apparirà nel menu in alto. Premi su di essa per bloccare l'app. \n\nNota: se ti dimentichi il codice, dovrai rifare il login su Telegram Desktop."; "lng_passcode_about" = "Quando imposti un codice, un'icona col lucchetto apparirà nel menu in alto. Premi su di essa per bloccare l'app. \n\nNota: se dimentichi il codice, dovrai rifare l'accesso su Telegram Desktop.";
"lng_passcode_differ" = "I codici sono diversi"; "lng_passcode_differ" = "I codici sono diversi";
"lng_passcode_wrong" = "Codice errato"; "lng_passcode_wrong" = "Codice errato";
"lng_passcode_is_same" = "Il codice non è stato cambiato"; "lng_passcode_is_same" = "Il codice non è stato cambiato";
@ -301,13 +306,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_connection_type" = "Tipo di connessione:"; "lng_connection_type" = "Tipo di connessione:";
"lng_connection_auto_connecting" = "Default (connessione..)"; "lng_connection_auto_connecting" = "Default (connessione..)";
"lng_connection_auto" = "Default ({type} in uso)"; "lng_connection_auto" = "Predefinito ({transport} in uso)";
"lng_connection_http_proxy" = "HTTP con proxy"; "lng_connection_proxy_connecting" = "Connessione tramite proxy..";
"lng_connection_tcp_proxy" = "TCP con proxy"; "lng_connection_proxy" = "{transport} con proxy";
"lng_connection_header" = "Tipo di connessione"; "lng_connection_header" = "Tipo di connessione";
"lng_connection_auto_rb" = "Auto (TCP se disponibile o HTTP)"; "lng_connection_auto_rb" = "Auto (TCP se disponibile o HTTP)";
"lng_connection_http_proxy_rb" = "HTTP con proxy-http personalizzato"; "lng_connection_http_proxy_rb" = "HTTP con proxy-http personalizzato";
"lng_connection_tcp_proxy_rb" = "TCP con proxy-socks5 personalizzato"; "lng_connection_tcp_proxy_rb" = "TCP con proxy-socks5 personalizzato";
"lng_connection_try_ipv6" = "Prova a connettere tramite IPv6";
"lng_connection_host_ph" = "Hostname"; "lng_connection_host_ph" = "Hostname";
"lng_connection_port_ph" = "Porta"; "lng_connection_port_ph" = "Porta";
"lng_connection_user_ph" = "Username"; "lng_connection_user_ph" = "Username";
@ -319,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_settings_reset_one_sure" = "Vuoi terminare questa sessione?"; "lng_settings_reset_one_sure" = "Vuoi terminare questa sessione?";
"lng_settings_reset_button" = "Chiudi"; "lng_settings_reset_button" = "Chiudi";
"lng_settings_reset_done" = "Altre sessioni terminate"; "lng_settings_reset_done" = "Altre sessioni terminate";
"lng_settings_ask_question" = "Fai una domanda";
"lng_settings_ask_sure" = "Per favore, considera che il supporto su Telegram è offerto da volontari. Proveremo a risponderti il più velocemente possibile, ma potrebbe volerci un po' di tempo.\n\nDai un'occhiata alle FAQ di Telegram: potrai trovare importanti suggerimenti riguardo alcune problematiche e risposte alla maggior parte delle domande.";
"lng_settings_faq_button" = "Vai alle FAQ";
"lng_settings_ask_ok" = "Chiedi";
"lng_settings_faq" = "FAQ di Telegram";
"lng_settings_logout" = "Disconnetti"; "lng_settings_logout" = "Disconnetti";
"lng_sure_logout" = "Sicuro di volerti disconnettere?"; "lng_sure_logout" = "Sicuro di volerti disconnettere?";
@ -338,6 +349,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_topbar_info" = "Info"; "lng_topbar_info" = "Info";
"lng_profile_about_section" = "Info"; "lng_profile_about_section" = "Info";
"lng_profile_settings_section" = "Impostazioni"; "lng_profile_settings_section" = "Impostazioni";
"lng_profile_actions_section" = "Azioni";
"lng_profile_bot_settings" = "Impostazioni"; "lng_profile_bot_settings" = "Impostazioni";
"lng_profile_bot_help" = "Aiuto"; "lng_profile_bot_help" = "Aiuto";
"lng_profile_participants_section" = "Membri"; "lng_profile_participants_section" = "Membri";
@ -347,6 +359,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_profile_edit_contact" = "Modifica"; "lng_profile_edit_contact" = "Modifica";
"lng_profile_enable_notifications" = "Notifiche"; "lng_profile_enable_notifications" = "Notifiche";
"lng_profile_clear_history" = "Cancella la cronologia"; "lng_profile_clear_history" = "Cancella la cronologia";
"lng_profile_delete_conversation" = "Elimina chat";
"lng_profile_clear_and_exit" = "Elimina ed esci";
"lng_profile_search_messages" = "Cerca messaggi";
"lng_profile_block_user" = "Blocca utente";
"lng_profile_unblock_user" = "Sblocca utente";
"lng_profile_block_bot" = "Arresta e blocca bot";
"lng_profile_unblock_bot" = "Sblocca bot";
"lng_profile_send_message" = "Invia messaggio"; "lng_profile_send_message" = "Invia messaggio";
"lng_profile_share_contact" = "Condividi contatto"; "lng_profile_share_contact" = "Condividi contatto";
"lng_profile_invite_to_group" = "Aggiungi a un gruppo"; "lng_profile_invite_to_group" = "Aggiungi a un gruppo";
@ -367,6 +386,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_profile_files_header" = "Panoramica file"; "lng_profile_files_header" = "Panoramica file";
"lng_profile_audios" = "{count:_not_used_|# nota vocale|# note vocali} »"; "lng_profile_audios" = "{count:_not_used_|# nota vocale|# note vocali} »";
"lng_profile_audios_header" = "Panoramica note vocali"; "lng_profile_audios_header" = "Panoramica note vocali";
"lng_profile_audio_files_header" = "Playlist";
"lng_profile_show_all_types" = "Mostra tutti i tipi"; "lng_profile_show_all_types" = "Mostra tutti i tipi";
"lng_profile_copy_phone" = "Copia numero di telefono"; "lng_profile_copy_phone" = "Copia numero di telefono";
@ -377,13 +397,16 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_create_group_title" = "Nuovo gruppo"; "lng_create_group_title" = "Nuovo gruppo";
"lng_failed_add_participant" = "Impossibile aggiungere l'utente. Riprova più tardi."; "lng_failed_add_participant" = "Impossibile aggiungere l'utente. Riprova più tardi.";
"lng_failed_add_not_mutual" = "Se una persona lascia un gruppo,\nsolo un contatto in comune può reinvitarla\n(lei deve avere il tuo numero\ndi telefono, e tu il suo).";
"lng_sure_delete_contact" = "Sicuro di volere eliminare {contact} dalla tua lista dei contatti?"; "lng_sure_delete_contact" = "Sicuro di volere eliminare {contact} dalla tua lista dei contatti?";
"lng_sure_delete_history" = "Sicuro di voler eliminare tutta la cronologia dei messaggi con {contact}?\n\nQuesta azione non può essere annullata."; "lng_sure_delete_history" = "Sicuro di voler eliminare tutta la cronologia dei messaggi con {contact}?\n\nQuesta azione non può essere annullata.";
"lng_sure_delete_group_history" = "Sicuro di voler eliminare tutta la cronologia dei messaggi in «{group}»?\n\nQuesta azione non può essere annullata.";
"lng_sure_delete_and_exit" = "Sicuro di voler eliminare tutta la cronologia dei messaggi e abbandonare «{group}»?\n\nQuesta azione non può essere annullata."; "lng_sure_delete_and_exit" = "Sicuro di voler eliminare tutta la cronologia dei messaggi e abbandonare «{group}»?\n\nQuesta azione non può essere annullata.";
"lng_message_empty" = "(vuoto)"; "lng_message_empty" = "Messaggio vuoto";
"lng_media_unsupported" = "Media non supportato";
"lng_action_add_user" = "{from} ha aggiunto {user}"; "lng_action_add_user" = "{from} ha aggiunto {user}";
"lng_action_kick_user" = "{from} ha rimosso {user}"; "lng_action_kick_user" = "{from} ha rimosso {user}";
@ -463,6 +486,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_message_with_from" = "[c]{from}:[/c] {message}";
"lng_from_you" = "Tu"; "lng_from_you" = "Tu";
"lng_bot_description" = "Cosa può fare questo bot?"; "lng_bot_description" = "Cosa può fare questo bot?";
"lng_unblock_button" = "Sblocca";
"lng_bot_start" = "Avvia"; "lng_bot_start" = "Avvia";
"lng_bot_choose_group" = "Scegli gruppo"; "lng_bot_choose_group" = "Scegli gruppo";
@ -475,6 +499,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_user_typing" = "{user} sta scrivendo"; "lng_user_typing" = "{user} sta scrivendo";
"lng_users_typing" = "{user} e {second_user} stanno scrivendo"; "lng_users_typing" = "{user} e {second_user} stanno scrivendo";
"lng_many_typing" = "{count:_not_used_|# sta|# stanno} scrivendo"; "lng_many_typing" = "{count:_not_used_|# sta|# stanno} scrivendo";
"lng_send_action_record_video" = "registrando un video";
"lng_user_action_record_video" = "{user} sta registrando un video";
"lng_send_action_upload_video" = "inviando un video";
"lng_user_action_upload_video" = "{user} sta inviando un video";
"lng_send_action_record_audio" = "registrando un audio";
"lng_user_action_record_audio" = "{user} sta registrando un audio";
"lng_send_action_upload_audio" = "inviando un audio";
"lng_user_action_upload_audio" = "{user} sta inviando un audio";
"lng_send_action_upload_photo" = "inviando una foto";
"lng_user_action_upload_photo" = "{user} sta inviando una foto";
"lng_send_action_upload_file" = "inviando un file";
"lng_user_action_upload_file" = "{user} sta inviando un file";
"lng_send_action_geo_location" = "selezionando una posizione";
"lng_user_action_geo_location" = "{user} sta selezionando una posizione";
"lng_send_action_choose_contact" = "selezionando un contatto";
"lng_user_action_choose_contact" = "{user} sta selezionando un contatto";
"lng_unread_bar" = "{count:_not_used_|# messaggio non letto|# messaggi non letti}"; "lng_unread_bar" = "{count:_not_used_|# messaggio non letto|# messaggi non letti}";
"lng_maps_point" = "Posizione"; "lng_maps_point" = "Posizione";
@ -508,6 +548,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_context_open_audio" = "Apri audio"; "lng_context_open_audio" = "Apri audio";
"lng_context_save_audio" = "Salva audio come.."; "lng_context_save_audio" = "Salva audio come..";
"lng_context_pack_info" = "Mostra sticker"; "lng_context_pack_info" = "Mostra sticker";
"lng_context_pack_add" = "Aggiungi sticker";
"lng_context_open_file" = "Apri file"; "lng_context_open_file" = "Apri file";
"lng_context_save_file" = "Salva file come.."; "lng_context_save_file" = "Salva file come..";
"lng_context_forward_file" = "Inoltra file"; "lng_context_forward_file" = "Inoltra file";
@ -600,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_new_version_wrap" = "Telegram Desktop si è aggiornato alla versione {version}\n\n{changes}\n\nLa cronologia degli update è disponibile qui:\n{link}"; "lng_new_version_wrap" = "Telegram Desktop si è aggiornato alla versione {version}\n\n{changes}\n\nLa cronologia degli update è disponibile qui:\n{link}";
"lng_new_version_minor" = "— Bug fix e altri miglioramenti minori"; "lng_new_version_minor" = "— Bug fix e altri miglioramenti minori";
"lng_new_version_text" = "Questa nuova versione include il support per i bot usando la nuova API per i bot. Se sei un ingegnere, crea i tuoi bot per giochi, servizi o integrazioni. Scopri di più su {blog_link}"; "lng_new_version_text" = "— Blocca gli utenti dalla loro pagina profilo\n— Aggiunto il supporto per le notifiche toast di Windows\n— Risolti i problemi con alcuni metodi di input su Linux (Fcitx and IBus)";
"lng_menu_insert_unicode" = "Inserisci carattere di controllo Unicode"; "lng_menu_insert_unicode" = "Inserisci carattere di controllo Unicode";

View file

@ -28,7 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_open_from_tray" = "텔레그램 실행"; "lng_open_from_tray" = "텔레그램 실행";
"lng_minimize_to_tray" = "창을 최소화"; "lng_minimize_to_tray" = "창을 최소화";
"lng_quit_from_tray" = "텔레그램 종료"; "lng_quit_from_tray" = "텔레그램 종료";
"lng_tray_icon_text" = "텔레그램은 아직 실행중입니다.\n설정 화면에서 실행설정을 변경하실 수 있습니다.\n\n트레이메뉴에서 이 아이콘이 사라질 경우.\n숨겨진 아이콘 목록에서 다시 복원할 수 있습니다."; "lng_tray_icon_text" = "텔레그램은 아직 실행중입니다. \n설정 화면에서 실행설정을 변경하실 수 있습니다. \n트레이메뉴에서 이 아이콘이 사라질 경우. \n숨겨진 아이콘 목록에서 다시 복원할 수 있습니다.";
"lng_month1" = "1월"; "lng_month1" = "1월";
"lng_month2" = "2월"; "lng_month2" = "2월";
@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_reconnecting_try_now" = "다시 시도"; "lng_reconnecting_try_now" = "다시 시도";
"lng_status_service_notifications" = "서비스 알림"; "lng_status_service_notifications" = "서비스 알림";
"lng_status_support" = "지원";
"lng_status_bot" = "bot"; "lng_status_bot" = "bot";
"lng_status_bot_reads_all" = "메시지 접근 권한이 있습니다."; "lng_status_bot_reads_all" = "메시지 접근 권한이 있습니다.";
"lng_status_bot_not_reads_all" = "메시지 접근 권한이 없습니다."; "lng_status_bot_not_reads_all" = "메시지 접근 권한이 없습니다.";
@ -156,8 +157,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_dlg_new_group_name" = "그룹이름"; "lng_dlg_new_group_name" = "그룹이름";
"lng_dlg_create_group" = "만들기"; "lng_dlg_create_group" = "만들기";
"lng_no_contacts" = "연락처가 없습니다."; "lng_no_contacts" = "연락처가 없습니다.";
"lng_no_chats" = "대화시 대화방이 존재 할 곳입니다.";
"lng_contacts_loading" = "로드중.."; "lng_contacts_loading" = "로드중..";
"lng_contacts_not_found" = "연락처를 찾을 수 없음"; "lng_contacts_not_found" = "연락처를 찾을 수 없음";
"lng_dlg_search_chat" = "이 채팅에서 검색";
"lng_dlg_search_for_messages" = "메시지 검색";
"lng_settings_save" = "저장"; "lng_settings_save" = "저장";
"lng_settings_upload" = "프로필 이미지 선택"; "lng_settings_upload" = "프로필 이미지 선택";
@ -169,7 +173,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_username_invalid" = "올바르지 않은 아이디입니다."; "lng_username_invalid" = "올바르지 않은 아이디입니다.";
"lng_username_occupied" = "사용중인 아이디입니다."; "lng_username_occupied" = "사용중인 아이디입니다.";
"lng_username_too_short" = "아이디가 너무 짧습니다."; "lng_username_too_short" = "아이디가 너무 짧습니다.";
"lng_username_bad_symbols" = "올바르지 않은 아이디입니다."; "lng_username_bad_symbols" = "아이디에 올바르지 않은 문자가 있습니다.";
"lng_username_available" = "사용 가능한 아이디입니다."; "lng_username_available" = "사용 가능한 아이디입니다.";
"lng_username_not_found" = "아이디 @{user}를 찾을 수 없습니다."; "lng_username_not_found" = "아이디 @{user}를 찾을 수 없습니다.";
@ -182,6 +186,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_settings_desktop_notify" = "데스크탑 알림"; "lng_settings_desktop_notify" = "데스크탑 알림";
"lng_settings_show_name" = "발신인 표시"; "lng_settings_show_name" = "발신인 표시";
"lng_settings_show_preview" = "메시지 미리보기"; "lng_settings_show_preview" = "메시지 미리보기";
"lng_settings_use_windows" = "윈도우 알림 사용";
"lng_settings_sound_notify" = "소리 재생"; "lng_settings_sound_notify" = "소리 재생";
"lng_notification_preview" = "새로운 메시지가 있습니다."; "lng_notification_preview" = "새로운 메시지가 있습니다.";
@ -301,13 +306,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_connection_type" = "연결 유형:"; "lng_connection_type" = "연결 유형:";
"lng_connection_auto_connecting" = "기본값 (연결중..)"; "lng_connection_auto_connecting" = "기본값 (연결중..)";
"lng_connection_auto" = "기본값 ({type} 사용)"; "lng_connection_auto" = "기본값 ({transport} 사용)";
"lng_connection_http_proxy" = "HTTP 프록시"; "lng_connection_proxy_connecting" = "프록시 연결 중...";
"lng_connection_tcp_proxy" = "TCP 프록시"; "lng_connection_proxy" = "{transport} 프록시 연결";
"lng_connection_header" = "연결 유형"; "lng_connection_header" = "연결 유형";
"lng_connection_auto_rb" = "자동 (사용 가능하다면 TCP 아니면 HTTP 사용)"; "lng_connection_auto_rb" = "자동 (사용 가능하다면 TCP 아니면 HTTP 사용)";
"lng_connection_http_proxy_rb" = "HTTP (커스텀 HTTP 프록시)"; "lng_connection_http_proxy_rb" = "HTTP (커스텀 HTTP 프록시)";
"lng_connection_tcp_proxy_rb" = "TCP (커스텀 socks5-proxy)"; "lng_connection_tcp_proxy_rb" = "TCP (커스텀 socks5-proxy)";
"lng_connection_try_ipv6" = "IPv6로 연결 시도 중";
"lng_connection_host_ph" = "호스트네임"; "lng_connection_host_ph" = "호스트네임";
"lng_connection_port_ph" = "포트"; "lng_connection_port_ph" = "포트";
"lng_connection_user_ph" = "아이디"; "lng_connection_user_ph" = "아이디";
@ -319,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_settings_reset_one_sure" = "해당 세션을 강제 종료 하시겠습니까?"; "lng_settings_reset_one_sure" = "해당 세션을 강제 종료 하시겠습니까?";
"lng_settings_reset_button" = "종료"; "lng_settings_reset_button" = "종료";
"lng_settings_reset_done" = "다른 모든 세션이 강제 종료 되었습니다."; "lng_settings_reset_done" = "다른 모든 세션이 강제 종료 되었습니다.";
"lng_settings_ask_question" = "질문하기";
"lng_settings_ask_sure" = "텔레그램에 관한 질문은 자원봉사자들이 답변해 드립니다. 신속한 답변을 위해 노력하지만 답변이 다소 늦을 수 있습니다.\n\n일반적인 문제와 해결방법에 대해서는 자주 묻는 질문을 확인해 보세요.";
"lng_settings_faq_button" = "자주 묻는 질문 으로 이동";
"lng_settings_ask_ok" = "질문하기";
"lng_settings_faq" = "텔레그램 자주 묻는 질문";
"lng_settings_logout" = "로그아웃"; "lng_settings_logout" = "로그아웃";
"lng_sure_logout" = "로그아웃을 하시겠습니까?"; "lng_sure_logout" = "로그아웃을 하시겠습니까?";
@ -338,6 +349,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_topbar_info" = "정보"; "lng_topbar_info" = "정보";
"lng_profile_about_section" = "취소"; "lng_profile_about_section" = "취소";
"lng_profile_settings_section" = "환경설정"; "lng_profile_settings_section" = "환경설정";
"lng_profile_actions_section" = "동작";
"lng_profile_bot_settings" = "환경설정"; "lng_profile_bot_settings" = "환경설정";
"lng_profile_bot_help" = "도움말"; "lng_profile_bot_help" = "도움말";
"lng_profile_participants_section" = "사용자"; "lng_profile_participants_section" = "사용자";
@ -347,6 +359,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_profile_edit_contact" = "수정"; "lng_profile_edit_contact" = "수정";
"lng_profile_enable_notifications" = "알림"; "lng_profile_enable_notifications" = "알림";
"lng_profile_clear_history" = "히스토리 초기화"; "lng_profile_clear_history" = "히스토리 초기화";
"lng_profile_delete_conversation" = "대화 지우기";
"lng_profile_clear_and_exit" = "삭제 후 종료";
"lng_profile_search_messages" = "메시지 검색";
"lng_profile_block_user" = "차단하기";
"lng_profile_unblock_user" = "차단해제하기";
"lng_profile_block_bot" = "봇 중지 및 차단";
"lng_profile_unblock_bot" = "봇 차단해제";
"lng_profile_send_message" = "메세지 전송"; "lng_profile_send_message" = "메세지 전송";
"lng_profile_share_contact" = "연락처 공유"; "lng_profile_share_contact" = "연락처 공유";
"lng_profile_invite_to_group" = "그룹에 추가"; "lng_profile_invite_to_group" = "그룹에 추가";
@ -367,6 +386,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_profile_files_header" = "파일 내역"; "lng_profile_files_header" = "파일 내역";
"lng_profile_audios" = "{count:_not_used_|#개의 음성 메시지|#개의 음성 메시지} »"; "lng_profile_audios" = "{count:_not_used_|#개의 음성 메시지|#개의 음성 메시지} »";
"lng_profile_audios_header" = "음성 메시지 내역"; "lng_profile_audios_header" = "음성 메시지 내역";
"lng_profile_audio_files_header" = "재생목록";
"lng_profile_show_all_types" = "모든 유형 보기"; "lng_profile_show_all_types" = "모든 유형 보기";
"lng_profile_copy_phone" = "전화번호 복사"; "lng_profile_copy_phone" = "전화번호 복사";
@ -377,13 +397,16 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_create_group_title" = "새로운 그룹"; "lng_create_group_title" = "새로운 그룹";
"lng_failed_add_participant" = "사용자를 초대할 수 없습니다. 나중에 다시 시도해주세요."; "lng_failed_add_participant" = "사용자를 초대할 수 없습니다. 나중에 다시 시도해주세요.";
"lng_failed_add_not_mutual" = "죄송합니다. 그룹방에서 대화상대방이 나갔을 경우,\n상대 전화번호가 있는 분만 초대가 가능합니다.\n(서로 전화번호가 등록되어져 있어야만 가능)";
"lng_sure_delete_contact" = "{contact} 님을 주소록에서 \n삭제하시겠습니까?"; "lng_sure_delete_contact" = "{contact} 님을 주소록에서 \n삭제하시겠습니까?";
"lng_sure_delete_history" = "{contact} 님과 관련된 모든 메시지를 \n삭제하시겠습니까?\n\n삭제 하실 경우 취소가 불가능합니다."; "lng_sure_delete_history" = "{contact} 님과 관련된 모든 메시지를 \n삭제하시겠습니까?\n\n삭제 하실 경우 취소가 불가능합니다.";
"lng_sure_delete_group_history" = "그룹<<{group}>> 방의 모든 메시지 기록을 삭제하시겠습니까?\n\n이 작업은 취소가 불가능합니다.";
"lng_sure_delete_and_exit" = "그룹 «{group}» 방에서 모든 메시지를 \n삭제하시고 퇴장하시겠습니까?\n\n삭제 하실 경우 취소가 불가능합니다."; "lng_sure_delete_and_exit" = "그룹 «{group}» 방에서 모든 메시지를 \n삭제하시고 퇴장하시겠습니까?\n\n삭제 하실 경우 취소가 불가능합니다.";
"lng_message_empty" = "(없음)"; "lng_message_empty" = "메시지 없음";
"lng_media_unsupported" = "지원하지 않는 미디어";
"lng_action_add_user" = "{from} 님께서 {user} 님을 초대하셨습니다."; "lng_action_add_user" = "{from} 님께서 {user} 님을 초대하셨습니다.";
"lng_action_kick_user" = "{from} 님께서 {user} 님을 추방하셨습니다."; "lng_action_kick_user" = "{from} 님께서 {user} 님을 추방하셨습니다.";
@ -457,12 +480,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_send_button" = "보내기"; "lng_send_button" = "보내기";
"lng_message_ph" = "메시지 쓰기"; "lng_message_ph" = "메시지 쓰기";
"lng_record_cancel" = "이 영역에서 마우스 클릭을 해제하시면 취소가 됩니다."; "lng_record_cancel" = "이 영역에서 마우스 클릭을 해제하시면 취소가 됩니다.";
"lng_empty_history" = ""; "lng_empty_history" = "";
"lng_willbe_history" = "대화하실 방을 선택해주세요."; "lng_willbe_history" = "대화하실 방을 선택해주세요.";
"lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_message_with_from" = "[c]{from}:[/c] {message}";
"lng_from_you" = "회원님"; "lng_from_you" = "회원님";
"lng_bot_description" = "봇이 할 수 있는 일은 무엇일까요?"; "lng_bot_description" = "봇이 할 수 있는 일은 무엇일까요?";
"lng_unblock_button" = "차단해제";
"lng_bot_start" = "시작"; "lng_bot_start" = "시작";
"lng_bot_choose_group" = "그룹 선택"; "lng_bot_choose_group" = "그룹 선택";
@ -475,6 +499,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_user_typing" = "{user}님이 입력중입니다."; "lng_user_typing" = "{user}님이 입력중입니다.";
"lng_users_typing" = "{user}님과 {second_user}님이 입력중입니다."; "lng_users_typing" = "{user}님과 {second_user}님이 입력중입니다.";
"lng_many_typing" = "{count:_not_used_|#명이|#명이} 입력중입니다"; "lng_many_typing" = "{count:_not_used_|#명이|#명이} 입력중입니다";
"lng_send_action_record_video" = "비디오 녹화 중";
"lng_user_action_record_video" = "{user}님이 녹화중입니다.";
"lng_send_action_upload_video" = "비디오 전송 중";
"lng_user_action_upload_video" = "{user}님이 비디오를 전송 중입니다.";
"lng_send_action_record_audio" = "오디오 녹음 중";
"lng_user_action_record_audio" = "{user}님이 오디오를 녹음 중입니다.";
"lng_send_action_upload_audio" = "오디오 전송 중";
"lng_user_action_upload_audio" = "{user}님이 오디오를 전송 중입니다.";
"lng_send_action_upload_photo" = "사진 전송 중";
"lng_user_action_upload_photo" = "{user}님이 사진을 전송 중입니다.";
"lng_send_action_upload_file" = "파일을 전송 중";
"lng_user_action_upload_file" = "{user}님이 사진을 전송 중입니다.";
"lng_send_action_geo_location" = "위치 선택 중";
"lng_user_action_geo_location" = "{user}님이 위치를 선택 중입니다.";
"lng_send_action_choose_contact" = "연락처 선택 중";
"lng_user_action_choose_contact" = "{user}님이 연락처를 선택 중입니다.";
"lng_unread_bar" = "{count:_not_used_|#개의 읽지 않은 메시지|#개의 읽지 않은 메시지}"; "lng_unread_bar" = "{count:_not_used_|#개의 읽지 않은 메시지|#개의 읽지 않은 메시지}";
"lng_maps_point" = "위치"; "lng_maps_point" = "위치";
@ -508,6 +548,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_context_open_audio" = "음성메시지 열기"; "lng_context_open_audio" = "음성메시지 열기";
"lng_context_save_audio" = "음성메시지를 다른 이름으로 저장.."; "lng_context_save_audio" = "음성메시지를 다른 이름으로 저장..";
"lng_context_pack_info" = "팩 정보"; "lng_context_pack_info" = "팩 정보";
"lng_context_pack_add" = "스티커 추가";
"lng_context_open_file" = "파일 열기"; "lng_context_open_file" = "파일 열기";
"lng_context_save_file" = "파일을 다른 이름으로 저장.."; "lng_context_save_file" = "파일을 다른 이름으로 저장..";
"lng_context_forward_file" = "파일 전달"; "lng_context_forward_file" = "파일 전달";
@ -600,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_new_version_wrap" = "텔레그램 데스크탑은 {version} 버전으로 업데이트 되었습니다.\n\n{changes}\n\n전체 버전 히스토리는 아래에서 확인 가능합니다:\n{link}"; "lng_new_version_wrap" = "텔레그램 데스크탑은 {version} 버전으로 업데이트 되었습니다.\n\n{changes}\n\n전체 버전 히스토리는 아래에서 확인 가능합니다:\n{link}";
"lng_new_version_minor" = "— 버그 수정 및 일부 기능 향상"; "lng_new_version_minor" = "— 버그 수정 및 일부 기능 향상";
"lng_new_version_text" = "새로운 버전에서는 신규 봇 API를 무료로 공개합니다. 개발자라면 누구나 게임, 서비스나 통합 봇등 개발이 가능합니다. \n\n{blog_link}에서 자세한 사항을 알아보세요."; "lng_new_version_text" = "— 프로필 화면에서 사용자 차단\n— 윈도우 알림 지원\n— 리눅스 입력 방법 수정 (Fcitx and IBus)";
"lng_menu_insert_unicode" = "유니코드 문자를 입력하세요."; "lng_menu_insert_unicode" = "유니코드 문자를 입력하세요.";

View file

@ -28,7 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_open_from_tray" = "Telegram openen"; "lng_open_from_tray" = "Telegram openen";
"lng_minimize_to_tray" = "Minimaliseer naar systeemvak"; "lng_minimize_to_tray" = "Minimaliseer naar systeemvak";
"lng_quit_from_tray" = "Telegram afsluiten"; "lng_quit_from_tray" = "Telegram afsluiten";
"lng_tray_icon_text" = "Telegram is nog steeds actief,\nJe kunt dit wijzigen via instellingen.\n\nAls dit icoon verdwijnt van het systeemvak,\nkun je deze terugslepen vanaf de verborgen iconen."; "lng_tray_icon_text" = "Telegram is nog steeds actief, \nje kunt dit wijzigen via instellingen.\nAls dit icoon verdwijnt van het systeemvak,\nkun je deze terugslepen vanaf de verborgen iconen.";
"lng_month1" = "januari"; "lng_month1" = "januari";
"lng_month2" = "februari"; "lng_month2" = "februari";
@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_reconnecting_try_now" = "Probeer nu"; "lng_reconnecting_try_now" = "Probeer nu";
"lng_status_service_notifications" = "servicemeldingen"; "lng_status_service_notifications" = "servicemeldingen";
"lng_status_support" = "ondersteuning";
"lng_status_bot" = "bot"; "lng_status_bot" = "bot";
"lng_status_bot_reads_all" = "toegang tot berichten"; "lng_status_bot_reads_all" = "toegang tot berichten";
"lng_status_bot_not_reads_all" = "geen toegang tot berichten"; "lng_status_bot_not_reads_all" = "geen toegang tot berichten";
@ -156,8 +157,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_dlg_new_group_name" = "Groepsnaam"; "lng_dlg_new_group_name" = "Groepsnaam";
"lng_dlg_create_group" = "Maak"; "lng_dlg_create_group" = "Maak";
"lng_no_contacts" = "Je hebt geen contacten"; "lng_no_contacts" = "Je hebt geen contacten";
"lng_no_chats" = "Hier komen je chats";
"lng_contacts_loading" = "Bezig met laden"; "lng_contacts_loading" = "Bezig met laden";
"lng_contacts_not_found" = "Geen contacten gevonden"; "lng_contacts_not_found" = "Geen contacten gevonden";
"lng_dlg_search_chat" = "Zoek in deze chat";
"lng_dlg_search_for_messages" = "Zoek berichten";
"lng_settings_save" = "Opslaan"; "lng_settings_save" = "Opslaan";
"lng_settings_upload" = "Profielfoto instellen"; "lng_settings_upload" = "Profielfoto instellen";
@ -166,11 +170,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_username_title" = "Gebruikersnaam wijzigen"; "lng_username_title" = "Gebruikersnaam wijzigen";
"lng_username_about" = "Je kunt hier je gebruikersnaam kiezen. \nHiermee kunnen anderen je vinden \nen contact met je opnemen zonder \nje telefoonnummer te weten.\n\na-z, 0-9 en underscore is toegestaan. \nDe minimale lengte is 5 tekens."; "lng_username_about" = "Je kunt hier je gebruikersnaam kiezen. \nHiermee kunnen anderen je vinden \nen contact met je opnemen zonder \nje telefoonnummer te weten.\n\na-z, 0-9 en underscore is toegestaan. \nDe minimale lengte is 5 tekens.";
"lng_username_invalid" = "Deze naam is ongeldig."; "lng_username_invalid" = "Deze gebruikersnaam is ongeldig.";
"lng_username_occupied" = "Sorry, deze gebruikersnaam is al bezet."; "lng_username_occupied" = "Deze gebruikersnaam is al bezet";
"lng_username_too_short" = "Deze naam is te kort."; "lng_username_too_short" = "Deze gebruikersnaam is te kort.";
"lng_username_bad_symbols" = "Sorry, deze naam bevat ongeldige tekens."; "lng_username_bad_symbols" = "Deze gebruikersnaam bevat ongeldige tekens.";
"lng_username_available" = "Deze naam is beschikbaar."; "lng_username_available" = "Deze gebruikersnaam is beschikbaar.";
"lng_username_not_found" = "Gebruiker @{user} niet gevonden."; "lng_username_not_found" = "Gebruiker @{user} niet gevonden.";
"lng_settings_section_contact_info" = "Contactgegevens"; "lng_settings_section_contact_info" = "Contactgegevens";
@ -182,6 +186,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_settings_desktop_notify" = "Desktopmeldingen"; "lng_settings_desktop_notify" = "Desktopmeldingen";
"lng_settings_show_name" = "Afzender weergeven"; "lng_settings_show_name" = "Afzender weergeven";
"lng_settings_show_preview" = "Voorvertoning weergeven"; "lng_settings_show_preview" = "Voorvertoning weergeven";
"lng_settings_use_windows" = "Windows-berichtgeving gebruiken";
"lng_settings_sound_notify" = "Geluiden afspelen"; "lng_settings_sound_notify" = "Geluiden afspelen";
"lng_notification_preview" = "Je hebt een nieuw bericht"; "lng_notification_preview" = "Je hebt een nieuw bericht";
@ -289,7 +294,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_cloud_password_bad" = "De hint moet anders zijn dan je wachtwoord."; "lng_cloud_password_bad" = "De hint moet anders zijn dan je wachtwoord.";
"lng_cloud_password_email" = "Herstel-e-mailadres invoeren"; "lng_cloud_password_email" = "Herstel-e-mailadres invoeren";
"lng_cloud_password_bad_email" = "Ongeldig e-mailadres, probeer een andere."; "lng_cloud_password_bad_email" = "Ongeldig e-mailadres, probeer een andere.";
"lng_cloud_password_about" = "Naast de code die je per SMS ontvangt kun je een extra wachtwoord instellen voor als je inlogt op een nieuw apparaat."; "lng_cloud_password_about" = "Dit wachtwoord is nodig als je inlogt vanaf een nieuw apparaat, naast de SMS die je ontvangt.";
"lng_cloud_password_about_recover" = "Let op: Echt geen herstel-emailadres\nopgeven voor je wachtwoord?\n\nBij verlies van je wachtwoord ben je\nook de toegang tot Telegram kwijt."; "lng_cloud_password_about_recover" = "Let op: Echt geen herstel-emailadres\nopgeven voor je wachtwoord?\n\nBij verlies van je wachtwoord ben je\nook de toegang tot Telegram kwijt.";
"lng_cloud_password_almost" = "Een bevestigingslink is naar\nhet e-mailadres verstuurd.\n\ntwee-staps-verificatie is actief\nna het klikken van de e-mail-link."; "lng_cloud_password_almost" = "Een bevestigingslink is naar\nhet e-mailadres verstuurd.\n\ntwee-staps-verificatie is actief\nna het klikken van de e-mail-link.";
"lng_cloud_password_was_set" = "Twee-staps-verificatie ingeschakeld."; "lng_cloud_password_was_set" = "Twee-staps-verificatie ingeschakeld.";
@ -301,13 +306,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_connection_type" = "Verbindingstype:"; "lng_connection_type" = "Verbindingstype:";
"lng_connection_auto_connecting" = "Standaard (verbinden)"; "lng_connection_auto_connecting" = "Standaard (verbinden)";
"lng_connection_auto" = "Standaard ({type} wordt gebruikt)"; "lng_connection_auto" = "Standaard ({transport} wordt gebruikt)";
"lng_connection_http_proxy" = "HTTP met proxy"; "lng_connection_proxy_connecting" = "Verbinden via proxy..";
"lng_connection_tcp_proxy" = "TCP met proxy"; "lng_connection_proxy" = "{transport} met proxy";
"lng_connection_header" = "Verbindingstype"; "lng_connection_header" = "Verbindingstype";
"lng_connection_auto_rb" = "Auto (TCP indien beschikbaar of HTTP)"; "lng_connection_auto_rb" = "Auto (TCP indien beschikbaar of HTTP)";
"lng_connection_http_proxy_rb" = "HTTP met aangepaste http-proxy"; "lng_connection_http_proxy_rb" = "HTTP met aangepaste http-proxy";
"lng_connection_tcp_proxy_rb" = "TCP met aangepaste socks5-proxy"; "lng_connection_tcp_proxy_rb" = "TCP met aangepaste socks5-proxy";
"lng_connection_try_ipv6" = "Verbinden via IPV6";
"lng_connection_host_ph" = "Hostnaam"; "lng_connection_host_ph" = "Hostnaam";
"lng_connection_port_ph" = "Poort"; "lng_connection_port_ph" = "Poort";
"lng_connection_user_ph" = "Gebruikersnaam"; "lng_connection_user_ph" = "Gebruikersnaam";
@ -319,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_settings_reset_one_sure" = "Deze sessie beëindigen?"; "lng_settings_reset_one_sure" = "Deze sessie beëindigen?";
"lng_settings_reset_button" = "Beëindigen"; "lng_settings_reset_button" = "Beëindigen";
"lng_settings_reset_done" = "Alle andere sessies zijn beëindigd"; "lng_settings_reset_done" = "Alle andere sessies zijn beëindigd";
"lng_settings_ask_question" = "Een vraag stellen";
"lng_settings_ask_sure" = "De ondersteuning voor Telegram wordt gedaan door vrijwilligers. We proberen zo snel mogelijk te reageren maar het kan even duren. \n\nBekijk ook de veelgestelde vragen, deze bevat belangrijke tips en antwoorden op de meest gestelde vragen. ";
"lng_settings_faq_button" = "Veelgestelde vragen";
"lng_settings_ask_ok" = "Vraag";
"lng_settings_faq" = "Veelgestelde vragen";
"lng_settings_logout" = "Uitloggen"; "lng_settings_logout" = "Uitloggen";
"lng_sure_logout" = "Weet je zeker dat je wilt uitloggen?"; "lng_sure_logout" = "Weet je zeker dat je wilt uitloggen?";
@ -338,6 +349,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_topbar_info" = "Info"; "lng_topbar_info" = "Info";
"lng_profile_about_section" = "Over"; "lng_profile_about_section" = "Over";
"lng_profile_settings_section" = "Instellingen"; "lng_profile_settings_section" = "Instellingen";
"lng_profile_actions_section" = "Acties";
"lng_profile_bot_settings" = "Instellingen"; "lng_profile_bot_settings" = "Instellingen";
"lng_profile_bot_help" = "Help"; "lng_profile_bot_help" = "Help";
"lng_profile_participants_section" = "Deelnemers"; "lng_profile_participants_section" = "Deelnemers";
@ -347,6 +359,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_profile_edit_contact" = "Wijzig"; "lng_profile_edit_contact" = "Wijzig";
"lng_profile_enable_notifications" = "Meldingen"; "lng_profile_enable_notifications" = "Meldingen";
"lng_profile_clear_history" = "Geschiedenis wissen"; "lng_profile_clear_history" = "Geschiedenis wissen";
"lng_profile_delete_conversation" = "Gesprek verwijderen";
"lng_profile_clear_and_exit" = "Verwijder en verlaat";
"lng_profile_search_messages" = "Zoek berichten";
"lng_profile_block_user" = "Blokkeer gebruiker";
"lng_profile_unblock_user" = "Deblokkeer gebruiker";
"lng_profile_block_bot" = "Stop en blokkeer bot";
"lng_profile_unblock_bot" = "Deblokkeer bot";
"lng_profile_send_message" = "Bericht sturen"; "lng_profile_send_message" = "Bericht sturen";
"lng_profile_share_contact" = "Contact delen"; "lng_profile_share_contact" = "Contact delen";
"lng_profile_invite_to_group" = "Groepslid maken"; "lng_profile_invite_to_group" = "Groepslid maken";
@ -367,6 +386,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_profile_files_header" = "Bestandsoverzicht"; "lng_profile_files_header" = "Bestandsoverzicht";
"lng_profile_audios" = "{count:_not_used_|# spraakbericht|# spraakberichten} »"; "lng_profile_audios" = "{count:_not_used_|# spraakbericht|# spraakberichten} »";
"lng_profile_audios_header" = "Overzicht van spraakberichten"; "lng_profile_audios_header" = "Overzicht van spraakberichten";
"lng_profile_audio_files_header" = "Afspeellijst";
"lng_profile_show_all_types" = "Alles weergeven"; "lng_profile_show_all_types" = "Alles weergeven";
"lng_profile_copy_phone" = "Telefoonnummer kopiëren"; "lng_profile_copy_phone" = "Telefoonnummer kopiëren";
@ -377,13 +397,16 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_create_group_title" = "Nieuwe groep"; "lng_create_group_title" = "Nieuwe groep";
"lng_failed_add_participant" = "Gebruiker toevoegen mislukt. Probeer het later nog eens."; "lng_failed_add_participant" = "Gebruiker toevoegen mislukt. Probeer het later nog eens.";
"lng_failed_add_not_mutual" = "Sorry, als een persoon verlaat, \nKan alleen een wederzijds\ncontact ze weer toevoegen\n(opgeslagen telefoonnummers).";
"lng_sure_delete_contact" = "{contact} echt verwijderen uit contacten?"; "lng_sure_delete_contact" = "{contact} echt verwijderen uit contacten?";
"lng_sure_delete_history" = "Geschiedenis met {contact} echt wissen? \n\nDeze actie kan niet ongedaan worden gemaakt."; "lng_sure_delete_history" = "Geschiedenis met {contact} echt wissen? \n\nDeze actie kan niet ongedaan worden gemaakt.";
"lng_sure_delete_group_history" = "Echt de geschiedenis van «{group}» wissen?\n\nHerstellen is niet mogelijk. ";
"lng_sure_delete_and_exit" = "Wil je de groep «{group}» verlaten en de geschiedenis wissen?\n\nDeze actie kan niet ongedaan worden gemaakt."; "lng_sure_delete_and_exit" = "Wil je de groep «{group}» verlaten en de geschiedenis wissen?\n\nDeze actie kan niet ongedaan worden gemaakt.";
"lng_message_empty" = "(leeg)"; "lng_message_empty" = "Leeg bericht";
"lng_media_unsupported" = "Niet-ondersteunde media";
"lng_action_add_user" = "{from} heeft {user} toegevoegd"; "lng_action_add_user" = "{from} heeft {user} toegevoegd";
"lng_action_kick_user" = "{from} heeft {user} verwijderd"; "lng_action_kick_user" = "{from} heeft {user} verwijderd";
@ -463,6 +486,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_message_with_from" = "[c]{from}:[/c] {message}";
"lng_from_you" = "Jij"; "lng_from_you" = "Jij";
"lng_bot_description" = "Wat kan deze bot? "; "lng_bot_description" = "Wat kan deze bot? ";
"lng_unblock_button" = "Deblokkeer";
"lng_bot_start" = "Begin"; "lng_bot_start" = "Begin";
"lng_bot_choose_group" = "Groep kiezen"; "lng_bot_choose_group" = "Groep kiezen";
@ -475,6 +499,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_user_typing" = "{user} is aan het typen"; "lng_user_typing" = "{user} is aan het typen";
"lng_users_typing" = "{user} en {second_user} zijn aan het typen"; "lng_users_typing" = "{user} en {second_user} zijn aan het typen";
"lng_many_typing" = "{count:_not_used_|# is|# zijn} aan het typen"; "lng_many_typing" = "{count:_not_used_|# is|# zijn} aan het typen";
"lng_send_action_record_video" = "video opnemen";
"lng_user_action_record_video" = "{user} neemt video op";
"lng_send_action_upload_video" = "video versturen";
"lng_user_action_upload_video" = "{user} verstuurt video";
"lng_send_action_record_audio" = "geluid opnemen";
"lng_user_action_record_audio" = "{user} neemt geluid op";
"lng_send_action_upload_audio" = "geluid versturen";
"lng_user_action_upload_audio" = "{user} verstuurt geluid";
"lng_send_action_upload_photo" = "foto versturen";
"lng_user_action_upload_photo" = "{user} verstuurt een foto";
"lng_send_action_upload_file" = "bestand versturen";
"lng_user_action_upload_file" = "{user} verstuurt een bestand";
"lng_send_action_geo_location" = "locatie kiezen";
"lng_user_action_geo_location" = "{user} kiest een locatie";
"lng_send_action_choose_contact" = "contact kiezen";
"lng_user_action_choose_contact" = "{user} kiest een contact";
"lng_unread_bar" = "{count:_not_used_|# ongelezen bericht|# ongelezen berichten}"; "lng_unread_bar" = "{count:_not_used_|# ongelezen bericht|# ongelezen berichten}";
"lng_maps_point" = "Locatie"; "lng_maps_point" = "Locatie";
@ -508,6 +548,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_context_open_audio" = "Geluidsbestand openen"; "lng_context_open_audio" = "Geluidsbestand openen";
"lng_context_save_audio" = "Geluidsbestand opslaan als"; "lng_context_save_audio" = "Geluidsbestand opslaan als";
"lng_context_pack_info" = "Bundelinformatie"; "lng_context_pack_info" = "Bundelinformatie";
"lng_context_pack_add" = "Stickers toevoegen";
"lng_context_open_file" = "Bestand openen"; "lng_context_open_file" = "Bestand openen";
"lng_context_save_file" = "Bestand opslaan als"; "lng_context_save_file" = "Bestand opslaan als";
"lng_context_forward_file" = "Bestand doorsturen"; "lng_context_forward_file" = "Bestand doorsturen";
@ -600,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_new_version_wrap" = "Telegram is bijgewerkt naar versie {version}\n\n{changes} \n\nVolledige versiegeschiedenis is hier te vinden:\n{link}"; "lng_new_version_wrap" = "Telegram is bijgewerkt naar versie {version}\n\n{changes} \n\nVolledige versiegeschiedenis is hier te vinden:\n{link}";
"lng_new_version_minor" = "— Probleemoplossing en andere kleine verbeteringen"; "lng_new_version_minor" = "— Probleemoplossing en andere kleine verbeteringen";
"lng_new_version_text" = "Deze versie heeft ondersteuning voor de nieuwe bot-API, gratis voor iedereen. Handig met programmeren? Maak dan je eigen bots voor spelletjes, diensten en integraties. \n\nMeer weten? kijk op: {blog_link}"; "lng_new_version_text" = "— Blokkeer gebruikers vanaf de profielpagina\n— Ondersteuning voor Windows toast-meldingen\n— Problemen met invoermethodes onder Linux (Fcitx and IBus) opgelost";
"lng_menu_insert_unicode" = "Unicode-besturingsteken invoegen"; "lng_menu_insert_unicode" = "Unicode-besturingsteken invoegen";

View file

@ -28,7 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_open_from_tray" = "Abrir Telegram"; "lng_open_from_tray" = "Abrir Telegram";
"lng_minimize_to_tray" = "Minimizar"; "lng_minimize_to_tray" = "Minimizar";
"lng_quit_from_tray" = "Sair do Telegram"; "lng_quit_from_tray" = "Sair do Telegram";
"lng_tray_icon_text" = "Telegram ainda está sendo executado,\nvocê pode mudar isso nas configurações.\n\nSe este ícone desaparecer de sua bandeja,\nvocê pode arrastar de volta dos ícones ocultos."; "lng_tray_icon_text" = "Telegram ainda está sendo executado,\nvocê pode mudar isso nas configurações.\nSe este ícone desaparecer de sua bandeja,\nvocê pode arrastar de volta dos ícones ";
"lng_month1" = "Janeiro"; "lng_month1" = "Janeiro";
"lng_month2" = "Fevereiro"; "lng_month2" = "Fevereiro";
@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_reconnecting_try_now" = "Tentar agora"; "lng_reconnecting_try_now" = "Tentar agora";
"lng_status_service_notifications" = "notificações de serviço"; "lng_status_service_notifications" = "notificações de serviço";
"lng_status_support" = "suporte";
"lng_status_bot" = "bot"; "lng_status_bot" = "bot";
"lng_status_bot_reads_all" = "tem acesso as mensagens"; "lng_status_bot_reads_all" = "tem acesso as mensagens";
"lng_status_bot_not_reads_all" = "não tem acesso as mensagens"; "lng_status_bot_not_reads_all" = "não tem acesso as mensagens";
@ -156,8 +157,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_dlg_new_group_name" = "Nome do grupo"; "lng_dlg_new_group_name" = "Nome do grupo";
"lng_dlg_create_group" = "Criar"; "lng_dlg_create_group" = "Criar";
"lng_no_contacts" = "Você não possui contatos"; "lng_no_contacts" = "Você não possui contatos";
"lng_no_chats" = "Seus chats estarão aqui";
"lng_contacts_loading" = "Carregando.."; "lng_contacts_loading" = "Carregando..";
"lng_contacts_not_found" = "Nenhum contato encontrado"; "lng_contacts_not_found" = "Nenhum contato encontrado";
"lng_dlg_search_chat" = "Buscar nesse chat";
"lng_dlg_search_for_messages" = "Buscar por mensagens";
"lng_settings_save" = "Salvar"; "lng_settings_save" = "Salvar";
"lng_settings_upload" = "Definir Foto de Perfil"; "lng_settings_upload" = "Definir Foto de Perfil";
@ -166,11 +170,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_username_title" = "Alterar nome de usuário"; "lng_username_title" = "Alterar nome de usuário";
"lng_username_about" = "Você pode escolher um nome de usuário no Telegram.\nAssim, outras pessoas poderão te encontrar\npelo nome de usuário e entrar em contato\nsem precisar saber seu telefone.\n\nVocê pode usar a-z, 0-9 e underline.\nO tamanho mínimo é 5 caracteres."; "lng_username_about" = "Você pode escolher um nome de usuário no Telegram.\nAssim, outras pessoas poderão te encontrar\npelo nome de usuário e entrar em contato\nsem precisar saber seu telefone.\n\nVocê pode usar a-z, 0-9 e underline.\nO tamanho mínimo é 5 caracteres.";
"lng_username_invalid" = "Esse nome é inválido."; "lng_username_invalid" = "Nome de usuário inválido.";
"lng_username_occupied" = "Esse nome já está ocupado."; "lng_username_occupied" = "Nome de usuário ocupado.";
"lng_username_too_short" = "Esse nome é muito curto."; "lng_username_too_short" = "Nome de usuário muito curto.";
"lng_username_bad_symbols" = "Esse nome contém símbolos incompatíveis."; "lng_username_bad_symbols" = "Nome de usuário com símbolos incompatíveis.";
"lng_username_available" = "Esse nome está disponível."; "lng_username_available" = "Nome de usuário disponível.";
"lng_username_not_found" = "Usuário @{user} não encontrado."; "lng_username_not_found" = "Usuário @{user} não encontrado.";
"lng_settings_section_contact_info" = "Informação de contato"; "lng_settings_section_contact_info" = "Informação de contato";
@ -182,6 +186,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_settings_desktop_notify" = "Notificações na área de trabalho"; "lng_settings_desktop_notify" = "Notificações na área de trabalho";
"lng_settings_show_name" = "Mostrar nome de quem enviou"; "lng_settings_show_name" = "Mostrar nome de quem enviou";
"lng_settings_show_preview" = "Mostrar pré-visualização da mensagem"; "lng_settings_show_preview" = "Mostrar pré-visualização da mensagem";
"lng_settings_use_windows" = "Usar notificações do Windows";
"lng_settings_sound_notify" = "Tocar som"; "lng_settings_sound_notify" = "Tocar som";
"lng_notification_preview" = "Você tem uma nova mensagem"; "lng_notification_preview" = "Você tem uma nova mensagem";
@ -301,13 +306,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_connection_type" = "Tipo de conexão:"; "lng_connection_type" = "Tipo de conexão:";
"lng_connection_auto_connecting" = "Padrão (conectando..)"; "lng_connection_auto_connecting" = "Padrão (conectando..)";
"lng_connection_auto" = "Padrão ({type} usado)"; "lng_connection_auto" = "Padrão ({transport} usado)";
"lng_connection_http_proxy" = "HTTP com proxy"; "lng_connection_proxy_connecting" = "Conectando via proxy...";
"lng_connection_tcp_proxy" = "TCP com proxy"; "lng_connection_proxy" = "{transport} com proxy";
"lng_connection_header" = "Tipo de conexão"; "lng_connection_header" = "Tipo de conexão";
"lng_connection_auto_rb" = "Auto (TCP se disponível ou HTTP)"; "lng_connection_auto_rb" = "Auto (TCP se disponível ou HTTP)";
"lng_connection_http_proxy_rb" = "HTTP com http-proxy customizado"; "lng_connection_http_proxy_rb" = "HTTP com http-proxy customizado";
"lng_connection_tcp_proxy_rb" = "TCP com socks5-proxy customizado"; "lng_connection_tcp_proxy_rb" = "TCP com socks5-proxy customizado";
"lng_connection_try_ipv6" = "Tentando conexão via IPv6";
"lng_connection_host_ph" = "Nome do host"; "lng_connection_host_ph" = "Nome do host";
"lng_connection_port_ph" = "Porta"; "lng_connection_port_ph" = "Porta";
"lng_connection_user_ph" = "Nome de usuário"; "lng_connection_user_ph" = "Nome de usuário";
@ -319,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_settings_reset_one_sure" = "Você deseja terminar essa sessão?"; "lng_settings_reset_one_sure" = "Você deseja terminar essa sessão?";
"lng_settings_reset_button" = "Encerrar"; "lng_settings_reset_button" = "Encerrar";
"lng_settings_reset_done" = "Outras sessões encerradas"; "lng_settings_reset_done" = "Outras sessões encerradas";
"lng_settings_ask_question" = "Fazer uma Pergunta";
"lng_settings_ask_sure" = "Entenda que o suporte do Telegram é feito por voluntários. Tentaremos responder o mais rápido possível, mas poderemos demorar um pouco.\n\nPor favor verifique a página de Perguntas Frequentes do Telegram: há dicas e respostas para a maioria das perguntas.";
"lng_settings_faq_button" = "Perguntas Frequentes";
"lng_settings_ask_ok" = "Perguntar";
"lng_settings_faq" = "Perguntas Frequentes";
"lng_settings_logout" = "Sair"; "lng_settings_logout" = "Sair";
"lng_sure_logout" = "Tem certeza que deseja sair?"; "lng_sure_logout" = "Tem certeza que deseja sair?";
@ -338,6 +349,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_topbar_info" = "Info"; "lng_topbar_info" = "Info";
"lng_profile_about_section" = "Sobre"; "lng_profile_about_section" = "Sobre";
"lng_profile_settings_section" = "Configurações"; "lng_profile_settings_section" = "Configurações";
"lng_profile_actions_section" = "Ações";
"lng_profile_bot_settings" = "Configurações"; "lng_profile_bot_settings" = "Configurações";
"lng_profile_bot_help" = "Ajuda"; "lng_profile_bot_help" = "Ajuda";
"lng_profile_participants_section" = "Membros"; "lng_profile_participants_section" = "Membros";
@ -347,6 +359,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_profile_edit_contact" = "Editar"; "lng_profile_edit_contact" = "Editar";
"lng_profile_enable_notifications" = "Notificações"; "lng_profile_enable_notifications" = "Notificações";
"lng_profile_clear_history" = "Limpar histórico"; "lng_profile_clear_history" = "Limpar histórico";
"lng_profile_delete_conversation" = "Apagar conversa";
"lng_profile_clear_and_exit" = "Apagar e sair";
"lng_profile_search_messages" = "Buscar mensagens";
"lng_profile_block_user" = "Bloquear usuário";
"lng_profile_unblock_user" = "Desbloquear usuário";
"lng_profile_block_bot" = "Parar e bloquear o bot";
"lng_profile_unblock_bot" = "Desbloquear bot";
"lng_profile_send_message" = "Enviar Mensagem"; "lng_profile_send_message" = "Enviar Mensagem";
"lng_profile_share_contact" = "Compartilhar"; "lng_profile_share_contact" = "Compartilhar";
"lng_profile_invite_to_group" = "Adicionar ao Grupo"; "lng_profile_invite_to_group" = "Adicionar ao Grupo";
@ -360,13 +379,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_profile_shared_media" = "Mídia compartilhada"; "lng_profile_shared_media" = "Mídia compartilhada";
"lng_profile_no_media" = "Nenhuma mídia nessa conversa."; "lng_profile_no_media" = "Nenhuma mídia nessa conversa.";
"lng_profile_photos" = "{count:_not_used_|# foto|# fotos} »"; "lng_profile_photos" = "{count:_not_used_|# foto|# fotos} »";
"lng_profile_photos_header" = "Visualização de fotos"; "lng_profile_photos_header" = "Fotos";
"lng_profile_videos" = "{count:_not_used_|# arquivo de vídeo|# arquivo de vídeos} »"; "lng_profile_videos" = "{count:_not_used_|# arquivo de vídeo|# arquivo de vídeos} »";
"lng_profile_videos_header" = "Visualização de vídeos"; "lng_profile_videos_header" = "Vídeos";
"lng_profile_files" = "{count:_not_used_|# arquivo|# arquivos} »"; "lng_profile_files" = "{count:_not_used_|# arquivo|# arquivos} »";
"lng_profile_files_header" = "Visualização de arquivos"; "lng_profile_files_header" = "Arquivos";
"lng_profile_audios" = "{count:_not_used_|# mensagem de voz|# mensagens de voz} »"; "lng_profile_audios" = "{count:_not_used_|# mensagem de voz|# mensagens de voz} »";
"lng_profile_audios_header" = "Visualização de mensagens de voz"; "lng_profile_audios_header" = "Mensagens de voz";
"lng_profile_audio_files_header" = "Reprodução";
"lng_profile_show_all_types" = "Mostrar todos os tipos"; "lng_profile_show_all_types" = "Mostrar todos os tipos";
"lng_profile_copy_phone" = "Copiar número de telefone"; "lng_profile_copy_phone" = "Copiar número de telefone";
@ -377,13 +397,16 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_create_group_title" = "Novo Grupo"; "lng_create_group_title" = "Novo Grupo";
"lng_failed_add_participant" = "Não foi possível adicionar o usuário. Tente novamente mais tarde."; "lng_failed_add_participant" = "Não foi possível adicionar o usuário. Tente novamente mais tarde.";
"lng_failed_add_not_mutual" = "Desculpe, se uma pessoa deixou o\ngrupo, apenas um contato mútuo pode\ncolocá-la de volta (eles precisam do seu \ncontato no telefone e você o deles)";
"lng_sure_delete_contact" = "Você tem certeza que deseja remover {contact} da sua lista de contatos?"; "lng_sure_delete_contact" = "Você tem certeza que deseja remover {contact} da sua lista de contatos?";
"lng_sure_delete_history" = "Você tem certeza que deseja apagar todo o seu histórico de mensagens com {contact}?\n\nEssa ação não pode ser desfeita."; "lng_sure_delete_history" = "Você tem certeza que deseja apagar todo o seu histórico de mensagens com {contact}?\n\nEssa ação não pode ser desfeita.";
"lng_sure_delete_group_history" = "Você tem certeza que deseja apagar todo o histórico de «{group}»?\n\nEssa ação não pode ser desfeita.";
"lng_sure_delete_and_exit" = "Você tem certeza que deseja apagar todo o seu histórico de mensagens e deixar «{group}»?\n\nEssa ação não pode ser desfeita."; "lng_sure_delete_and_exit" = "Você tem certeza que deseja apagar todo o seu histórico de mensagens e deixar «{group}»?\n\nEssa ação não pode ser desfeita.";
"lng_message_empty" = "(vazio)"; "lng_message_empty" = "Mensagem Vazia";
"lng_media_unsupported" = "Mídia Não-Suportada";
"lng_action_add_user" = "{from} adicionou {user}"; "lng_action_add_user" = "{from} adicionou {user}";
"lng_action_kick_user" = "{from} removeu {user}"; "lng_action_kick_user" = "{from} removeu {user}";
@ -463,6 +486,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_message_with_from" = "[c]{from}:[/c] {message}";
"lng_from_you" = "Você"; "lng_from_you" = "Você";
"lng_bot_description" = "O que esse bot pode fazer?"; "lng_bot_description" = "O que esse bot pode fazer?";
"lng_unblock_button" = "Desbloquear";
"lng_bot_start" = "Iniciar"; "lng_bot_start" = "Iniciar";
"lng_bot_choose_group" = "Escolher Grupo"; "lng_bot_choose_group" = "Escolher Grupo";
@ -475,6 +499,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_user_typing" = "{user} está escrevendo"; "lng_user_typing" = "{user} está escrevendo";
"lng_users_typing" = "{user} e {second_user} estão escrevendo"; "lng_users_typing" = "{user} e {second_user} estão escrevendo";
"lng_many_typing" = "{count:_not_used_|# está|# estão} escrevendo"; "lng_many_typing" = "{count:_not_used_|# está|# estão} escrevendo";
"lng_send_action_record_video" = "gravando vídeo";
"lng_user_action_record_video" = "{user} está gravando vídeo";
"lng_send_action_upload_video" = "enviando vídeo";
"lng_user_action_upload_video" = "{user} está enviando vídeo";
"lng_send_action_record_audio" = "gravando áudio";
"lng_user_action_record_audio" = "{user} está gravando áudio";
"lng_send_action_upload_audio" = "enviando áudio";
"lng_user_action_upload_audio" = "{user} está gravando áudio";
"lng_send_action_upload_photo" = "enviando foto";
"lng_user_action_upload_photo" = "{user} está enviando foto";
"lng_send_action_upload_file" = "enviando arquivo";
"lng_user_action_upload_file" = "{user} está enviando arquivo";
"lng_send_action_geo_location" = "escolhendo local";
"lng_user_action_geo_location" = "{user} está escolhendo local";
"lng_send_action_choose_contact" = "escolhendo contato";
"lng_user_action_choose_contact" = "{user} está escolhendo contato";
"lng_unread_bar" = "{count:_not_used_|# mensagem não lida|# mensagens não lidas}"; "lng_unread_bar" = "{count:_not_used_|# mensagem não lida|# mensagens não lidas}";
"lng_maps_point" = "Localização"; "lng_maps_point" = "Localização";
@ -508,6 +548,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_context_open_audio" = "Abrir Áudio"; "lng_context_open_audio" = "Abrir Áudio";
"lng_context_save_audio" = "Salvar Áudio Como.."; "lng_context_save_audio" = "Salvar Áudio Como..";
"lng_context_pack_info" = "Informação do pacote"; "lng_context_pack_info" = "Informação do pacote";
"lng_context_pack_add" = "Adicionar aos Stickers";
"lng_context_open_file" = "Abrir Arquivo"; "lng_context_open_file" = "Abrir Arquivo";
"lng_context_save_file" = "Salvar Arquivo Como.."; "lng_context_save_file" = "Salvar Arquivo Como..";
"lng_context_forward_file" = "Encaminhar Arquivo"; "lng_context_forward_file" = "Encaminhar Arquivo";
@ -600,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
"lng_new_version_wrap" = "Telegram Desktop foi atualizado para a versão {version}\n\n{changes}\n\nHistórico completo de mudanças disponível aqui:\n{link}"; "lng_new_version_wrap" = "Telegram Desktop foi atualizado para a versão {version}\n\n{changes}\n\nHistórico completo de mudanças disponível aqui:\n{link}";
"lng_new_version_minor" = "— Resolução de bugs e outras menores melhorias"; "lng_new_version_minor" = "— Resolução de bugs e outras menores melhorias";
"lng_new_version_text" = "Essa nova versão inclui suporte para bots usando a nova API de bots. Se você for um engenheiro, crie seus próprios bots para jogos, serviços ou integrações.\n\nLeia mais em {blog_link}"; "lng_new_version_text" = "— Bloqueie usuários direto da página do perfil\n— Adicionado suporte às notificações de sistema do Windows\n— Consertado métodos de entrada no Linux (Fcitx e IBus)";
"lng_menu_insert_unicode" = "Inserir caractere de controle Unicode"; "lng_menu_insert_unicode" = "Inserir caractere de controle Unicode";

View file

@ -18,6 +18,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
#include "stdafx.h" #include "stdafx.h"
#include "localimageloader.h" #include "localimageloader.h"
#include "gui/filedialog.h" #include "gui/filedialog.h"
#include "audio.h"
#include <libexif/exif-data.h> #include <libexif/exif-data.h>
LocalImageLoaderPrivate::LocalImageLoaderPrivate(int32 currentUser, LocalImageLoader *loader, QThread *thread) : QObject(0) LocalImageLoaderPrivate::LocalImageLoaderPrivate(int32 currentUser, LocalImageLoader *loader, QThread *thread) : QObject(0)
@ -77,12 +78,15 @@ void LocalImageLoaderPrivate::prepareImages() {
type = ToPrepareDocument; type = ToPrepareDocument;
} }
} }
if (type == ToPrepareDocument) {
mime = mimeTypeForFile(info).name();
}
if (type != ToPrepareAuto && info.size() < MaxUploadPhotoSize) { if (type != ToPrepareAuto && info.size() < MaxUploadPhotoSize) {
bool opaque = (mime != stickerMime); bool opaque = (mime != stickerMime);
img = App::readImage(file, 0, opaque, &animated); img = App::readImage(file, 0, opaque, &animated);
if (animated) {
type = ToPrepareDocument;
}
}
if (type == ToPrepareDocument) {
mime = mimeTypeForFile(info).name();
} }
filename = info.fileName(); filename = info.fileName();
filesize = info.size(); filesize = info.size();
@ -164,7 +168,41 @@ void LocalImageLoaderPrivate::prepareImages() {
MTPDocument document(MTP_documentEmpty(MTP_long(0))); MTPDocument document(MTP_documentEmpty(MTP_long(0)));
MTPAudio audio(MTP_audioEmpty(MTP_long(0))); MTPAudio audio(MTP_audioEmpty(MTP_long(0)));
bool isSong = false;
QByteArray jpeg; QByteArray jpeg;
if (type == ToPrepareDocument) {
if (mime == qstr("audio/mp3") || mime == qstr("audio/m4a") || mime == qstr("audio/aac") || mime == qstr("audio/ogg") || mime == qstr("audio/flac") ||
filename.endsWith(qstr(".mp3"), Qt::CaseInsensitive) || filename.endsWith(qstr(".m4a"), Qt::CaseInsensitive) ||
filename.endsWith(qstr(".aac"), Qt::CaseInsensitive) || filename.endsWith(qstr(".ogg"), Qt::CaseInsensitive) ||
filename.endsWith(qstr(".flac"), Qt::CaseInsensitive)) {
QImage cover;
QByteArray coverBytes, coverFormat;
MTPDocumentAttribute audioAttribute = audioReadSongAttributes(file, data, cover, coverBytes, coverFormat);
if (audioAttribute.type() == mtpc_documentAttributeAudio) {
attributes.push_back(audioAttribute);
isSong = true;
if (!cover.isNull()) { // cover to thumb
int32 cw = cover.width(), ch = cover.height();
if (cw < 20 * ch && ch < 20 * cw) {
QPixmap full = (cw > 90 || ch > 90) ? QPixmap::fromImage(cover.scaled(90, 90, Qt::KeepAspectRatio, Qt::SmoothTransformation), Qt::ColorOnly) : QPixmap::fromImage(cover, Qt::ColorOnly);
{
QByteArray thumbFormat = "JPG";
int32 thumbQuality = 87;
QBuffer jpegBuffer(&jpeg);
full.save(&jpegBuffer, thumbFormat, thumbQuality);
}
photoThumbs.insert('0', full);
thumb = MTP_photoSize(MTP_string(""), MTP_fileLocationUnavailable(MTP_long(0), MTP_int(0), MTP_long(0)), MTP_int(full.width()), MTP_int(full.height()), MTP_int(0));
thumbId = MTP::nonce<uint64>();
}
}
}
}
}
if (type == ToPreparePhoto) { if (type == ToPreparePhoto) {
int32 w = img.width(), h = img.height(); int32 w = img.width(), h = img.height();
@ -186,10 +224,10 @@ void LocalImageLoaderPrivate::prepareImages() {
} }
if (!filesize) filesize = jpeg.size(); if (!filesize) filesize = jpeg.size();
photo = MTP_photo(MTP_long(id), MTP_long(0), MTP_int(user), MTP_int(unixtime()), MTP_geoPointEmpty(), MTP_vector<MTPPhotoSize>(photoSizes)); photo = MTP_photo(MTP_long(id), MTP_long(0), MTP_int(unixtime()), MTP_vector<MTPPhotoSize>(photoSizes));
thumbId = id; thumbId = id;
} else if ((type == ToPrepareVideo || type == ToPrepareDocument) && !img.isNull()) { } else if ((type == ToPrepareVideo || type == ToPrepareDocument) && !img.isNull() && !isSong) {
int32 w = img.width(), h = img.height(); int32 w = img.width(), h = img.height();
QByteArray thumbFormat = "JPG"; QByteArray thumbFormat = "JPG";
int32 thumbQuality = 87; int32 thumbQuality = 87;
@ -219,7 +257,7 @@ void LocalImageLoaderPrivate::prepareImages() {
if (type == ToPrepareDocument) { if (type == ToPrepareDocument) {
document = MTP_document(MTP_long(id), MTP_long(0), MTP_int(unixtime()), MTP_string(mime), MTP_int(filesize), thumb, MTP_int(MTP::maindc()), MTP_vector<MTPDocumentAttribute>(attributes)); document = MTP_document(MTP_long(id), MTP_long(0), MTP_int(unixtime()), MTP_string(mime), MTP_int(filesize), thumb, MTP_int(MTP::maindc()), MTP_vector<MTPDocumentAttribute>(attributes));
} else if (type == ToPrepareAudio) { } else if (type == ToPrepareAudio) {
audio = MTP_audio(MTP_long(id), MTP_long(0), MTP_int(user), MTP_int(unixtime()), MTP_int(duration), MTP_string(mime), MTP_int(filesize), MTP_int(MTP::maindc())); audio = MTP_audio(MTP_long(id), MTP_long(0), MTP_int(unixtime()), MTP_int(duration), MTP_string(mime), MTP_int(filesize), MTP_int(MTP::maindc()));
} }
{ {

View file

@ -18,6 +18,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
#include "stdafx.h" #include "stdafx.h"
#include "localstorage.h" #include "localstorage.h"
#include "mainwidget.h"
#include "window.h"
#include "lang.h" #include "lang.h"
namespace { namespace {
@ -505,6 +507,7 @@ namespace {
lskUserSettings = 0x09, // no data lskUserSettings = 0x09, // no data
lskRecentHashtags = 0x0a, // no data lskRecentHashtags = 0x0a, // no data
lskStickers = 0x0b, // no data lskStickers = 0x0b, // no data
lskSavedPeers = 0x0c, // no data
}; };
typedef QMap<PeerId, FileKey> DraftsMap; typedef QMap<PeerId, FileKey> DraftsMap;
@ -517,6 +520,8 @@ namespace {
typedef QPair<MediaKey, FileLocation> FileLocationPair; typedef QPair<MediaKey, FileLocation> FileLocationPair;
typedef QMap<QString, FileLocationPair> FileLocationPairs; typedef QMap<QString, FileLocationPair> FileLocationPairs;
FileLocationPairs _fileLocationPairs; FileLocationPairs _fileLocationPairs;
typedef QMap<MediaKey, MediaKey> FileLocationAliases;
FileLocationAliases _fileLocationAliases;
FileKey _locationsKey = 0; FileKey _locationsKey = 0;
FileKey _recentStickersKeyOld = 0, _stickersKey = 0; FileKey _recentStickersKeyOld = 0, _stickersKey = 0;
@ -528,13 +533,15 @@ namespace {
FileKey _recentHashtagsKey = 0; FileKey _recentHashtagsKey = 0;
bool _recentHashtagsWereRead = false; bool _recentHashtagsWereRead = false;
FileKey _savedPeersKey = 0;
typedef QPair<FileKey, qint32> FileDesc; // file, size typedef QPair<FileKey, qint32> FileDesc; // file, size
typedef QMap<StorageKey, FileDesc> StorageMap; typedef QMap<StorageKey, FileDesc> StorageMap;
StorageMap _imagesMap, _stickerImagesMap, _audiosMap; StorageMap _imagesMap, _stickerImagesMap, _audiosMap;
int32 _storageImagesSize = 0, _storageStickersSize = 0, _storageAudiosSize = 0; int32 _storageImagesSize = 0, _storageStickersSize = 0, _storageAudiosSize = 0;
bool _mapChanged = false; bool _mapChanged = false;
int32 _oldMapVersion = 0; int32 _oldMapVersion = 0, _oldSettingsVersion = 0;
enum WriteMapWhen { enum WriteMapWhen {
WriteMapNow, WriteMapNow,
@ -566,14 +573,28 @@ namespace {
_writeMap(WriteMapFast); _writeMap(WriteMapFast);
} }
quint32 size = 0; quint32 size = 0;
for (FileLocations::const_iterator i = _fileLocations.cbegin(); i != _fileLocations.cend(); ++i) { for (FileLocations::const_iterator i = _fileLocations.cbegin(), e = _fileLocations.cend(); i != e; ++i) {
// location + type + namelen + name + date + size // location + type + namelen + name + date + size
size += sizeof(quint64) * 2 + sizeof(quint32) + _stringSize(i.value().name) + _dateTimeSize() + sizeof(quint32); size += sizeof(quint64) * 2 + sizeof(quint32) + _stringSize(i.value().name) + _dateTimeSize() + sizeof(quint32);
} }
//end mark
size += sizeof(quint64) * 2 + sizeof(quint32) + _stringSize(QString()) + _dateTimeSize() + sizeof(quint32);
size += sizeof(quint32); // aliases count
for (FileLocationAliases::const_iterator i = _fileLocationAliases.cbegin(), e = _fileLocationAliases.cend(); i != e; ++i) {
// alias + location
size += sizeof(quint64) * 2 + sizeof(quint64) * 2;
}
EncryptedDescriptor data(size); EncryptedDescriptor data(size);
for (FileLocations::const_iterator i = _fileLocations.cbegin(); i != _fileLocations.cend(); ++i) { for (FileLocations::const_iterator i = _fileLocations.cbegin(); i != _fileLocations.cend(); ++i) {
data.stream << quint64(i.key().first) << quint64(i.key().second) << quint32(i.value().type) << i.value().name << i.value().modified << quint32(i.value().size); data.stream << quint64(i.key().first) << quint64(i.key().second) << quint32(i.value().type) << i.value().name << i.value().modified << quint32(i.value().size);
} }
data.stream << quint64(0) << quint64(0) << quint32(0) << QString() << QDateTime::currentDateTime() << quint32(0);
data.stream << quint32(_fileLocationAliases.size());
for (FileLocationAliases::const_iterator i = _fileLocationAliases.cbegin(), e = _fileLocationAliases.cend(); i != e; ++i) {
data.stream << quint64(i.key().first) << quint64(i.key().second) << quint64(i.value().first) << quint64(i.value().second);
}
FileWriteDescriptor file(_locationsKey); FileWriteDescriptor file(_locationsKey);
file.writeEncrypted(data); file.writeEncrypted(data);
} }
@ -588,12 +609,18 @@ namespace {
return; return;
} }
bool endMarkFound = false;
while (!locations.stream.atEnd()) { while (!locations.stream.atEnd()) {
quint64 first, second; quint64 first, second;
FileLocation loc; FileLocation loc;
quint32 type; quint32 type;
locations.stream >> first >> second >> type >> loc.name >> loc.modified >> loc.size; locations.stream >> first >> second >> type >> loc.name >> loc.modified >> loc.size;
if (!first && !second && !type && loc.name.isEmpty() && !loc.size) { // end mark
endMarkFound = true;
break;
}
MediaKey key(first, second); MediaKey key(first, second);
loc.type = StorageFileType(type); loc.type = StorageFileType(type);
@ -604,6 +631,16 @@ namespace {
_writeLocations(); _writeLocations();
} }
} }
if (endMarkFound) {
quint32 cnt;
locations.stream >> cnt;
for (quint32 i = 0; i < cnt; ++i) {
quint64 kfirst, ksecond, vfirst, vsecond;
locations.stream >> kfirst >> ksecond >> vfirst >> vsecond;
_fileLocationAliases.insert(MediaKey(kfirst, ksecond), MediaKey(vfirst, vsecond));
}
}
} }
mtpDcOptions *_dcOpts = 0; mtpDcOptions *_dcOpts = 0;
@ -701,6 +738,15 @@ namespace {
cSetDesktopNotify(v == 1); cSetDesktopNotify(v == 1);
} break; } break;
case dbiWindowsNotifications: {
qint32 v;
stream >> v;
if (!_checkStreamStatus(stream)) return false;
cSetWindowsNotifications(v == 1);
cSetCustomNotifies((App::wnd() ? App::wnd()->psHasNativeNotifications() : true) && !cWindowsNotifications());
} break;
case dbiWorkMode: { case dbiWorkMode: {
qint32 v; qint32 v;
stream >> v; stream >> v;
@ -736,6 +782,14 @@ namespace {
}; };
} break; } break;
case dbiTryIPv6: {
qint32 v;
stream >> v;
if (!_checkStreamStatus(stream)) return false;
cSetTryIPv6(v == 1);
} break;
case dbiSeenTrayTooltip: { case dbiSeenTrayTooltip: {
qint32 v; qint32 v;
stream >> v; stream >> v;
@ -996,6 +1050,14 @@ namespace {
cSetDialogLastPath(path); cSetDialogLastPath(path);
} break; } break;
case dbiSongVolume: {
qint32 v;
stream >> v;
if (!_checkStreamStatus(stream)) return false;
cSetSongVolume(snap(v / 1e6, 0., 1.));
} break;
default: default:
LOG(("App Error: unknown blockId in _readSetting: %1").arg(blockId)); LOG(("App Error: unknown blockId in _readSetting: %1").arg(blockId));
return false; return false;
@ -1217,7 +1279,7 @@ namespace {
_writeMap(WriteMapFast); _writeMap(WriteMapFast);
} }
uint32 size = 11 * (sizeof(quint32) + sizeof(qint32)); uint32 size = 13 * (sizeof(quint32) + sizeof(qint32));
size += sizeof(quint32) + _stringSize(cAskDownloadPath() ? QString() : cDownloadPath()); size += sizeof(quint32) + _stringSize(cAskDownloadPath() ? QString() : cDownloadPath());
size += sizeof(quint32) + sizeof(qint32) + (cRecentEmojisPreload().isEmpty() ? cGetRecentEmojis().size() : cRecentEmojisPreload().size()) * (sizeof(uint64) + sizeof(ushort)); size += sizeof(quint32) + sizeof(qint32) + (cRecentEmojisPreload().isEmpty() ? cGetRecentEmojis().size() : cRecentEmojisPreload().size()) * (sizeof(uint64) + sizeof(ushort));
size += sizeof(quint32) + sizeof(qint32) + cEmojiVariants().size() * (sizeof(uint32) + sizeof(uint64)); size += sizeof(quint32) + sizeof(qint32) + cEmojiVariants().size() * (sizeof(uint32) + sizeof(uint64));
@ -1233,11 +1295,13 @@ namespace {
data.stream << quint32(dbiSoundNotify) << qint32(cSoundNotify()); data.stream << quint32(dbiSoundNotify) << qint32(cSoundNotify());
data.stream << quint32(dbiDesktopNotify) << qint32(cDesktopNotify()); data.stream << quint32(dbiDesktopNotify) << qint32(cDesktopNotify());
data.stream << quint32(dbiNotifyView) << qint32(cNotifyView()); data.stream << quint32(dbiNotifyView) << qint32(cNotifyView());
data.stream << quint32(dbiWindowsNotifications) << qint32(cWindowsNotifications());
data.stream << quint32(dbiAskDownloadPath) << qint32(cAskDownloadPath()); data.stream << quint32(dbiAskDownloadPath) << qint32(cAskDownloadPath());
data.stream << quint32(dbiDownloadPath) << (cAskDownloadPath() ? QString() : cDownloadPath()); data.stream << quint32(dbiDownloadPath) << (cAskDownloadPath() ? QString() : cDownloadPath());
data.stream << quint32(dbiCompressPastedImage) << qint32(cCompressPastedImage()); data.stream << quint32(dbiCompressPastedImage) << qint32(cCompressPastedImage());
data.stream << quint32(dbiEmojiTab) << qint32(cEmojiTab()); data.stream << quint32(dbiEmojiTab) << qint32(cEmojiTab());
data.stream << quint32(dbiDialogLastPath) << cDialogLastPath(); data.stream << quint32(dbiDialogLastPath) << cDialogLastPath();
data.stream << quint32(dbiSongVolume) << qint32(qRound(cSongVolume() * 1e6));
{ {
RecentEmojisPreload v(cRecentEmojisPreload()); RecentEmojisPreload v(cRecentEmojisPreload());
@ -1383,7 +1447,7 @@ namespace {
DraftsNotReadMap draftsNotReadMap; DraftsNotReadMap draftsNotReadMap;
StorageMap imagesMap, stickerImagesMap, audiosMap; StorageMap imagesMap, stickerImagesMap, audiosMap;
qint64 storageImagesSize = 0, storageStickersSize = 0, storageAudiosSize = 0; qint64 storageImagesSize = 0, storageStickersSize = 0, storageAudiosSize = 0;
quint64 locationsKey = 0, recentStickersKeyOld = 0, stickersKey = 0, backgroundKey = 0, userSettingsKey = 0, recentHashtagsKey = 0; quint64 locationsKey = 0, recentStickersKeyOld = 0, stickersKey = 0, backgroundKey = 0, userSettingsKey = 0, recentHashtagsKey = 0, savedPeersKey = 0;
while (!map.stream.atEnd()) { while (!map.stream.atEnd()) {
quint32 keyType; quint32 keyType;
map.stream >> keyType; map.stream >> keyType;
@ -1463,6 +1527,9 @@ namespace {
case lskStickers: { case lskStickers: {
map.stream >> stickersKey; map.stream >> stickersKey;
} break; } break;
case lskSavedPeers: {
map.stream >> savedPeersKey;
} break;
default: default:
LOG(("App Error: unknown key type in encrypted map: %1").arg(keyType)); LOG(("App Error: unknown key type in encrypted map: %1").arg(keyType));
return Local::ReadMapFailed; return Local::ReadMapFailed;
@ -1486,6 +1553,7 @@ namespace {
_locationsKey = locationsKey; _locationsKey = locationsKey;
_recentStickersKeyOld = recentStickersKeyOld; _recentStickersKeyOld = recentStickersKeyOld;
_stickersKey = stickersKey; _stickersKey = stickersKey;
_savedPeersKey = savedPeersKey;
_backgroundKey = backgroundKey; _backgroundKey = backgroundKey;
_userSettingsKey = userSettingsKey; _userSettingsKey = userSettingsKey;
_recentHashtagsKey = recentHashtagsKey; _recentHashtagsKey = recentHashtagsKey;
@ -1505,6 +1573,9 @@ namespace {
_readMtpData(); _readMtpData();
LOG(("Map read time: %1").arg(getms() - ms)); LOG(("Map read time: %1").arg(getms() - ms));
if (_oldSettingsVersion < AppVersion) {
Local::writeSettings();
}
return Local::ReadMapDone; return Local::ReadMapDone;
} }
@ -1550,6 +1621,7 @@ namespace {
if (_locationsKey) mapSize += sizeof(quint32) + sizeof(quint64); if (_locationsKey) mapSize += sizeof(quint32) + sizeof(quint64);
if (_recentStickersKeyOld) mapSize += sizeof(quint32) + sizeof(quint64); if (_recentStickersKeyOld) mapSize += sizeof(quint32) + sizeof(quint64);
if (_stickersKey) mapSize += sizeof(quint32) + sizeof(quint64); if (_stickersKey) mapSize += sizeof(quint32) + sizeof(quint64);
if (_savedPeersKey) mapSize += sizeof(quint32) + sizeof(quint64);
if (_backgroundKey) mapSize += sizeof(quint32) + sizeof(quint64); if (_backgroundKey) mapSize += sizeof(quint32) + sizeof(quint64);
if (_userSettingsKey) mapSize += sizeof(quint32) + sizeof(quint64); if (_userSettingsKey) mapSize += sizeof(quint32) + sizeof(quint64);
if (_recentHashtagsKey) mapSize += sizeof(quint32) + sizeof(quint64); if (_recentHashtagsKey) mapSize += sizeof(quint32) + sizeof(quint64);
@ -1593,6 +1665,9 @@ namespace {
if (_stickersKey) { if (_stickersKey) {
mapData.stream << quint32(lskStickers) << quint64(_stickersKey); mapData.stream << quint32(lskStickers) << quint64(_stickersKey);
} }
if (_savedPeersKey) {
mapData.stream << quint32(lskSavedPeers) << quint64(_savedPeersKey);
}
if (_backgroundKey) { if (_backgroundKey) {
mapData.stream << quint32(lskBackground) << quint64(_backgroundKey); mapData.stream << quint32(lskBackground) << quint64(_backgroundKey);
} }
@ -1748,6 +1823,7 @@ namespace Local {
cSetDcOptions(dcOpts); cSetDcOptions(dcOpts);
} }
_oldSettingsVersion = settingsData.version;
_settingsSalt = salt; _settingsSalt = salt;
} }
@ -1789,7 +1865,7 @@ namespace Local {
cSetDcOptions(dcOpts); cSetDcOptions(dcOpts);
} }
quint32 size = 10 * (sizeof(quint32) + sizeof(qint32)); quint32 size = 11 * (sizeof(quint32) + sizeof(qint32));
for (mtpDcOptions::const_iterator i = dcOpts.cbegin(), e = dcOpts.cend(); i != e; ++i) { for (mtpDcOptions::const_iterator i = dcOpts.cbegin(), e = dcOpts.cend(); i != e; ++i) {
size += sizeof(quint32) + sizeof(quint32) + sizeof(quint32); size += sizeof(quint32) + sizeof(quint32) + sizeof(quint32);
size += sizeof(quint32) + _stringSize(QString::fromUtf8(i->ip.data(), i->ip.size())); size += sizeof(quint32) + _stringSize(QString::fromUtf8(i->ip.data(), i->ip.size()));
@ -1827,6 +1903,7 @@ namespace Local {
const ConnectionProxy &proxy(cConnectionProxy()); const ConnectionProxy &proxy(cConnectionProxy());
data.stream << proxy.host << qint32(proxy.port) << proxy.user << proxy.password; data.stream << proxy.host << qint32(proxy.port) << proxy.user << proxy.password;
} }
data.stream << quint32(dbiTryIPv6) << qint32(cTryIPv6());
TWindowPos pos(cWindowPos()); TWindowPos pos(cWindowPos());
data.stream << quint32(dbiWindowPosition) << qint32(pos.x) << qint32(pos.y) << qint32(pos.w) << qint32(pos.h) << qint32(pos.moncrc) << qint32(pos.maximized); data.stream << quint32(dbiWindowPosition) << qint32(pos.x) << qint32(pos.y) << qint32(pos.w) << qint32(pos.h) << qint32(pos.moncrc) << qint32(pos.maximized);
@ -1850,7 +1927,7 @@ namespace Local {
_draftsNotReadMap.clear(); _draftsNotReadMap.clear();
_stickerImagesMap.clear(); _stickerImagesMap.clear();
_audiosMap.clear(); _audiosMap.clear();
_locationsKey = _recentStickersKeyOld = _stickersKey = _backgroundKey = _userSettingsKey = _recentHashtagsKey = 0; _locationsKey = _recentStickersKeyOld = _stickersKey = _backgroundKey = _userSettingsKey = _recentHashtagsKey = _savedPeersKey = 0;
_mapChanged = true; _mapChanged = true;
_writeMap(WriteMapNow); _writeMap(WriteMapNow);
@ -1889,6 +1966,10 @@ namespace Local {
return _oldMapVersion; return _oldMapVersion;
} }
int32 oldSettingsVersion() {
return _oldSettingsVersion;
}
void writeDraft(const PeerId &peer, const MessageDraft &draft) { void writeDraft(const PeerId &peer, const MessageDraft &draft) {
if (!_working()) return; if (!_working()) return;
@ -1989,12 +2070,21 @@ namespace Local {
return (_draftsPositionsMap.constFind(peer) != _draftsPositionsMap.cend()); return (_draftsPositionsMap.constFind(peer) != _draftsPositionsMap.cend());
} }
void writeFileLocation(const MediaKey &location, const FileLocation &local) { void writeFileLocation(MediaKey location, const FileLocation &local) {
if (local.name.isEmpty()) return; if (local.name.isEmpty()) return;
FileLocationAliases::const_iterator aliasIt = _fileLocationAliases.constFind(location);
if (aliasIt != _fileLocationAliases.cend()) {
location = aliasIt.value();
}
FileLocationPairs::iterator i = _fileLocationPairs.find(local.name); FileLocationPairs::iterator i = _fileLocationPairs.find(local.name);
if (i != _fileLocationPairs.cend()) { if (i != _fileLocationPairs.cend()) {
if (i.value().second == local) { if (i.value().second == local) {
if (i.value().first != location) {
_fileLocationAliases.insert(location, i.value().first);
_writeLocations(WriteMapFast);
}
return; return;
} }
if (i.value().first != location) { if (i.value().first != location) {
@ -2012,7 +2102,12 @@ namespace Local {
_writeLocations(WriteMapFast); _writeLocations(WriteMapFast);
} }
FileLocation readFileLocation(const MediaKey &location, bool check) { FileLocation readFileLocation(MediaKey location, bool check) {
FileLocationAliases::const_iterator aliasIt = _fileLocationAliases.constFind(location);
if (aliasIt != _fileLocationAliases.cend()) {
location = aliasIt.value();
}
FileLocations::iterator i = _fileLocations.find(location); FileLocations::iterator i = _fileLocations.find(location);
for (FileLocations::iterator i = _fileLocations.find(location); (i != _fileLocations.end()) && (i.key() == location);) { for (FileLocations::iterator i = _fileLocations.find(location); (i != _fileLocations.end()) && (i.key() == location);) {
if (check) { if (check) {
@ -2229,15 +2324,40 @@ namespace Local {
return _storageAudiosSize; return _storageAudiosSize;
} }
void _writeStorageImageLocation(QDataStream &stream, const StorageImageLocation &loc) {
stream << qint32(loc.width) << qint32(loc.height);
stream << qint32(loc.dc) << quint64(loc.volume) << qint32(loc.local) << quint64(loc.secret);
}
uint32 _storageImageLocationSize() {
// width + height + dc + volume + local + secret
return sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(quint64) + sizeof(qint32) + sizeof(quint64);
}
StorageImageLocation _readStorageImageLocation(FileReadDescriptor &from) {
qint32 thumbWidth, thumbHeight, thumbDc, thumbLocal;
quint64 thumbVolume, thumbSecret;
from.stream >> thumbWidth >> thumbHeight >> thumbDc >> thumbVolume >> thumbLocal >> thumbSecret;
return StorageImageLocation(thumbWidth, thumbHeight, thumbDc, thumbVolume, thumbLocal, thumbSecret);
}
void _writeStickerSet(QDataStream &stream, uint64 setId) { void _writeStickerSet(QDataStream &stream, uint64 setId) {
StickerSets::const_iterator it = cStickerSets().constFind(setId); StickerSets::const_iterator it = cStickerSets().constFind(setId);
if (it == cStickerSets().cend() || it->stickers.isEmpty()) return; if (it == cStickerSets().cend()) return;
stream << quint64(it->id) << quint64(it->access) << it->title << it->shortName << quint32(it->stickers.size()); bool notLoaded = (it->flags & MTPDstickerSet_flag_NOT_LOADED);
if (notLoaded) {
stream << quint64(it->id) << quint64(it->access) << it->title << it->shortName << qint32(-it->count) << qint32(it->hash) << qint32(it->flags);
return;
} else {
if (it->stickers.isEmpty()) return;
}
stream << quint64(it->id) << quint64(it->access) << it->title << it->shortName << qint32(it->stickers.size()) << qint32(it->hash) << qint32(it->flags);
for (StickerPack::const_iterator j = it->stickers.cbegin(), e = it->stickers.cend(); j != e; ++j) { for (StickerPack::const_iterator j = it->stickers.cbegin(), e = it->stickers.cend(); j != e; ++j) {
DocumentData *doc = *j; DocumentData *doc = *j;
stream << quint64(doc->id) << quint64(doc->access) << qint32(doc->date) << doc->name << doc->mime << qint32(doc->dc) << qint32(doc->size) << qint32(doc->dimensions.width()) << qint32(doc->dimensions.height()) << qint32(doc->type) << doc->sticker->alt; stream << quint64(doc->id) << quint64(doc->access) << qint32(doc->date) << doc->name << doc->mime << qint32(doc->dc) << qint32(doc->size) << qint32(doc->dimensions.width()) << qint32(doc->dimensions.height()) << qint32(doc->type) << doc->sticker()->alt;
switch (doc->sticker->set.type()) { switch (doc->sticker()->set.type()) {
case mtpc_inputStickerSetID: { case mtpc_inputStickerSetID: {
stream << qint32(StickerSetTypeID); stream << qint32(StickerSetTypeID);
} break; } break;
@ -2249,8 +2369,7 @@ namespace Local {
stream << qint32(StickerSetTypeEmpty); stream << qint32(StickerSetTypeEmpty);
} break; } break;
} }
const StorageImageLocation &loc(doc->sticker->loc); _writeStorageImageLocation(stream, doc->sticker()->loc);
stream << qint32(loc.width) << qint32(loc.height) << qint32(loc.dc) << quint64(loc.volume) << qint32(loc.local) << quint64(loc.secret);
} }
} }
@ -2266,30 +2385,39 @@ namespace Local {
} }
_writeMap(); _writeMap();
} else { } else {
int32 setsCount = 0;
quint32 size = sizeof(quint32) + _bytearraySize(cStickersHash());
for (StickerSets::const_iterator i = sets.cbegin(); i != sets.cend(); ++i) {
bool notLoaded = (i->flags & MTPDstickerSet_flag_NOT_LOADED);
if (notLoaded) {
if (!(i->flags & MTPDstickerSet_flag_disabled)) { // waiting to receive
return;
}
} else {
if (i->stickers.isEmpty()) continue;
}
// id + access + title + shortName + stickersCount + hash + flags
size += sizeof(quint64) * 2 + _stringSize(i->title) + _stringSize(i->shortName) + sizeof(quint32) + sizeof(qint32) * 2;
for (StickerPack::const_iterator j = i->stickers.cbegin(), e = i->stickers.cend(); j != e; ++j) {
DocumentData *doc = *j;
// id + access + date + namelen + name + mimelen + mime + dc + size + width + height + type + alt + type-of-set
size += sizeof(quint64) + sizeof(quint64) + sizeof(qint32) + _stringSize(doc->name) + _stringSize(doc->mime) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + _stringSize(doc->sticker()->alt) + sizeof(qint32);
// loc
size += _storageImageLocationSize();
}
++setsCount;
}
if (!_stickersKey) { if (!_stickersKey) {
_stickersKey = genKey(); _stickersKey = genKey();
_mapChanged = true; _mapChanged = true;
_writeMap(WriteMapFast); _writeMap(WriteMapFast);
} }
quint32 size = sizeof(quint32) + _bytearraySize(cStickersHash());
for (StickerSets::const_iterator i = sets.cbegin(); i != sets.cend(); ++i) {
if (i->stickers.isEmpty()) continue;
// id + access + title + shortName + stickersCount
size += sizeof(quint64) * 2 + _stringSize(i->title) + _stringSize(i->shortName) + sizeof(quint32);
for (StickerPack::const_iterator j = i->stickers.cbegin(), e = i->stickers.cend(); j != e; ++j) {
DocumentData *doc = *j;
// id + access + date + namelen + name + mimelen + mime + dc + size + width + height + type + alt + type-of-set
size += sizeof(quint64) + sizeof(quint64) + sizeof(qint32) + _stringSize(doc->name) + _stringSize(doc->mime) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + _stringSize(doc->sticker->alt) + sizeof(qint32);
// thumb-width + thumb-height + thumb-dc + thumb-volume + thumb-local + thumb-secret
size += sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(quint64) + sizeof(qint32) + sizeof(quint64);
}
}
EncryptedDescriptor data(size); EncryptedDescriptor data(size);
data.stream << quint32(cStickerSets().size()) << cStickersHash(); data.stream << quint32(setsCount) << cStickersHash();
_writeStickerSet(data.stream, DefaultStickerSetId);
_writeStickerSet(data.stream, CustomStickerSetId); _writeStickerSet(data.stream, CustomStickerSetId);
for (StickerSetsOrder::const_iterator i = cStickerSetsOrder().cbegin(), e = cStickerSetsOrder().cend(); i != e; ++i) { for (StickerSetsOrder::const_iterator i = cStickerSetsOrder().cbegin(), e = cStickerSetsOrder().cend(); i != e; ++i) {
_writeStickerSet(data.stream, *i); _writeStickerSet(data.stream, *i);
@ -2312,15 +2440,17 @@ namespace Local {
StickerSets &sets(cRefStickerSets()); StickerSets &sets(cRefStickerSets());
sets.clear(); sets.clear();
cSetStickerSetsOrder(StickerSetsOrder());
StickerSetsOrder &order(cRefStickerSetsOrder());
order.clear();
RecentStickerPack &recent(cRefRecentStickers()); RecentStickerPack &recent(cRefRecentStickers());
recent.clear(); recent.clear();
cSetStickersHash(QByteArray()); cSetStickersHash(QByteArray());
StickerSet &def(sets.insert(DefaultStickerSetId, StickerSet(DefaultStickerSetId, 0, lang(lng_stickers_default_set), QString())).value()); StickerSet &def(sets.insert(DefaultStickerSetId, StickerSet(DefaultStickerSetId, 0, lang(lng_stickers_default_set), QString(), 0, 0, MTPDstickerSet_flag_official)).value());
StickerSet &custom(sets.insert(CustomStickerSetId, StickerSet(CustomStickerSetId, 0, lang(lng_custom_stickers), QString())).value()); StickerSet &custom(sets.insert(CustomStickerSetId, StickerSet(CustomStickerSetId, 0, lang(lng_custom_stickers), QString(), 0, 0, 0)).value());
QMap<uint64, bool> read; QMap<uint64, bool> read;
while (!stickers.stream.atEnd()) { while (!stickers.stream.atEnd()) {
@ -2347,16 +2477,22 @@ namespace Local {
} }
DocumentData *doc = App::documentSet(id, 0, access, date, attributes, mime, ImagePtr(), dc, size, StorageImageLocation()); DocumentData *doc = App::documentSet(id, 0, access, date, attributes, mime, ImagePtr(), dc, size, StorageImageLocation());
if (!doc->sticker) continue; if (!doc->sticker()) continue;
if (value > 0) { if (value > 0) {
def.stickers.push_back(doc); def.stickers.push_back(doc);
++def.count;
} else { } else {
custom.stickers.push_back(doc); custom.stickers.push_back(doc);
++custom.count;
} }
if (recent.size() < StickerPanPerRow * StickerPanRowsPerPage && qAbs(value) > 1) recent.push_back(qMakePair(doc, qAbs(value))); if (recent.size() < StickerPanPerRow * StickerPanRowsPerPage && qAbs(value) > 1) recent.push_back(qMakePair(doc, qAbs(value)));
} }
if (def.stickers.isEmpty()) sets.remove(DefaultStickerSetId); if (def.stickers.isEmpty()) {
sets.remove(DefaultStickerSetId);
} else {
order.push_front(DefaultStickerSetId);
}
if (custom.stickers.isEmpty()) sets.remove(CustomStickerSetId); if (custom.stickers.isEmpty()) sets.remove(CustomStickerSetId);
writeStickers(); writeStickers();
@ -2396,11 +2532,18 @@ namespace Local {
for (uint32 i = 0; i < cnt; ++i) { for (uint32 i = 0; i < cnt; ++i) {
quint64 setId = 0, setAccess = 0; quint64 setId = 0, setAccess = 0;
QString setTitle, setShortName; QString setTitle, setShortName;
quint32 scnt = 0; qint32 scnt = 0;
stickers.stream >> setId >> setAccess >> setTitle >> setShortName >> scnt; stickers.stream >> setId >> setAccess >> setTitle >> setShortName >> scnt;
qint32 setHash = 0, setFlags = 0;
if (stickers.version > 8033) {
stickers.stream >> setHash >> setFlags;
}
if (setId == DefaultStickerSetId) { if (setId == DefaultStickerSetId) {
setTitle = lang(lng_stickers_default_set); setTitle = lang(lng_stickers_default_set);
setFlags |= MTPDstickerSet_flag_official;
order.push_front(setId);
} else if (setId == CustomStickerSetId) { } else if (setId == CustomStickerSetId) {
setTitle = lang(lng_custom_stickers); setTitle = lang(lng_custom_stickers);
} else if (setId) { } else if (setId) {
@ -2408,19 +2551,22 @@ namespace Local {
} else { } else {
continue; continue;
} }
StickerSet &set(sets.insert(setId, StickerSet(setId, setAccess, setTitle, setShortName)).value()); StickerSet &set(sets.insert(setId, StickerSet(setId, setAccess, setTitle, setShortName, 0, setHash, setFlags)).value());
if (scnt < 0) { // disabled not loaded set
set.count = -scnt;
continue;
}
set.stickers.reserve(scnt); set.stickers.reserve(scnt);
QMap<uint64, bool> read; QMap<uint64, bool> read;
for (uint32 j = 0; j < scnt; ++j) { for (int32 j = 0; j < scnt; ++j) {
quint64 id, access; quint64 id, access;
QString name, mime, alt; QString name, mime, alt;
qint32 date, dc, size, width, height, type, typeOfSet; qint32 date, dc, size, width, height, type, typeOfSet;
stickers.stream >> id >> access >> date >> name >> mime >> dc >> size >> width >> height >> type >> alt >> typeOfSet; stickers.stream >> id >> access >> date >> name >> mime >> dc >> size >> width >> height >> type >> alt >> typeOfSet;
qint32 thumbWidth, thumbHeight, thumbDc, thumbLocal; StorageImageLocation thumb(_readStorageImageLocation(stickers));
quint64 thumbVolume, thumbSecret;
stickers.stream >> thumbWidth >> thumbHeight >> thumbDc >> thumbVolume >> thumbLocal >> thumbSecret;
if (read.contains(id)) continue; if (read.contains(id)) continue;
read.insert(id, true); read.insert(id, true);
@ -2451,11 +2597,11 @@ namespace Local {
attributes.push_back(MTP_documentAttributeImageSize(MTP_int(width), MTP_int(height))); attributes.push_back(MTP_documentAttributeImageSize(MTP_int(width), MTP_int(height)));
} }
StorageImageLocation thumb(thumbWidth, thumbHeight, thumbDc, thumbVolume, thumbLocal, thumbSecret);
DocumentData *doc = App::documentSet(id, 0, access, date, attributes, mime, thumb.dc ? ImagePtr(thumb) : ImagePtr(), dc, size, thumb); DocumentData *doc = App::documentSet(id, 0, access, date, attributes, mime, thumb.dc ? ImagePtr(thumb) : ImagePtr(), dc, size, thumb);
if (!doc->sticker) continue; if (!doc->sticker()) continue;
set.stickers.push_back(doc); set.stickers.push_back(doc);
++set.count;
} }
} }
@ -2603,6 +2749,190 @@ namespace Local {
cSetRecentSearchHashtags(search); cSetRecentSearchHashtags(search);
} }
uint32 _peerSize(PeerData *peer) {
uint32 result = sizeof(quint64) + sizeof(quint64) + _storageImageLocationSize();
if (peer->chat) {
ChatData *chat = peer->asChat();
// name + count + date + version + admin + forbidden + left + invitationUrl
result += _stringSize(chat->name) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + _stringSize(chat->invitationUrl);
} else {
UserData *user = peer->asUser();
// first + last + phone + username + access + onlineTill + contact + botInfoVersion
result += _stringSize(user->firstName) + _stringSize(user->lastName) + _stringSize(user->phone) + _stringSize(user->username) + sizeof(quint64) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32);
}
return result;
}
void _writePeer(QDataStream &stream, PeerData *peer) {
stream << quint64(peer->id) << quint64(peer->photoId);
_writeStorageImageLocation(stream, peer->photoLoc);
if (peer->chat) {
ChatData *chat = peer->asChat();
stream << chat->name << qint32(chat->count) << qint32(chat->date) << qint32(chat->version) << qint32(chat->admin);
stream << qint32(chat->forbidden ? 1 : 0) << qint32(chat->left ? 1 : 0) << chat->invitationUrl;
} else {
UserData *user = peer->asUser();
stream << user->firstName << user->lastName << user->phone << user->username << quint64(user->access) << qint32(user->onlineTill) << qint32(user->contact) << qint32(user->botInfo ? user->botInfo->version : -1);
}
}
PeerData *_readPeer(FileReadDescriptor &from) {
PeerData *result = 0;
quint64 peerId = 0, photoId = 0;
from.stream >> peerId >> photoId;
StorageImageLocation photoLoc(_readStorageImageLocation(from));
result = App::peer(peerId);
result->loaded = true;
if (result->chat) {
ChatData *chat = result->asChat();
QString name, invitationUrl;
qint32 count, date, version, admin, forbidden, left;
from.stream >> name >> count >> date >> version >> admin >> forbidden >> left >> invitationUrl;
chat->updateName(name, QString(), QString());
chat->count = count;
chat->date = date;
chat->version = version;
chat->admin = admin;
chat->forbidden = (forbidden == 1);
chat->left = (left == 1);
chat->invitationUrl = invitationUrl;
chat->input = MTP_inputPeerChat(MTP_int(App::chatFromPeer(chat->id)));
chat->photo = photoLoc.isNull() ? ImagePtr(chatDefPhoto(chat->colorIndex)) : ImagePtr(photoLoc);
} else {
UserData *user = result->asUser();
QString first, last, phone, username;
quint64 access;
qint32 onlineTill, contact, botInfoVersion;
from.stream >> first >> last >> phone >> username >> access >> onlineTill >> contact >> botInfoVersion;
bool showPhone = !isServiceUser(user->id) && (App::userFromPeer(user->id) != MTP::authedId()) && (contact <= 0);
QString pname = (showPhone && !phone.isEmpty()) ? App::formatPhone(phone) : QString();
user->setName(first, last, pname, username);
user->access = access;
user->onlineTill = onlineTill;
user->contact = contact;
user->setBotInfoVersion(botInfoVersion);
if (App::userFromPeer(user->id) == MTP::authedId()) {
user->input = MTP_inputPeerSelf();
user->inputUser = MTP_inputUserSelf();
} else {
user->input = MTP_inputPeerUser(MTP_int(App::userFromPeer(user->id)), MTP_long((user->access == UserNoAccess) ? 0 : user->access));
user->inputUser = MTP_inputUser(MTP_int(App::userFromPeer(user->id)), MTP_long((user->access == UserNoAccess) ? 0 : user->access));
}
user->photo = photoLoc.isNull() ? ImagePtr(userDefPhoto(user->colorIndex)) : ImagePtr(photoLoc);
}
App::markPeerUpdated(result);
emit App::main()->peerPhotoChanged(result);
return result;
}
void writeSavedPeers() {
if (!_working()) return;
const SavedPeers &saved(cSavedPeers());
if (saved.isEmpty()) {
if (_savedPeersKey) {
clearKey(_savedPeersKey);
_savedPeersKey = 0;
_mapChanged = true;
}
_writeMap();
} else {
if (!_savedPeersKey) {
_savedPeersKey = genKey();
_mapChanged = true;
_writeMap(WriteMapFast);
}
quint32 size = sizeof(quint32);
for (SavedPeers::const_iterator i = saved.cbegin(); i != saved.cend(); ++i) {
size += _peerSize(i.key()) + _dateTimeSize();
}
EncryptedDescriptor data(size);
data.stream << quint32(saved.size());
for (SavedPeers::const_iterator i = saved.cbegin(); i != saved.cend(); ++i) {
_writePeer(data.stream, i.key());
data.stream << i.value();
}
FileWriteDescriptor file(_savedPeersKey);
file.writeEncrypted(data);
}
}
void readSavedPeers() {
if (!_savedPeersKey) return;
FileReadDescriptor saved;
if (!readEncryptedFile(saved, _savedPeersKey)) {
clearKey(_savedPeersKey);
_savedPeersKey = 0;
_writeMap();
return;
}
quint32 count = 0;
saved.stream >> count;
cRefSavedPeers().clear();
cRefSavedPeersByTime().clear();
QList<PeerData*> peers;
peers.reserve(count);
for (uint32 i = 0; i < count; ++i) {
PeerData *peer = _readPeer(saved);
if (!peer) break;
QDateTime t;
saved.stream >> t;
cRefSavedPeers().insert(peer, t);
cRefSavedPeersByTime().insert(t, peer);
peers.push_back(peer);
}
App::emitPeerUpdated();
App::api()->requestPeers(peers);
}
void addSavedPeer(PeerData *peer, const QDateTime &position) {
SavedPeers &savedPeers(cRefSavedPeers());
SavedPeers::iterator i = savedPeers.find(peer);
if (i == savedPeers.cend()) {
savedPeers.insert(peer, position);
} else if (i.value() != position) {
cRefSavedPeersByTime().remove(i.value(), peer);
i.value() = position;
cRefSavedPeersByTime().insert(i.value(), peer);
}
writeSavedPeers();
}
void removeSavedPeer(PeerData *peer) {
SavedPeers &savedPeers(cRefSavedPeers());
if (savedPeers.isEmpty()) return;
SavedPeers::iterator i = savedPeers.find(peer);
if (i != savedPeers.cend()) {
cRefSavedPeersByTime().remove(i.value(), peer);
savedPeers.erase(i);
writeSavedPeers();
}
}
struct ClearManagerData { struct ClearManagerData {
QThread *thread; QThread *thread;
StorageMap images, stickers, audios; StorageMap images, stickers, audios;
@ -2662,6 +2992,10 @@ namespace Local {
_recentHashtagsKey = 0; _recentHashtagsKey = 0;
_mapChanged = true; _mapChanged = true;
} }
if (_savedPeersKey) {
_savedPeersKey = 0;
_mapChanged = true;
}
_writeMap(); _writeMap();
} else { } else {
if (task & ClearManagerStorage) { if (task & ClearManagerStorage) {
@ -2771,7 +3105,7 @@ namespace Local {
if (!QDir(di.filePath()).removeRecursively()) result = false; if (!QDir(di.filePath()).removeRecursively()) result = false;
} else { } else {
QString path = di.filePath(); QString path = di.filePath();
if (!path.endsWith(QLatin1String("map0")) && !path.endsWith(QLatin1String("map1"))) { if (!path.endsWith(qstr("map0")) && !path.endsWith(qstr("map1"))) {
if (!QFile::remove(di.filePath())) result = false; if (!QFile::remove(di.filePath())) result = false;
} }
} }

View file

@ -100,6 +100,8 @@ namespace Local {
ReadMapState readMap(const QByteArray &pass); ReadMapState readMap(const QByteArray &pass);
int32 oldMapVersion(); int32 oldMapVersion();
int32 oldSettingsVersion();
struct MessageDraft { struct MessageDraft {
MessageDraft(MsgId replyTo = 0, QString text = QString(), bool previewCancelled = false) : replyTo(replyTo), text(text), previewCancelled(previewCancelled) { MessageDraft(MsgId replyTo = 0, QString text = QString(), bool previewCancelled = false) : replyTo(replyTo), text(text), previewCancelled(previewCancelled) {
} }
@ -113,8 +115,8 @@ namespace Local {
MessageCursor readDraftPositions(const PeerId &peer); MessageCursor readDraftPositions(const PeerId &peer);
bool hasDraftPositions(const PeerId &peer); bool hasDraftPositions(const PeerId &peer);
void writeFileLocation(const StorageKey &location, const FileLocation &local); void writeFileLocation(MediaKey location, const FileLocation &local);
FileLocation readFileLocation(const StorageKey &location, bool check = true); FileLocation readFileLocation(MediaKey location, bool check = true);
void writeImage(const StorageKey &location, const ImagePtr &img); void writeImage(const StorageKey &location, const ImagePtr &img);
void writeImage(const StorageKey &location, const StorageImageSaved &jpeg, bool overwrite = true); void writeImage(const StorageKey &location, const StorageImageSaved &jpeg, bool overwrite = true);
@ -141,4 +143,8 @@ namespace Local {
void writeRecentHashtags(); void writeRecentHashtags();
void readRecentHashtags(); void readRecentHashtags();
void addSavedPeer(PeerData *peer, const QDateTime &position);
void removeSavedPeer(PeerData *peer);
void readSavedPeers();
}; };

View file

@ -232,6 +232,9 @@ void logsInit() {
logsInitDebug(); logsInitDebug();
cSetDebug(true); cSetDebug(true);
} }
if (!cDevVersion() && QFile(cWorkingDir() + qsl("tdata/devversion")).exists()) {
cSetDevVersion(true);
}
QDir().setCurrent(cWorkingDir()); QDir().setCurrent(cWorkingDir());
} }

View file

@ -39,6 +39,9 @@ int main(int argc, char *argv[]) {
logsInit(); logsInit();
Local::readSettings(); Local::readSettings();
if (Local::oldSettingsVersion() < AppVersion) {
psNewVersion();
}
if (cFromAutoStart() && !cAutoStart()) { if (cFromAutoStart() && !cAutoStart()) {
psAutoStart(false, true); psAutoStart(false, true);
Local::stop(); Local::stop();
@ -79,6 +82,15 @@ int main(int argc, char *argv[]) {
DEBUG_LOG(("Application Info: Telegram done, result: %1").arg(result)); DEBUG_LOG(("Application Info: Telegram done, result: %1").arg(result));
if (cRestartingUpdate()) { if (cRestartingUpdate()) {
if (DevVersion) {
LOG(("Writing 'devversion' file before launching the Updater!"));
QFile f(cWorkingDir() + qsl("tdata/devversion"));
if (!f.exists() && f.open(QIODevice::WriteOnly)) {
f.write("1");
f.close();
}
}
DEBUG_LOG(("Application Info: executing updater to install update..")); DEBUG_LOG(("Application Info: executing updater to install update.."));
psExecUpdater(); psExecUpdater();
} else if (cRestarting()) { } else if (cRestarting()) {

File diff suppressed because it is too large Load diff

View file

@ -21,6 +21,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
#include "historywidget.h" #include "historywidget.h"
#include "profilewidget.h" #include "profilewidget.h"
#include "overviewwidget.h" #include "overviewwidget.h"
#include "playerwidget.h"
#include "apiwrap.h" #include "apiwrap.h"
class Window; class Window;
@ -110,13 +111,14 @@ public:
class StackItemHistory : public StackItem { class StackItemHistory : public StackItem {
public: public:
StackItemHistory(PeerData *peer, int32 lastWidth, int32 lastScrollTop, QList<MsgId> replyReturns, bool kbWasHidden) : StackItem(peer), replyReturns(replyReturns), lastWidth(lastWidth), lastScrollTop(lastScrollTop), kbWasHidden(kbWasHidden) { StackItemHistory(PeerData *peer, MsgId msgId, QList<MsgId> replyReturns, bool kbWasHidden) : StackItem(peer),
msgId(msgId), replyReturns(replyReturns), kbWasHidden(kbWasHidden) {
} }
StackItemType type() const { StackItemType type() const {
return HistoryStackItem; return HistoryStackItem;
} }
MsgId msgId;
QList<MsgId> replyReturns; QList<MsgId> replyReturns;
int32 lastWidth, lastScrollTop;
bool kbWasHidden; bool kbWasHidden;
}; };
@ -163,6 +165,13 @@ public:
} }
}; };
enum ForwardWhatMessages {
ForwardSelectedMessages,
ForwardContextMessage,
ForwardPressedMessage,
ForwardPressedLinkMessage
};
class MainWidget : public QWidget, public Animated, public RPCSender { class MainWidget : public QWidget, public Animated, public RPCSender {
Q_OBJECT Q_OBJECT
@ -176,12 +185,15 @@ public:
void updateWideMode(); void updateWideMode();
bool needBackButton(); bool needBackButton();
void onShowDialogs(); void showDialogs();
void paintTopBar(QPainter &p, float64 over, int32 decreaseWidth); void paintTopBar(QPainter &p, float64 over, int32 decreaseWidth);
void topBarShadowParams(int32 &x, float64 &o); void topBarShadowParams(int32 &x, float64 &o);
TopBarWidget *topBar(); TopBarWidget *topBar();
PlayerWidget *player();
int32 contentScrollAddToY() const;
void animShow(const QPixmap &bgAnimCache, bool back = false); void animShow(const QPixmap &bgAnimCache, bool back = false);
bool animStep(float64 ms); bool animStep(float64 ms);
@ -223,13 +235,17 @@ public:
void peerAfter(const PeerData *inPeer, MsgId inMsg, PeerData *&outPeer, MsgId &outMsg); void peerAfter(const PeerData *inPeer, MsgId inMsg, PeerData *&outPeer, MsgId &outMsg);
PeerData *historyPeer(); PeerData *historyPeer();
PeerData *peer(); PeerData *peer();
PeerData *activePeer(); PeerData *activePeer();
MsgId activeMsgId(); MsgId activeMsgId();
PeerData *profilePeer(); PeerData *profilePeer();
PeerData *overviewPeer();
bool mediaTypeSwitch(); bool mediaTypeSwitch();
void showPeerProfile(PeerData *peer, bool back = false, int32 lastScrollTop = -1, bool allMediaShown = false); void showPeerProfile(PeerData *peer, bool back = false, int32 lastScrollTop = -1, bool allMediaShown = false);
void showMediaOverview(PeerData *peer, MediaOverviewType type, bool back = false, int32 lastScrollTop = -1); void showMediaOverview(PeerData *peer, MediaOverviewType type, bool back = false, int32 lastScrollTop = -1);
void showBackFromStack(); void showBackFromStack();
void orderWidgets();
QRect historyRect() const; QRect historyRect() const;
void confirmShareContact(bool ctrlShiftEnter, const QString &phone, const QString &fname, const QString &lname, MsgId replyTo); void confirmShareContact(bool ctrlShiftEnter, const QString &phone, const QString &fname, const QString &lname, MsgId replyTo);
@ -254,20 +270,22 @@ public:
void shareContactLayer(UserData *contact); void shareContactLayer(UserData *contact);
void hiderLayer(HistoryHider *h); void hiderLayer(HistoryHider *h);
void noHider(HistoryHider *destroyed); void noHider(HistoryHider *destroyed);
void onForward(const PeerId &peer, bool forwardSelected); void onForward(const PeerId &peer, ForwardWhatMessages what);
void onShareContact(const PeerId &peer, UserData *contact); void onShareContact(const PeerId &peer, UserData *contact);
void onSendPaths(const PeerId &peer); void onSendPaths(const PeerId &peer);
void onFilesOrForwardDrop(const PeerId &peer, const QMimeData *data);
bool selectingPeer(bool withConfirm = false); bool selectingPeer(bool withConfirm = false);
void offerPeer(PeerId peer); void offerPeer(PeerId peer);
void focusPeerSelect();
void dialogsActivate(); void dialogsActivate();
DragState getDragState(const QMimeData *mime);
bool leaveChatFailed(PeerData *peer, const RPCError &e); bool leaveChatFailed(PeerData *peer, const RPCError &e);
void deleteHistory(PeerData *peer, const MTPUpdates &updates); void deleteHistoryAfterLeave(PeerData *peer, const MTPUpdates &updates);
void deleteHistoryPart(PeerData *peer, const MTPmessages_AffectedHistory &result); void deleteHistoryPart(PeerData *peer, const MTPmessages_AffectedHistory &result);
void deleteMessages(const QVector<MTPint> &ids); void deleteMessages(const QVector<MTPint> &ids);
void deletedContact(UserData *user, const MTPcontacts_Link &result); void deletedContact(UserData *user, const MTPcontacts_Link &result);
void deleteHistoryAndContact(UserData *user, const MTPcontacts_Link &result); void deleteConversation(PeerData *peer);
void clearHistory(PeerData *peer); void clearHistory(PeerData *peer);
void removeContact(UserData *user); void removeContact(UserData *user);
@ -295,7 +313,7 @@ public:
void readServerHistory(History *history, bool force = true); void readServerHistory(History *history, bool force = true);
uint64 animActiveTime() const; uint64 animActiveTime(MsgId id) const;
void stopAnimActive(); void stopAnimActive();
void sendBotCommand(const QString &cmd, MsgId msgId); void sendBotCommand(const QString &cmd, MsgId msgId);
@ -303,7 +321,7 @@ public:
void searchMessages(const QString &query); void searchMessages(const QString &query);
void preloadOverviews(PeerData *peer); void preloadOverviews(PeerData *peer);
void mediaOverviewUpdated(PeerData *peer); void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type);
void changingMsgId(HistoryItem *row, MsgId newId); void changingMsgId(HistoryItem *row, MsgId newId);
void itemRemoved(HistoryItem *item); void itemRemoved(HistoryItem *item);
void itemReplaced(HistoryItem *oldItem, HistoryItem *newItem); void itemReplaced(HistoryItem *oldItem, HistoryItem *newItem);
@ -352,6 +370,10 @@ public:
void updateMutedIn(int32 seconds); void updateMutedIn(int32 seconds);
void updateStickers(); void updateStickers();
void botCommandsChanged(UserData *bot);
void choosePeer(PeerId peerId, MsgId showAtMsgId); // does offerPeer or showPeerHistory
void clearBotStartToken(PeerData *peer);
~MainWidget(); ~MainWidget();
@ -363,7 +385,7 @@ signals:
void dialogRowReplaced(DialogRow *oldRow, DialogRow *newRow); void dialogRowReplaced(DialogRow *oldRow, DialogRow *newRow);
void dialogToTop(const History::DialogLinks &links); void dialogToTop(const History::DialogLinks &links);
void dialogsUpdated(); void dialogsUpdated();
void showPeerAsync(quint64 peer, qint32 msgId, bool back, bool force); void showPeerAsync(quint64 peerId, qint32 showAtMsgId);
void stickersUpdated(); void stickersUpdated();
public slots: public slots:
@ -376,10 +398,12 @@ public slots:
void audioLoadProgress(mtpFileLoader *loader); void audioLoadProgress(mtpFileLoader *loader);
void audioLoadFailed(mtpFileLoader *loader, bool started); void audioLoadFailed(mtpFileLoader *loader, bool started);
void audioLoadRetry(); void audioLoadRetry();
void audioPlayProgress(AudioData *audio); void audioPlayProgress(const AudioMsgId &audioId);
void documentLoadProgress(mtpFileLoader *loader); void documentLoadProgress(mtpFileLoader *loader);
void documentLoadFailed(mtpFileLoader *loader, bool started); void documentLoadFailed(mtpFileLoader *loader, bool started);
void documentLoadRetry(); void documentLoadRetry();
void documentPlayProgress(const SongMsgId &songId);
void hidePlayer();
void setInnerFocus(); void setInnerFocus();
void dialogsCancelled(); void dialogsCancelled();
@ -393,10 +417,12 @@ public slots:
void checkIdleFinish(); void checkIdleFinish();
void updateOnlineDisplay(); void updateOnlineDisplay();
void showPeer(quint64 peer, qint32 msgId = 0, bool back = false, bool force = false); // PeerId, MsgId void showPeerHistory(quint64 peer, qint32 msgId, bool back = false);
void onTopBarClick(); void onTopBarClick();
void onPeerShown(PeerData *peer); void onPeerShown(PeerData *peer);
void searchInPeer(PeerData *peer);
void onUpdateNotifySettings(); void onUpdateNotifySettings();
void onPhotosSelect(); void onPhotosSelect();
@ -479,11 +505,16 @@ private:
HistoryWidget history; HistoryWidget history;
ProfileWidget *profile; ProfileWidget *profile;
OverviewWidget *overview; OverviewWidget *overview;
PlayerWidget _player;
TopBarWidget _topBar; TopBarWidget _topBar;
ConfirmBox *_forwardConfirm; // for narrow mode ConfirmBox *_forwardConfirm; // for narrow mode
HistoryHider *hider; HistoryHider *_hider;
StackItems _stack; StackItems _stack;
QPixmap profileAnimCache; PeerData *_peerInStack;
MsgId _msgIdInStack;
int32 _playerHeight;
int32 _contentScrollAddToY;
Dropdown _mediaType; Dropdown _mediaType;
int32 _mediaTypeMask; int32 _mediaTypeMask;

View file

@ -26,6 +26,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
namespace { namespace {
class SaveMsgLink : public ITextLink { class SaveMsgLink : public ITextLink {
TEXT_LINK_CLASS(SaveMsgLink)
public: public:
SaveMsgLink(MediaView *view) : _view(view) { SaveMsgLink(MediaView *view) : _view(view) {
@ -134,19 +136,19 @@ void MediaView::moveToScreen() {
} }
int32 navSkip = 2 * st::mvControlMargin + st::mvControlSize; int32 navSkip = 2 * st::mvControlMargin + st::mvControlSize;
_closeNav = rtlrect(width() - st::mvControlMargin - st::mvControlSize, st::mvControlMargin, st::mvControlSize, st::mvControlSize, width()); _closeNav = myrtlrect(width() - st::mvControlMargin - st::mvControlSize, st::mvControlMargin, st::mvControlSize, st::mvControlSize);
_closeNavIcon = centersprite(_closeNav, st::mvClose); _closeNavIcon = centersprite(_closeNav, st::mvClose);
_leftNav = rtlrect(st::mvControlMargin, navSkip, st::mvControlSize, height() - 2 * navSkip, width()); _leftNav = myrtlrect(st::mvControlMargin, navSkip, st::mvControlSize, height() - 2 * navSkip);
_leftNavIcon = centersprite(_leftNav, st::mvLeft); _leftNavIcon = centersprite(_leftNav, st::mvLeft);
_rightNav = rtlrect(width() - st::mvControlMargin - st::mvControlSize, navSkip, st::mvControlSize, height() - 2 * navSkip, width()); _rightNav = myrtlrect(width() - st::mvControlMargin - st::mvControlSize, navSkip, st::mvControlSize, height() - 2 * navSkip);
_rightNavIcon = centersprite(_rightNav, st::mvRight); _rightNavIcon = centersprite(_rightNav, st::mvRight);
_saveMsg.moveTo((width() - _saveMsg.width()) / 2, (height() - _saveMsg.height()) / 2); _saveMsg.moveTo((width() - _saveMsg.width()) / 2, (height() - _saveMsg.height()) / 2);
} }
void MediaView::mediaOverviewUpdated(PeerData *peer) { void MediaView::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) {
if (!_photo && !_doc) return; if (!_photo && !_doc) return;
if (_history && _history->peer == peer) { if (_history && _history->peer == peer && type == _overview) {
_index = -1; _index = -1;
for (int i = 0, l = _history->_overview[_overview].size(); i < l; ++i) { for (int i = 0, l = _history->_overview[_overview].size(); i < l; ++i) {
if (_history->_overview[_overview].at(i) == _msgid) { if (_history->_overview[_overview].at(i) == _msgid) {
@ -156,7 +158,7 @@ void MediaView::mediaOverviewUpdated(PeerData *peer) {
} }
updateControls(); updateControls();
preloadData(0); preloadData(0);
} else if (_user == peer) { } else if (_user == peer && type == OverviewCount) {
if (!_photo) return; if (!_photo) return;
_index = -1; _index = -1;
@ -190,7 +192,7 @@ void MediaView::changingMsgId(HistoryItem *row, MsgId newId) {
if (row->id == _msgid) { if (row->id == _msgid) {
_msgid = newId; _msgid = newId;
} }
mediaOverviewUpdated(row->history()->peer); mediaOverviewUpdated(row->history()->peer, _overview);
} }
void MediaView::updateDocSize() { void MediaView::updateDocSize() {
@ -223,8 +225,6 @@ void MediaView::updateDocSize() {
} }
void MediaView::updateControls() { void MediaView::updateControls() {
if (!_photo && !_doc) return;
if (_doc && _current.isNull() && _currentGif.isNull()) { if (_doc && _current.isNull() && _currentGif.isNull()) {
if (_doc->loader) { if (_doc->loader) {
_docDownload.hide(); _docDownload.hide();
@ -255,13 +255,20 @@ void MediaView::updateControls() {
_docCancel.hide(); _docCancel.hide();
} }
_saveVisible = ((_photo && _photo->full->loaded()) || (_doc && (!_doc->already(true).isEmpty() || (_current.isNull() && _currentGif.isNull())))); _saveVisible = ((_photo && _photo->full->loaded()) || (_doc && (!_doc->already(true).isEmpty() || (_current.isNull() && _currentGif.isNull() && (_photo || _doc)))));
_saveNav = rtlrect(width() - st::mvIconSize.width() * 2, height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height(), width()); _saveNav = myrtlrect(width() - st::mvIconSize.width() * 2, height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height());
_saveNavIcon = centersprite(_saveNav, st::mvSave); _saveNavIcon = centersprite(_saveNav, st::mvSave);
_moreNav = rtlrect(width() - st::mvIconSize.width(), height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height(), width()); _moreNav = myrtlrect(width() - st::mvIconSize.width(), height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height());
_moreNavIcon = centersprite(_moreNav, st::mvMore); _moreNavIcon = centersprite(_moreNav, st::mvMore);
QDateTime d(date(_photo ? _photo->date : _doc->date)), dNow(date(unixtime())); QDateTime d, dNow(date(unixtime()));
if (_photo) {
d = date(_photo->date);
} else if (_doc) {
d = date(_doc->date);
} else if (HistoryItem *item = App::histItemById(_msgid)) {
d = item->date;
}
if (d.date() == dNow.date()) { if (d.date() == dNow.date()) {
_dateText = lng_mediaview_today(lt_time, d.time().toString(cTimeFormat())); _dateText = lng_mediaview_today(lt_time, d.time().toString(cTimeFormat()));
} else if (d.date().addDays(1) == dNow.date()) { } else if (d.date().addDays(1) == dNow.date()) {
@ -271,19 +278,19 @@ void MediaView::updateControls() {
} }
if (_from) { if (_from) {
_fromName.setText(st::mvFont, _from->name); _fromName.setText(st::mvFont, _from->name);
_nameNav = rtlrect(st::mvTextLeft, height() - st::mvTextTop, qMin(_fromName.maxWidth(), width() / 3), st::mvFont->height, width()); _nameNav = myrtlrect(st::mvTextLeft, height() - st::mvTextTop, qMin(_fromName.maxWidth(), width() / 3), st::mvFont->height);
_dateNav = rtlrect(st::mvTextLeft + _nameNav.width() + st::mvTextSkip, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height, width()); _dateNav = myrtlrect(st::mvTextLeft + _nameNav.width() + st::mvTextSkip, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height);
} else { } else {
_nameNav = QRect(); _nameNav = QRect();
_dateNav = rtlrect(st::mvTextLeft, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height, width()); _dateNav = myrtlrect(st::mvTextLeft, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height);
} }
updateHeader(); updateHeader();
if (_photo) { if (_photo || (_history && _overview == OverviewPhotos)) {
_leftNavVisible = (_index > 0) || (_index == 0 && _history && _history->_overview[_overview].size() < _history->_overviewCount[_overview]); _leftNavVisible = (_index > 0) || (_index == 0 && _history && _history->_overview[_overview].size() < _history->_overviewCount[_overview]);
_rightNavVisible = (_index >= 0) && ( _rightNavVisible = (_index >= 0) && (
(_history && _index + 1 < _history->_overview[_overview].size()) || (_history && _index + 1 < _history->_overview[_overview].size()) ||
(_user && (_index + 1 < _user->photos.size() || _index + 1 < _user->photosCount))); (_user && (_index + 1 < _user->photos.size() || _index + 1 < _user->photosCount)));
} else if (_doc) { } else if (_history && _overview == OverviewDocuments) {
_leftNavVisible = (_index > 0) || (_index == 0 && _history && _history->_overview[_overview].size() < _history->_overviewCount[_overview]); _leftNavVisible = (_index > 0) || (_index == 0 && _history && _history->_overview[_overview].size() < _history->_overviewCount[_overview]);
_rightNavVisible = (_index >= 0) && _history && (_index + 1 < _history->_overview[_overview].size()); _rightNavVisible = (_index >= 0) && _history && (_index + 1 < _history->_overview[_overview].size());
} else { } else {
@ -308,7 +315,7 @@ void MediaView::updateDropdown() {
_btnSaveAs->setVisible(true); _btnSaveAs->setVisible(true);
_btnCopy->setVisible((_doc && !_current.isNull()) || (_photo && _photo->full->loaded())); _btnCopy->setVisible((_doc && !_current.isNull()) || (_photo && _photo->full->loaded()));
_btnForward->setVisible(_msgid > 0); _btnForward->setVisible(_msgid > 0);
_btnDelete->setVisible(_msgid > 0 || (App::self() && App::self()->photoId == _photo->id) || (_photo->chat && _photo->chat->photoId == _photo->id)); _btnDelete->setVisible(_msgid > 0 || (_photo && App::self() && App::self()->photoId == _photo->id) || (_photo && _photo->chat && _photo->chat->photoId == _photo->id));
_btnViewAll->setVisible((_overview != OverviewCount) && _history); _btnViewAll->setVisible((_overview != OverviewCount) && _history);
_btnViewAll->setText(lang(_doc ? lng_mediaview_files_all : lng_mediaview_photos_all)); _btnViewAll->setText(lang(_doc ? lng_mediaview_files_all : lng_mediaview_photos_all));
_dropdown.updateButtons(); _dropdown.updateButtons();
@ -347,7 +354,6 @@ bool MediaView::animStep(float64 msp) {
a_cOpacity.finish(); a_cOpacity.finish();
_controlsState = (_controlsState == ControlsShowing ? ControlsShown : ControlsHidden); _controlsState = (_controlsState == ControlsShowing ? ControlsShown : ControlsHidden);
setCursor(_controlsState == ControlsHidden ? Qt::BlankCursor : (_over == OverNone ? style::cur_default : style::cur_pointer)); setCursor(_controlsState == ControlsHidden ? Qt::BlankCursor : (_over == OverNone ? style::cur_default : style::cur_pointer));
LOG(("Finished with controls!"));
} else { } else {
a_cOpacity.update(dt, anim::linear); a_cOpacity.update(dt, anim::linear);
} }
@ -408,7 +414,6 @@ void MediaView::close() {
void MediaView::activateControls() { void MediaView::activateControls() {
_controlsHideTimer.start(int(st::mvWaitHide)); _controlsHideTimer.start(int(st::mvWaitHide));
if (_controlsState == ControlsHiding || _controlsState == ControlsHidden) { if (_controlsState == ControlsHiding || _controlsState == ControlsHidden) {
LOG(("Showing controls.."));
_controlsState = ControlsShowing; _controlsState = ControlsShowing;
_controlsAnimStarted = getms(); _controlsAnimStarted = getms();
a_cOpacity.start(1); a_cOpacity.start(1);
@ -419,7 +424,6 @@ void MediaView::activateControls() {
void MediaView::onHideControls(bool force) { void MediaView::onHideControls(bool force) {
if (!force && !_dropdown.isHidden()) return; if (!force && !_dropdown.isHidden()) return;
if (_controlsState == ControlsHiding || _controlsState == ControlsHidden) return; if (_controlsState == ControlsHiding || _controlsState == ControlsHidden) return;
LOG(("Hiding controls.."));
_controlsState = ControlsHiding; _controlsState = ControlsHiding;
_controlsAnimStarted = getms(); _controlsAnimStarted = getms();
a_cOpacity.start(0); a_cOpacity.start(0);
@ -442,7 +446,7 @@ void MediaView::onToMessage() {
if (HistoryItem *item = _msgid ? App::histItemById(_msgid) : 0) { if (HistoryItem *item = _msgid ? App::histItemById(_msgid) : 0) {
if (App::wnd()) { if (App::wnd()) {
close(); close();
if (App::main()) App::main()->showPeer(item->history()->peer->id, _msgid, false, true); if (App::main()) App::main()->showPeerHistory(item->history()->peer->id, _msgid);
} }
} }
} }
@ -680,7 +684,7 @@ void MediaView::showPhoto(PhotoData *photo, PeerData *context) {
_photo = photo; _photo = photo;
_overview = OverviewCount; _overview = OverviewCount;
if (_user) { if (_user) {
if (_user->photos.isEmpty() && _user->photosCount < 0 && _user->photoId) { if (_user->photos.isEmpty() && _user->photosCount < 0 && _user->photoId && _user->photoId != UnknownPeerPhotoId) {
_index = 0; _index = 0;
} }
for (int i = 0, l = _user->photos.size(); i < l; ++i) { for (int i = 0, l = _user->photos.size(); i < l; ++i) {
@ -771,18 +775,14 @@ void MediaView::displayPhoto(PhotoData *photo, HistoryItem *item) {
_x = (width() - _w) / 2; _x = (width() - _w) / 2;
_y = (height() - _h) / 2; _y = (height() - _h) / 2;
_width = _w; _width = _w;
if (_photo->user == WebPageUserId && _msgid) { if (_msgid && item) {
if (HistoryItem *item = App::histItemById(_msgid)) { if (HistoryForwarded *fwd = item->toHistoryForwarded()) {
if (dynamic_cast<HistoryForwarded*>(item)) { _from = fwd->fromForwarded();
_from = static_cast<HistoryForwarded*>(item)->fromForwarded();
} else { } else {
_from = item->from(); _from = item->from();
} }
} else { } else {
_from = App::user(_photo->user); _from = _user;
}
} else {
_from = App::user(_photo->user);
} }
updateControls(); updateControls();
_photo->full->load(); _photo->full->load();
@ -793,14 +793,16 @@ void MediaView::displayPhoto(PhotoData *photo, HistoryItem *item) {
} }
} }
void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { // empty messages shown as docs: doc can be NULL
_doc = doc; _doc = doc;
_photo = 0;
_caption = Text(); _caption = Text();
if (_doc) {
QString already = _doc->already(true); QString already = _doc->already(true);
if (_doc->sticker && !_doc->sticker->img->isNull() && _doc->sticker->img->loaded()) { if (_doc->sticker() && !_doc->sticker()->img->isNull() && _doc->sticker()->img->loaded()) {
_currentGif.stop(); _currentGif.stop();
_current = _doc->sticker->img->pix(); _current = _doc->sticker()->img->pix();
} else if (!already.isEmpty()) { } else if (!already.isEmpty()) {
QImageReader reader(already); QImageReader reader(already);
if (reader.canRead()) { if (reader.canRead()) {
@ -820,39 +822,43 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) {
_currentGif.stop(); _currentGif.stop();
_current = QPixmap(); _current = QPixmap();
} }
} else {
_currentGif.stop();
_current = QPixmap();
}
if (_current.isNull() && _currentGif.isNull()) { if (_current.isNull() && _currentGif.isNull()) {
if (_doc->thumb->isNull()) { if (!_doc || _doc->thumb->isNull()) {
style::sprite thumbs[] = { st::mvDocBlue, st::mvDocGreen, st::mvDocRed, st::mvDocYellow }; style::sprite thumbs[] = { st::mvDocBlue, st::mvDocGreen, st::mvDocRed, st::mvDocYellow };
style::color colors[] = { st::mvDocBlueColor, st::mvDocGreenColor, st::mvDocRedColor, st::mvDocYellowColor }; style::color colors[] = { st::mvDocBlueColor, st::mvDocGreenColor, st::mvDocRedColor, st::mvDocYellowColor };
QString name = _doc->name.toLower(), mime = _doc->mime.toLower(); QString name = _doc ? _doc->name.toLower() : QString(), mime = _doc ? _doc->mime.toLower() : QString();
if (name.endsWith(QLatin1String(".doc")) || if (name.endsWith(qstr(".doc")) ||
name.endsWith(QLatin1String(".txt")) || name.endsWith(qstr(".txt")) ||
name.endsWith(QLatin1String(".psd")) || name.endsWith(qstr(".psd")) ||
mime.startsWith(QLatin1String("text/")) mime.startsWith(qstr("text/"))
) { ) {
_docIcon = thumbs[0]; _docIcon = thumbs[0];
_docIconColor = colors[0]; _docIconColor = colors[0];
} else if ( } else if (
name.endsWith(QLatin1String(".xls")) || name.endsWith(qstr(".xls")) ||
name.endsWith(QLatin1String(".csv")) name.endsWith(qstr(".csv"))
) { ) {
_docIcon = thumbs[1]; _docIcon = thumbs[1];
_docIconColor = colors[1]; _docIconColor = colors[1];
} else if ( } else if (
name.endsWith(QLatin1String(".pdf")) || name.endsWith(qstr(".pdf")) ||
name.endsWith(QLatin1String(".ppt")) || name.endsWith(qstr(".ppt")) ||
name.endsWith(QLatin1String(".key")) name.endsWith(qstr(".key"))
) { ) {
_docIcon = thumbs[2]; _docIcon = thumbs[2];
_docIconColor = colors[2]; _docIconColor = colors[2];
} else if ( } else if (
name.endsWith(QLatin1String(".zip")) || name.endsWith(qstr(".zip")) ||
name.endsWith(QLatin1String(".rar")) || name.endsWith(qstr(".rar")) ||
name.endsWith(QLatin1String(".ai")) || name.endsWith(qstr(".ai")) ||
name.endsWith(QLatin1String(".mp3")) || name.endsWith(qstr(".mp3")) ||
name.endsWith(QLatin1String(".mov")) || name.endsWith(qstr(".mov")) ||
name.endsWith(QLatin1String(".avi")) name.endsWith(qstr(".avi"))
) { ) {
_docIcon = thumbs[3]; _docIcon = thumbs[3];
_docIconColor = colors[3]; _docIconColor = colors[3];
@ -880,9 +886,9 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) {
int32 maxw = st::mvDocSize.width() - st::mvDocBlue.pxWidth() - st::mvDocPadding * 3; int32 maxw = st::mvDocSize.width() - st::mvDocBlue.pxWidth() - st::mvDocPadding * 3;
_docName = _doc->name.isEmpty() ? lang(_doc->type == StickerDocument ? lng_in_dlg_sticker : lng_mediaview_doc_image) : _doc->name; _docName = (!_doc || _doc->name.isEmpty()) ? lang(_doc ? (_doc->type == StickerDocument ? lng_in_dlg_sticker : lng_mediaview_doc_image) : lng_message_empty) : _doc->name;
int32 lastDot = _docName.lastIndexOf('.'); int32 lastDot = _docName.lastIndexOf('.');
_docExt = (lastDot < 0 || lastDot + 2 > _docName.size()) ? _docName : _docName.mid(lastDot + 1); _docExt = _doc ? ((lastDot < 0 || lastDot + 2 > _docName.size()) ? _docName : _docName.mid(lastDot + 1)) : QString();
_docNameWidth = st::mvDocNameFont->m.width(_docName); _docNameWidth = st::mvDocNameFont->m.width(_docName);
if (_docNameWidth > maxw) { if (_docNameWidth > maxw) {
_docName = st::mvDocNameFont->m.elidedText(_docName, Qt::ElideMiddle, maxw); _docName = st::mvDocNameFont->m.elidedText(_docName, Qt::ElideMiddle, maxw);
@ -899,12 +905,12 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) {
_docRadialFirst = _docRadialLast = _docRadialStart = 0; _docRadialFirst = _docRadialLast = _docRadialStart = 0;
float64 prg = _doc->loader ? _doc->loader->currentProgress() : 0; float64 prg = (_doc && _doc->loader) ? _doc->loader->currentProgress() : 0;
a_docRadial = anim::fvalue(prg, qMax(prg, 0.0001)); a_docRadial = anim::fvalue(prg, qMax(prg, 0.0001));
// _docSize is updated in updateControls() // _docSize is updated in updateControls()
_docRect = QRect((width() - st::mvDocSize.width()) / 2, (height() - st::mvDocSize.height()) / 2, st::mvDocSize.width(), st::mvDocSize.height()); _docRect = QRect((width() - st::mvDocSize.width()) / 2, (height() - st::mvDocSize.height()) / 2, st::mvDocSize.width(), st::mvDocSize.height());
_docIconRect = rtlrect(_docRect.x() + st::mvDocPadding, _docRect.y() + st::mvDocPadding, st::mvDocBlue.pxWidth(), st::mvDocBlue.pxHeight(), width()); _docIconRect = myrtlrect(_docRect.x() + st::mvDocPadding, _docRect.y() + st::mvDocPadding, st::mvDocBlue.pxWidth(), st::mvDocBlue.pxHeight());
} else if (!_current.isNull()) { } else if (!_current.isNull()) {
_current.setDevicePixelRatio(cRetinaFactor()); _current.setDevicePixelRatio(cRetinaFactor());
_w = _current.width() / cIntRetinaFactor(); _w = _current.width() / cIntRetinaFactor();
@ -945,10 +951,10 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) {
} }
_x = (width() - _w) / 2; _x = (width() - _w) / 2;
_y = (height() - _h) / 2; _y = (height() - _h) / 2;
if (HistoryForwarded *fwd = dynamic_cast<HistoryForwarded*>(item)) { if (HistoryForwarded *fwd = item->toHistoryForwarded()) {
_from = fwd->fromForwarded()->asUser(); _from = fwd->fromForwarded();
} else { } else {
_from = item->from()->asUser(); _from = item->from();
} }
_full = 1; _full = 1;
updateControls(); updateControls();
@ -1008,7 +1014,7 @@ void MediaView::paintEvent(QPaintEvent *e) {
QRect imgRect(_x, _y, _w, _h); QRect imgRect(_x, _y, _w, _h);
const QPixmap *toDraw = _currentGif.isNull() ? &_current : &_currentGif.current(_currentGif.w, _currentGif.h, false); const QPixmap *toDraw = _currentGif.isNull() ? &_current : &_currentGif.current(_currentGif.w, _currentGif.h, false);
if (imgRect.intersects(r)) { if (imgRect.intersects(r)) {
if (toDraw->hasAlpha() && (!_doc || !_doc->sticker || _doc->sticker->img->isNull())) { if (toDraw->hasAlpha() && (!_doc || !_doc->sticker() || _doc->sticker()->img->isNull())) {
p.fillRect(imgRect, _transparentBrush); p.fillRect(imgRect, _transparentBrush);
} }
if (_zoom) { if (_zoom) {
@ -1074,17 +1080,19 @@ void MediaView::paintEvent(QPaintEvent *e) {
} }
} }
} }
} else if (_doc) { } else {
if (_docRect.intersects(r)) { if (_docRect.intersects(r)) {
p.fillRect(_docRect, st::mvDocBg->b); p.fillRect(_docRect, st::mvDocBg->b);
if (_docIconRect.intersects(r)) { if (_docIconRect.intersects(r)) {
icon = true; icon = true;
if (_doc->thumb->isNull()) { if (!_doc || _doc->thumb->isNull()) {
if (!_doc->already().isEmpty() && (!_docRadialStart || _docRadialOpacity < 1)) { if ((!_doc || !_doc->already().isEmpty()) && (!_docRadialStart || _docRadialOpacity < 1)) {
p.drawPixmap(_docIconRect.topLeft(), App::sprite(), _docIcon); p.drawPixmap(_docIconRect.topLeft(), App::sprite(), _docIcon);
p.setPen(st::mvDocExtColor->p); p.setPen(st::mvDocExtColor->p);
p.setFont(st::mvDocExtFont->f); p.setFont(st::mvDocExtFont->f);
if (!_docExt.isEmpty()) {
p.drawText(_docIconRect.x() + (_docIconRect.width() - _docExtWidth) / 2, _docIconRect.y() + st::mvDocExtTop + st::mvDocExtFont->ascent, _docExt); p.drawText(_docIconRect.x() + (_docIconRect.width() - _docExtWidth) / 2, _docIconRect.y() + st::mvDocExtTop + st::mvDocExtFont->ascent, _docExt);
}
} else { } else {
p.fillRect(_docIconRect, _docIconColor->b); p.fillRect(_docIconRect, _docIconColor->b);
} }
@ -1094,7 +1102,7 @@ void MediaView::paintEvent(QPaintEvent *e) {
} }
float64 o = overLevel(OverIcon); float64 o = overLevel(OverIcon);
if (_docRadialStart > 0) { if (_doc && _docRadialStart > 0) {
if (_doc->already().isEmpty() && _docRadialOpacity < 1) { if (_doc->already().isEmpty() && _docRadialOpacity < 1) {
p.setOpacity((o * 1. + (1 - o) * st::radialDownloadOpacity) * (1 - _docRadialOpacity)); p.setOpacity((o * 1. + (1 - o) * st::radialDownloadOpacity) * (1 - _docRadialOpacity));
p.drawSpriteCenter(_docIconRect, st::radialDownload); p.drawSpriteCenter(_docIconRect, st::radialDownload);
@ -1121,7 +1129,7 @@ void MediaView::paintEvent(QPaintEvent *e) {
p.setOpacity(1); p.setOpacity(1);
p.setRenderHint(QPainter::HighQualityAntialiasing, false); p.setRenderHint(QPainter::HighQualityAntialiasing, false);
} else if (_doc->already().isEmpty()) { } else if (_doc && _doc->already().isEmpty()) {
p.setOpacity((o * 1. + (1 - o) * st::radialDownloadOpacity)); p.setOpacity((o * 1. + (1 - o) * st::radialDownloadOpacity));
p.drawSpriteCenter(_docIconRect, st::radialDownload); p.drawSpriteCenter(_docIconRect, st::radialDownload);
} }
@ -1191,7 +1199,7 @@ void MediaView::paintEvent(QPaintEvent *e) {
} }
// save button // save button
if (_saveNavIcon.intersects(r)) { if (_saveVisible && _saveNavIcon.intersects(r)) {
float64 o = overLevel(OverSave); float64 o = overLevel(OverSave);
p.setOpacity((o * st::mvIconOverOpacity + (1 - o) * st::mvIconOpacity) * co); p.setOpacity((o * st::mvIconOverOpacity + (1 - o) * st::mvIconOpacity) * co);
p.drawPixmap(_saveNavIcon.topLeft(), App::sprite(), st::mvSave); p.drawPixmap(_saveNavIcon.topLeft(), App::sprite(), st::mvSave);
@ -1262,11 +1270,6 @@ void MediaView::paintEvent(QPaintEvent *e) {
} }
} }
} }
// static uint64 t = getms();
// uint64 t2 = getms();
// LOG(("paint: %1, wait: %2, name: %3, icon: %4").arg(t2 - ms).arg(t2 - t).arg(logBool(name)).arg(logBool(icon)));
// t = t2;
} }
void MediaView::keyPressEvent(QKeyEvent *e) { void MediaView::keyPressEvent(QKeyEvent *e) {
@ -1370,7 +1373,7 @@ void MediaView::keyPressEvent(QKeyEvent *e) {
} }
void MediaView::moveToNext(int32 delta) { void MediaView::moveToNext(int32 delta) {
if (_index < 0 || (!_photo && !_doc) || (_overview == OverviewCount && !_user)) return; if (_index < 0 || (_history && _overview != OverviewPhotos && _overview != OverviewDocuments) || (_overview == OverviewCount && !_user)) return;
int32 newIndex = _index + delta; int32 newIndex = _index + delta;
if (_history && _overview != OverviewCount) { if (_history && _overview != OverviewCount) {
@ -1378,11 +1381,16 @@ void MediaView::moveToNext(int32 delta) {
_index = newIndex; _index = newIndex;
if (HistoryItem *item = App::histItemById(_history->_overview[_overview][_index])) { if (HistoryItem *item = App::histItemById(_history->_overview[_overview][_index])) {
_msgid = item->id; _msgid = item->id;
if (item->getMedia()) {
switch (item->getMedia()->type()) { switch (item->getMedia()->type()) {
case MediaTypePhoto: displayPhoto(static_cast<HistoryPhoto*>(item->getMedia())->photo(), item); preloadData(delta); break; case MediaTypePhoto: displayPhoto(static_cast<HistoryPhoto*>(item->getMedia())->photo(), item); preloadData(delta); break;
case MediaTypeDocument: displayDocument(static_cast<HistoryDocument*>(item->getMedia())->document(), item); preloadData(delta); break; case MediaTypeDocument: displayDocument(static_cast<HistoryDocument*>(item->getMedia())->document(), item); preloadData(delta); break;
case MediaTypeSticker: displayDocument(static_cast<HistorySticker*>(item->getMedia())->document(), item); preloadData(delta); break; case MediaTypeSticker: displayDocument(static_cast<HistorySticker*>(item->getMedia())->document(), item); preloadData(delta); break;
} }
} else {
displayDocument(0, item);
preloadData(delta);
}
} }
} }
if (delta < 0 && _index < MediaOverviewStartPerPage) { if (delta < 0 && _index < MediaOverviewStartPerPage) {
@ -1413,7 +1421,7 @@ void MediaView::preloadData(int32 delta) {
switch (media->type()) { switch (media->type()) {
case MediaTypePhoto: static_cast<HistoryPhoto*>(media)->photo()->full->load(); break; case MediaTypePhoto: static_cast<HistoryPhoto*>(media)->photo()->full->load(); break;
case MediaTypeDocument: static_cast<HistoryDocument*>(media)->document()->thumb->load(); break; case MediaTypeDocument: static_cast<HistoryDocument*>(media)->document()->thumb->load(); break;
case MediaTypeSticker: static_cast<HistorySticker*>(media)->document()->sticker->img->load(); break; case MediaTypeSticker: static_cast<HistorySticker*>(media)->document()->sticker()->img->load(); break;
} }
} }
} }
@ -1826,7 +1834,7 @@ void MediaView::findCurrent() {
} }
} }
if (_history->_overviewCount[_overview] < 0) { if (_history->_overviewCount[_overview] < 0 || (!_index && _history->_overviewCount[_overview] > 0)) {
loadBack(); loadBack();
} }
} }
@ -1838,7 +1846,7 @@ void MediaView::loadBack() {
if (App::main()) App::main()->loadMediaBack(_history->peer, _overview); if (App::main()) App::main()->loadMediaBack(_history->peer, _overview);
} else if (_user && _user->photosCount != 0) { } else if (_user && _user->photosCount != 0) {
int32 limit = (_index < MediaOverviewStartPerPage && _user->photos.size() > MediaOverviewStartPerPage) ? SearchPerPage : MediaOverviewStartPerPage; int32 limit = (_index < MediaOverviewStartPerPage && _user->photos.size() > MediaOverviewStartPerPage) ? SearchPerPage : MediaOverviewStartPerPage;
_loadRequest = MTP::send(MTPphotos_GetUserPhotos(_user->inputUser, MTP_int(_user->photos.size()), MTP_int(0), MTP_int(limit)), rpcDone(&MediaView::userPhotosLoaded, _user)); _loadRequest = MTP::send(MTPphotos_GetUserPhotos(_user->inputUser, MTP_int(_user->photos.size()), MTP_long(0), MTP_int(limit)), rpcDone(&MediaView::userPhotosLoaded, _user));
} }
} }
@ -1875,7 +1883,7 @@ void MediaView::userPhotosLoaded(UserData *u, const MTPphotos_Photos &photos, mt
photo->thumb->load(); photo->thumb->load();
u->photos.push_back(photo); u->photos.push_back(photo);
} }
if (App::wnd()) App::wnd()->mediaOverviewUpdated(u); if (App::wnd()) App::wnd()->mediaOverviewUpdated(u, OverviewCount);
} }
void MediaView::updateHeader() { void MediaView::updateHeader() {
@ -1911,7 +1919,7 @@ void MediaView::updateHeader() {
hwidth = width() / 3; hwidth = width() / 3;
_headerText = st::mvThickFont->m.elidedText(_headerText, Qt::ElideMiddle, hwidth); _headerText = st::mvThickFont->m.elidedText(_headerText, Qt::ElideMiddle, hwidth);
} }
_headerNav = rtlrect(st::mvTextLeft, height() - st::mvHeaderTop, hwidth, st::mvThickFont->height, width()); _headerNav = myrtlrect(st::mvTextLeft, height() - st::mvHeaderTop, hwidth, st::mvThickFont->height);
} }
// //
//void MediaView::updatePolaroid() { //void MediaView::updatePolaroid() {

View file

@ -55,7 +55,7 @@ public:
updateOver(mapFromGlobal(QCursor::pos())); updateOver(mapFromGlobal(QCursor::pos()));
} }
void mediaOverviewUpdated(PeerData *peer); void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type);
void documentUpdated(DocumentData *doc); void documentUpdated(DocumentData *doc);
void changingMsgId(HistoryItem *row, MsgId newId); void changingMsgId(HistoryItem *row, MsgId newId);
void updateDocSize(); void updateDocSize();

View file

@ -150,6 +150,13 @@ with open('scheme.tl') as f:
print('Bad param found: "' + param + '" in line: ' + line); print('Bad param found: "' + param + '" in line: ' + line);
continue; continue;
ptype = pmasktype.group(3); ptype = pmasktype.group(3);
if (ptype.find('<') >= 0):
templ = re.match(r'^([vV]ector<)([A-Za-z0-9\._]+)>$', ptype);
if (templ):
ptype = templ.group(1) + 'MTP' + templ.group(2).replace('.', '_') + '>';
else:
print('Bad template type: ' + ptype);
continue;
if (not pname in conditions): if (not pname in conditions):
conditionsList.append(pname); conditionsList.append(pname);
conditions[pname] = pmasktype.group(2); conditions[pname] = pmasktype.group(2);

View file

@ -606,7 +606,7 @@ void MTPabstractTcpConnection::socketRead() {
} }
MTPautoConnection::MTPautoConnection(QThread *thread) : status(WaitingBoth), MTPautoConnection::MTPautoConnection(QThread *thread) : status(WaitingBoth),
tcpNonce(MTP::nonce<MTPint128>()), httpNonce(MTP::nonce<MTPint128>()), _tcpTimeout(MTPMinReceiveDelay) { tcpNonce(MTP::nonce<MTPint128>()), httpNonce(MTP::nonce<MTPint128>()), _tcpTimeout(MTPMinReceiveDelay), _flags(0) {
moveToThread(thread); moveToThread(thread);
manager.moveToThread(thread); manager.moveToThread(thread);
@ -615,6 +615,7 @@ tcpNonce(MTP::nonce<MTPint128>()), httpNonce(MTP::nonce<MTPint128>()), _tcpTimeo
httpStartTimer.moveToThread(thread); httpStartTimer.moveToThread(thread);
httpStartTimer.setSingleShot(true); httpStartTimer.setSingleShot(true);
connect(&httpStartTimer, SIGNAL(timeout()), this, SLOT(onHttpStart())); connect(&httpStartTimer, SIGNAL(timeout()), this, SLOT(onHttpStart()));
tcpTimeoutTimer.moveToThread(thread); tcpTimeoutTimer.moveToThread(thread);
tcpTimeoutTimer.setSingleShot(true); tcpTimeoutTimer.setSingleShot(true);
connect(&tcpTimeoutTimer, SIGNAL(timeout()), this, SLOT(onTcpTimeoutTimer())); connect(&tcpTimeoutTimer, SIGNAL(timeout()), this, SLOT(onTcpTimeoutTimer()));
@ -628,7 +629,7 @@ tcpNonce(MTP::nonce<MTPint128>()), httpNonce(MTP::nonce<MTPint128>()), _tcpTimeo
void MTPautoConnection::onHttpStart() { void MTPautoConnection::onHttpStart() {
if (status == HttpReady) { if (status == HttpReady) {
DEBUG_LOG(("Connection Info: Http-transport chosen by timer")); DEBUG_LOG(("Connection Info: HTTP/%1-transport chosen by timer").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4"));
status = UsingHttp; status = UsingHttp;
sock.disconnectFromHost(); sock.disconnectFromHost();
emit connected(); emit connected();
@ -639,7 +640,7 @@ void MTPautoConnection::onSocketConnected() {
if (status == HttpReady || status == WaitingBoth || status == WaitingTcp) { if (status == HttpReady || status == WaitingBoth || status == WaitingTcp) {
mtpBuffer buffer(_preparePQFake(tcpNonce)); mtpBuffer buffer(_preparePQFake(tcpNonce));
DEBUG_LOG(("Connection Info: sending fake req_pq through tcp transport")); DEBUG_LOG(("Connection Info: sending fake req_pq through TCP/%1 transport").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4"));
if (_tcpTimeout < 0) _tcpTimeout = -_tcpTimeout; if (_tcpTimeout < 0) _tcpTimeout = -_tcpTimeout;
tcpTimeoutTimer.start(_tcpTimeout); tcpTimeoutTimer.start(_tcpTimeout);
@ -677,7 +678,7 @@ void MTPautoConnection::onSocketDisconnected() {
} else if (status == WaitingTcp || status == UsingTcp) { } else if (status == WaitingTcp || status == UsingTcp) {
emit disconnected(); emit disconnected();
} else if (status == HttpReady) { } else if (status == HttpReady) {
DEBUG_LOG(("Connection Info: Http-transport chosen by socket disconnect")); DEBUG_LOG(("Connection Info: HTTP/%1-transport chosen by socket disconnect").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4"));
status = UsingHttp; status = UsingHttp;
emit connected(); emit connected();
} }
@ -724,6 +725,7 @@ void MTPautoConnection::httpSend(mtpBuffer &buffer) {
void MTPautoConnection::disconnectFromServer() { void MTPautoConnection::disconnectFromServer() {
if (status == FinishedWork) return; if (status == FinishedWork) return;
status = FinishedWork;
Requests copy = requests; Requests copy = requests;
requests.clear(); requests.clear();
@ -740,7 +742,6 @@ void MTPautoConnection::disconnectFromServer() {
sock.close(); sock.close();
httpStartTimer.stop(); httpStartTimer.stop();
status = FinishedWork;
} }
void MTPautoConnection::connectToServer(const QString &addr, int32 port, int32 flags) { void MTPautoConnection::connectToServer(const QString &addr, int32 port, int32 flags) {
@ -750,19 +751,20 @@ void MTPautoConnection::connectToServer(const QString &addr, int32 port, int32 f
_addr = addr; _addr = addr;
_port = port; _port = port;
_flags = flags;
connect(&sock, SIGNAL(readyRead()), this, SLOT(socketRead())); connect(&sock, SIGNAL(readyRead()), this, SLOT(socketRead()));
sock.connectToHost(QHostAddress(_addr), _port); sock.connectToHost(QHostAddress(_addr), _port);
mtpBuffer buffer(_preparePQFake(httpNonce)); mtpBuffer buffer(_preparePQFake(httpNonce));
DEBUG_LOG(("Connection Info: sending fake req_pq through http transport")); DEBUG_LOG(("Connection Info: sending fake req_pq through HTTP/%1 transport").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4"));
httpSend(buffer); httpSend(buffer);
} }
bool MTPautoConnection::isConnected() { bool MTPautoConnection::isConnected() const {
return status != FinishedWork && !address.isEmpty(); return (status == UsingTcp) || (status == UsingHttp);
} }
void MTPautoConnection::requestFinished(QNetworkReply *reply) { void MTPautoConnection::requestFinished(QNetworkReply *reply) {
@ -792,13 +794,14 @@ void MTPautoConnection::requestFinished(QNetworkReply *reply) {
status = HttpReady; status = HttpReady;
httpStartTimer.start(MTPTcpConnectionWaitTimeout); httpStartTimer.start(MTPTcpConnectionWaitTimeout);
} else { } else {
DEBUG_LOG(("Connection Info: Http-transport chosen by pq-response, awaited")); DEBUG_LOG(("Connection Info: HTTP/%1-transport chosen by pq-response, awaited").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4"));
status = UsingHttp; status = UsingHttp;
sock.disconnectFromHost(); sock.disconnectFromHost();
emit connected(); emit connected();
} }
} }
} catch (Exception &e) { } catch (Exception &e) {
DEBUG_LOG(("Connection Error: exception in parsing HTTP fake pq-responce, %1").arg(e.what()));
if (status == WaitingBoth) { if (status == WaitingBoth) {
status = WaitingTcp; status = WaitingTcp;
} else { } else {
@ -834,7 +837,7 @@ void MTPautoConnection::socketPacket(mtpPrime *packet, uint32 size) {
status = WaitingHttp; status = WaitingHttp;
sock.disconnectFromHost(); sock.disconnectFromHost();
} else if (status == HttpReady) { } else if (status == HttpReady) {
DEBUG_LOG(("Connection Info: Http-transport chosen by bad tcp response, ready")); DEBUG_LOG(("Connection Info: HTTP/%1-transport chosen by bad tcp response, ready").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4"));
status = UsingHttp; status = UsingHttp;
sock.disconnectFromHost(); sock.disconnectFromHost();
emit connected(); emit connected();
@ -853,16 +856,17 @@ void MTPautoConnection::socketPacket(mtpPrime *packet, uint32 size) {
MTPResPQ res_pq = _readPQFakeReply(data); MTPResPQ res_pq = _readPQFakeReply(data);
const MTPDresPQ &res_pq_data(res_pq.c_resPQ()); const MTPDresPQ &res_pq_data(res_pq.c_resPQ());
if (res_pq_data.vnonce == tcpNonce) { if (res_pq_data.vnonce == tcpNonce) {
DEBUG_LOG(("Connection Info: Tcp-transport chosen by pq-response")); DEBUG_LOG(("Connection Info: TCP/%1-transport chosen by pq-response").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4"));
status = UsingTcp; status = UsingTcp;
emit connected(); emit connected();
} }
} catch (Exception &e) { } catch (Exception &e) {
DEBUG_LOG(("Connection Error: exception in parsing TCP fake pq-responce, %1").arg(e.what()));
if (status == WaitingBoth) { if (status == WaitingBoth) {
status = WaitingHttp; status = WaitingHttp;
sock.disconnectFromHost(); sock.disconnectFromHost();
} else if (status == HttpReady) { } else if (status == HttpReady) {
DEBUG_LOG(("Connection Info: Http-transport chosen by bad tcp response, awaited")); DEBUG_LOG(("Connection Info: HTTP/%1-transport chosen by bad tcp response, awaited").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4"));
status = UsingHttp; status = UsingHttp;
sock.disconnectFromHost(); sock.disconnectFromHost();
emit connected(); emit connected();
@ -902,7 +906,7 @@ void MTPautoConnection::socketError(QAbstractSocket::SocketError e) {
if (status == WaitingBoth) { if (status == WaitingBoth) {
status = WaitingHttp; status = WaitingHttp;
} else if (status == HttpReady) { } else if (status == HttpReady) {
DEBUG_LOG(("Connection Info: Http-transport chosen by tcp error, ready")); DEBUG_LOG(("Connection Info: HTTP/%1-transport chosen by tcp error, ready").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4"));
status = UsingHttp; status = UsingHttp;
emit connected(); emit connected();
} else if (status == WaitingTcp || status == UsingTcp) { } else if (status == WaitingTcp || status == UsingTcp) {
@ -912,16 +916,64 @@ void MTPautoConnection::socketError(QAbstractSocket::SocketError e) {
} }
} }
MTPtcpConnection::MTPtcpConnection(QThread *thread) { MTPtcpConnection::MTPtcpConnection(QThread *thread) : status(WaitingTcp),
tcpNonce(MTP::nonce<MTPint128>()), _tcpTimeout(MTPMinReceiveDelay), _flags(0) {
moveToThread(thread); moveToThread(thread);
tcpTimeoutTimer.moveToThread(thread);
tcpTimeoutTimer.setSingleShot(true);
connect(&tcpTimeoutTimer, SIGNAL(timeout()), this, SLOT(onTcpTimeoutTimer()));
sock.moveToThread(thread); sock.moveToThread(thread);
App::setProxySettings(sock); App::setProxySettings(sock);
connect(&sock, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError(QAbstractSocket::SocketError))); connect(&sock, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError(QAbstractSocket::SocketError)));
connect(&sock, SIGNAL(connected()), this, SIGNAL(connected())); connect(&sock, SIGNAL(connected()), this, SLOT(onSocketConnected()));
connect(&sock, SIGNAL(disconnected()), this, SIGNAL(disconnected())); connect(&sock, SIGNAL(disconnected()), this, SLOT(onSocketDisconnected()));
}
void MTPtcpConnection::onSocketConnected() {
if (status == WaitingTcp) {
mtpBuffer buffer(_preparePQFake(tcpNonce));
DEBUG_LOG(("Connection Info: sending fake req_pq through TCP/%1 transport").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4"));
if (_tcpTimeout < 0) _tcpTimeout = -_tcpTimeout;
tcpTimeoutTimer.start(_tcpTimeout);
sendData(buffer);
}
}
void MTPtcpConnection::onTcpTimeoutTimer() {
if (status == WaitingTcp) {
if (_tcpTimeout < MTPMaxReceiveDelay) _tcpTimeout *= 2;
_tcpTimeout = -_tcpTimeout;
QAbstractSocket::SocketState state = sock.state();
if (state == QAbstractSocket::ConnectedState || state == QAbstractSocket::ConnectingState || state == QAbstractSocket::HostLookupState) {
sock.disconnectFromHost();
} else if (state != QAbstractSocket::ClosingState) {
sock.connectToHost(QHostAddress(_addr), _port);
}
}
}
void MTPtcpConnection::onSocketDisconnected() {
if (_tcpTimeout < 0) {
_tcpTimeout = -_tcpTimeout;
if (status == WaitingTcp) {
sock.connectToHost(QHostAddress(_addr), _port);
return;
}
}
if (status == WaitingTcp || status == UsingTcp) {
emit disconnected();
}
} }
void MTPtcpConnection::sendData(mtpBuffer &buffer) { void MTPtcpConnection::sendData(mtpBuffer &buffer) {
if (status == FinishedWork) return;
if (buffer.size() < 3) { if (buffer.size() < 3) {
LOG(("TCP Error: writing bad packet, len = %1").arg(buffer.size() * sizeof(mtpPrime))); LOG(("TCP Error: writing bad packet, len = %1").arg(buffer.size() * sizeof(mtpPrime)));
TCP_LOG(("TCP Error: bad packet %1").arg(mb(&buffer[0], buffer.size() * sizeof(mtpPrime)).str())); TCP_LOG(("TCP Error: bad packet %1").arg(mb(&buffer[0], buffer.size() * sizeof(mtpPrime)).str()));
@ -940,28 +992,51 @@ void MTPtcpConnection::sendData(mtpBuffer &buffer) {
} }
void MTPtcpConnection::disconnectFromServer() { void MTPtcpConnection::disconnectFromServer() {
if (status == FinishedWork) return;
status = FinishedWork;
disconnect(&sock, SIGNAL(readyRead()), 0, 0); disconnect(&sock, SIGNAL(readyRead()), 0, 0);
sock.close(); sock.close();
} }
void MTPtcpConnection::connectToServer(const QString &addr, int32 port, int32 flags) { void MTPtcpConnection::connectToServer(const QString &addr, int32 port, int32 flags) {
_addr = addr;
_port = port;
_flags = flags;
connect(&sock, SIGNAL(readyRead()), this, SLOT(socketRead())); connect(&sock, SIGNAL(readyRead()), this, SLOT(socketRead()));
sock.connectToHost(QHostAddress(addr), port); sock.connectToHost(QHostAddress(_addr), _port);
} }
void MTPtcpConnection::socketPacket(mtpPrime *packet, uint32 size) { void MTPtcpConnection::socketPacket(mtpPrime *packet, uint32 size) {
if (status == FinishedWork) return;
mtpBuffer data = _handleTcpResponse(packet, size); mtpBuffer data = _handleTcpResponse(packet, size);
if (data.size() == 1) { if (data.size() == 1) {
bool mayBeBadKey = (data[0] == -404) && _sentEncrypted; bool mayBeBadKey = (data[0] == -404) && _sentEncrypted;
emit error(mayBeBadKey); emit error(mayBeBadKey);
} } else if (status == UsingTcp) {
receivedQueue.push_back(data); receivedQueue.push_back(data);
emit receivedData(); emit receivedData();
} else if (status == WaitingTcp) {
tcpTimeoutTimer.stop();
try {
MTPResPQ res_pq = _readPQFakeReply(data);
const MTPDresPQ &res_pq_data(res_pq.c_resPQ());
if (res_pq_data.vnonce == tcpNonce) {
DEBUG_LOG(("Connection Info: TCP/%1-transport chosen by pq-response").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4"));
status = UsingTcp;
emit connected();
}
} catch (Exception &e) {
DEBUG_LOG(("Connection Error: exception in parsing TCP fake pq-responce, %1").arg(e.what()));
emit error();
}
}
} }
bool MTPtcpConnection::isConnected() { bool MTPtcpConnection::isConnected() const {
return sock.state() == QAbstractSocket::ConnectedState; return (status == UsingTcp);
} }
int32 MTPtcpConnection::debugState() const { int32 MTPtcpConnection::debugState() const {
@ -969,21 +1044,25 @@ int32 MTPtcpConnection::debugState() const {
} }
QString MTPtcpConnection::transport() const { QString MTPtcpConnection::transport() const {
return qsl("TCP"); return isConnected() ? qsl("TCP") : QString();
} }
void MTPtcpConnection::socketError(QAbstractSocket::SocketError e) { void MTPtcpConnection::socketError(QAbstractSocket::SocketError e) {
if (status == FinishedWork) return;
_handleTcpError(e, sock); _handleTcpError(e, sock);
emit error(); emit error();
} }
MTPhttpConnection::MTPhttpConnection(QThread *thread) { MTPhttpConnection::MTPhttpConnection(QThread *thread) : status(WaitingHttp), httpNonce(MTP::nonce<MTPint128>()), _flags(0) {
moveToThread(thread); moveToThread(thread);
manager.moveToThread(thread); manager.moveToThread(thread);
App::setProxySettings(manager); App::setProxySettings(manager);
} }
void MTPhttpConnection::sendData(mtpBuffer &buffer) { void MTPhttpConnection::sendData(mtpBuffer &buffer) {
if (status == FinishedWork) return;
if (buffer.size() < 3) { if (buffer.size() < 3) {
LOG(("TCP Error: writing bad packet, len = %1").arg(buffer.size() * sizeof(mtpPrime))); LOG(("TCP Error: writing bad packet, len = %1").arg(buffer.size() * sizeof(mtpPrime)));
TCP_LOG(("TCP Error: bad packet %1").arg(mb(&buffer[0], buffer.size() * sizeof(mtpPrime)).str())); TCP_LOG(("TCP Error: bad packet %1").arg(mb(&buffer[0], buffer.size() * sizeof(mtpPrime)).str()));
@ -1002,6 +1081,9 @@ void MTPhttpConnection::sendData(mtpBuffer &buffer) {
} }
void MTPhttpConnection::disconnectFromServer() { void MTPhttpConnection::disconnectFromServer() {
if (status == FinishedWork) return;
status = FinishedWork;
Requests copy = requests; Requests copy = requests;
requests.clear(); requests.clear();
for (Requests::const_iterator i = copy.cbegin(), e = copy.cend(); i != e; ++i) { for (Requests::const_iterator i = copy.cbegin(), e = copy.cend(); i != e; ++i) {
@ -1018,14 +1100,23 @@ void MTPhttpConnection::connectToServer(const QString &addr, int32 p, int32 flag
address = QUrl(((flags & MTPDdcOption_flag_ipv6) ? qsl("http://[%1]:%2/api") : qsl("http://%1:%2/api")).arg(addr).arg(80));//not p - always 80 port for http transport address = QUrl(((flags & MTPDdcOption_flag_ipv6) ? qsl("http://[%1]:%2/api") : qsl("http://%1:%2/api")).arg(addr).arg(80));//not p - always 80 port for http transport
TCP_LOG(("HTTP Info: address is %1").arg(address.toDisplayString())); TCP_LOG(("HTTP Info: address is %1").arg(address.toDisplayString()));
connect(&manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*))); connect(&manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*)));
emit connected();
_flags = flags;
mtpBuffer buffer(_preparePQFake(httpNonce));
DEBUG_LOG(("Connection Info: sending fake req_pq through HTTP/%1 transport").arg((flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4"));
sendData(buffer);
} }
bool MTPhttpConnection::isConnected() { bool MTPhttpConnection::isConnected() const {
return !address.isEmpty(); return (status == UsingHttp);
} }
void MTPhttpConnection::requestFinished(QNetworkReply *reply) { void MTPhttpConnection::requestFinished(QNetworkReply *reply) {
if (status == FinishedWork) return;
reply->deleteLater(); reply->deleteLater();
if (reply->error() == QNetworkReply::NoError) { if (reply->error() == QNetworkReply::NoError) {
requests.remove(reply); requests.remove(reply);
@ -1034,8 +1125,23 @@ void MTPhttpConnection::requestFinished(QNetworkReply *reply) {
if (data.size() == 1) { if (data.size() == 1) {
emit error(); emit error();
} else if (!data.isEmpty()) { } else if (!data.isEmpty()) {
if (status == UsingHttp) {
receivedQueue.push_back(data); receivedQueue.push_back(data);
emit receivedData(); emit receivedData();
} else {
try {
MTPResPQ res_pq = _readPQFakeReply(data);
const MTPDresPQ &res_pq_data(res_pq.c_resPQ());
if (res_pq_data.vnonce == httpNonce) {
DEBUG_LOG(("Connection Info: HTTP/%1-transport connected by pq-response").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4"));
status = UsingHttp;
emit connected();
}
} catch (Exception &e) {
DEBUG_LOG(("Connection Error: exception in parsing HTTP fake pq-responce, %1").arg(e.what()));
emit error();
}
}
} }
} else { } else {
if (!requests.remove(reply)) { if (!requests.remove(reply)) {
@ -1061,12 +1167,17 @@ int32 MTPhttpConnection::debugState() const {
} }
QString MTPhttpConnection::transport() const { QString MTPhttpConnection::transport() const {
if (status == UsingHttp) {
return qsl("HTTP"); return qsl("HTTP");
} else {
return QString();
}
} }
void MTProtoConnectionPrivate::createConn(bool createIPv4, bool createIPv6) { void MTProtoConnectionPrivate::createConn(bool createIPv4, bool createIPv6) {
destroyConn(); destroyConn();
if (createIPv4) { if (createIPv4) {
QWriteLocker lock(&stateConnMutex);
if (cConnectionType() == dbictAuto) { if (cConnectionType() == dbictAuto) {
_conn4 = new MTPautoConnection(thread()); _conn4 = new MTPautoConnection(thread());
} else if (cConnectionType() == dbictTcpProxy) { } else if (cConnectionType() == dbictTcpProxy) {
@ -1078,6 +1189,7 @@ void MTProtoConnectionPrivate::createConn(bool createIPv4, bool createIPv6) {
connect(_conn4, SIGNAL(receivedSome()), this, SLOT(onReceivedSome())); connect(_conn4, SIGNAL(receivedSome()), this, SLOT(onReceivedSome()));
} }
if (createIPv6) { if (createIPv6) {
QWriteLocker lock(&stateConnMutex);
if (cConnectionType() == dbictAuto) { if (cConnectionType() == dbictAuto) {
_conn6 = new MTPautoConnection(thread()); _conn6 = new MTPautoConnection(thread());
} else if (cConnectionType() == dbictTcpProxy) { } else if (cConnectionType() == dbictTcpProxy) {
@ -1098,15 +1210,24 @@ void MTProtoConnectionPrivate::createConn(bool createIPv4, bool createIPv6) {
void MTProtoConnectionPrivate::destroyConn(MTPabstractConnection **conn) { void MTProtoConnectionPrivate::destroyConn(MTPabstractConnection **conn) {
if (conn) { if (conn) {
MTPabstractConnection *toDisconnect = 0;
{
QWriteLocker lock(&stateConnMutex);
if (*conn) { if (*conn) {
toDisconnect = *conn;
disconnect(*conn, SIGNAL(connected()), 0, 0);
disconnect(*conn, SIGNAL(disconnected()), 0, 0); disconnect(*conn, SIGNAL(disconnected()), 0, 0);
disconnect(*conn, SIGNAL(error(bool)), 0, 0);
disconnect(*conn, SIGNAL(receivedData()), 0, 0); disconnect(*conn, SIGNAL(receivedData()), 0, 0);
disconnect(*conn, SIGNAL(receivedSome()), 0, 0); disconnect(*conn, SIGNAL(receivedSome()), 0, 0);
(*conn)->disconnectFromServer();
(*conn)->deleteLater();
*conn = 0; *conn = 0;
} }
}
if (toDisconnect) {
toDisconnect->disconnectFromServer();
toDisconnect->deleteLater();
}
} else { } else {
destroyConn(&_conn4); destroyConn(&_conn4);
destroyConn(&_conn6); destroyConn(&_conn6);
@ -1132,6 +1253,7 @@ MTProtoConnectionPrivate::MTProtoConnectionPrivate(QThread *thread, MTProtoConne
, _pingMsgId(0) , _pingMsgId(0)
, restarted(false) , restarted(false)
, keyId(0) , keyId(0)
// , sessionDataMutex(QReadWriteLock::Recursive)
, sessionData(data) , sessionData(data)
, myKeyLock(false) , myKeyLock(false)
, authKeyData(0) , authKeyData(0)
@ -1200,7 +1322,7 @@ int32 MTProtoConnectionPrivate::getDC() const {
} }
int32 MTProtoConnectionPrivate::getState() const { int32 MTProtoConnectionPrivate::getState() const {
QReadLocker lock(&stateMutex); QReadLocker lock(&stateConnMutex);
int32 result = _state; int32 result = _state;
if (_state < 0) { if (_state < 0) {
if (retryTimer.isActive()) { if (retryTimer.isActive()) {
@ -1214,18 +1336,21 @@ int32 MTProtoConnectionPrivate::getState() const {
} }
QString MTProtoConnectionPrivate::transport() const { QString MTProtoConnectionPrivate::transport() const {
if ((!_conn4 && !_conn6) || _state < 0) { QReadLocker lock(&stateConnMutex);
if ((!_conn4 && !_conn6) || (_conn4 && _conn6) || (_state < 0)) {
return QString(); return QString();
} }
return (_conn4 ? _conn4 : _conn6)->transport(); QString result = (_conn4 ? _conn4 : _conn6)->transport();
if (!result.isEmpty() && cTryIPv6()) result += (_conn4 ? "/IPv4" : "/IPv6");
return result;
} }
bool MTProtoConnectionPrivate::setState(int32 state, int32 ifState) { bool MTProtoConnectionPrivate::setState(int32 state, int32 ifState) {
if (ifState != MTProtoConnection::UpdateAlways) { if (ifState != MTProtoConnection::UpdateAlways) {
QReadLocker lock(&stateMutex); QReadLocker lock(&stateConnMutex);
if (_state != ifState) return false; if (_state != ifState) return false;
} }
QWriteLocker lock(&stateMutex); QWriteLocker lock(&stateConnMutex);
if (_state == state) return false; if (_state == state) return false;
_state = state; _state = state;
if (state < 0) { if (state < 0) {
@ -1732,7 +1857,7 @@ void MTProtoConnectionPrivate::tryToSend() {
} }
} }
mtpRequestData::padding(toSendRequest); mtpRequestData::padding(toSendRequest);
sendRequest(toSendRequest, needAnyResponse); sendRequest(toSendRequest, needAnyResponse, lockFinished);
} }
void MTProtoConnectionPrivate::retryByTimer() { void MTProtoConnectionPrivate::retryByTimer() {
@ -1784,15 +1909,15 @@ void MTProtoConnectionPrivate::socketStart(bool afterConfig) {
port6 = dcIndex6->port; port6 = dcIndex6->port;
} }
} }
bool noIPv4 = (!port4 || ip4.empty()), noIPv6 = (!port6 || ip6.empty()); bool noIPv4 = (!port4 || ip4.empty()), noIPv6 = (!cTryIPv6() || !port6 || ip6.empty());
if (noIPv4 && noIPv6) { if (noIPv4 && noIPv6) {
if (afterConfig) { if (afterConfig) {
if (noIPv4) LOG(("MTP Error: DC %1 options for IPv4 not found right after config load!").arg(dc)); if (noIPv4) LOG(("MTP Error: DC %1 options for IPv4 not found right after config load!").arg(dc));
if (noIPv6) LOG(("MTP Error: DC %1 options for IPv6 not found right after config load!").arg(dc)); if (cTryIPv6() && noIPv6) LOG(("MTP Error: DC %1 options for IPv6 not found right after config load!").arg(dc));
return restart(); return restart();
} }
if (noIPv4) DEBUG_LOG(("MTP Info: DC %1 options for IPv4 not found, waiting for config").arg(dc)); if (noIPv4) DEBUG_LOG(("MTP Info: DC %1 options for IPv4 not found, waiting for config").arg(dc));
if (noIPv6) DEBUG_LOG(("MTP Info: DC %1 options for IPv6 not found, waiting for config").arg(dc)); if (cTryIPv6() && noIPv6) DEBUG_LOG(("MTP Info: DC %1 options for IPv6 not found, waiting for config").arg(dc));
connect(mtpConfigLoader(), SIGNAL(loaded()), this, SLOT(onConfigLoaded())); connect(mtpConfigLoader(), SIGNAL(loaded()), this, SLOT(onConfigLoaded()));
mtpConfigLoader()->load(); mtpConfigLoader()->load();
return; return;
@ -1847,8 +1972,11 @@ void MTProtoConnectionPrivate::restart(bool maybeBadKey) {
} }
} }
lockFinished.unlock();
doDisconnect(); doDisconnect();
if (_needSessionReset) {
lockFinished.relock();
if (sessionData && _needSessionReset) {
resetSession(); resetSession();
} }
restarted = true; restarted = true;
@ -1965,7 +2093,12 @@ void MTProtoConnectionPrivate::onWaitIPv4Failed() {
void MTProtoConnectionPrivate::doDisconnect() { void MTProtoConnectionPrivate::doDisconnect() {
destroyConn(); destroyConn();
{
QReadLocker lockFinished(&sessionDataMutex);
if (sessionData) {
unlockKey(); unlockKey();
}
}
clearAuthKeyData(); clearAuthKeyData();
@ -1989,12 +2122,16 @@ void MTProtoConnectionPrivate::handleReceived() {
DEBUG_LOG(("MTP Error: auth_key for dc %1 busy, cant lock").arg(dc)); DEBUG_LOG(("MTP Error: auth_key for dc %1 busy, cant lock").arg(dc));
clearMessages(); clearMessages();
keyId = 0; keyId = 0;
lockFinished.unlock();
return restart(); return restart();
} }
mtpAuthKeyPtr key(sessionData->getKey()); mtpAuthKeyPtr key(sessionData->getKey());
if (!key || key->keyId() != keyId) { if (!key || key->keyId() != keyId) {
DEBUG_LOG(("MTP Error: auth_key id for dc %1 changed").arg(dc)); DEBUG_LOG(("MTP Error: auth_key id for dc %1 changed").arg(dc));
lockFinished.unlock();
return restart(); return restart();
} }
@ -2005,11 +2142,15 @@ void MTProtoConnectionPrivate::handleReceived() {
if (len < 18) { // 2 auth_key_id, 4 msg_key, 2 salt, 2 session, 2 msg_id, 1 seq_no, 1 length, (1 data + 3 padding) min if (len < 18) { // 2 auth_key_id, 4 msg_key, 2 salt, 2 session, 2 msg_id, 1 seq_no, 1 length, (1 data + 3 padding) min
LOG(("TCP Error: bad message received, len %1").arg(len * sizeof(mtpPrime))); LOG(("TCP Error: bad message received, len %1").arg(len * sizeof(mtpPrime)));
TCP_LOG(("TCP Error: bad message %1").arg(mb(encrypted, len * sizeof(mtpPrime)).str())); TCP_LOG(("TCP Error: bad message %1").arg(mb(encrypted, len * sizeof(mtpPrime)).str()));
lockFinished.unlock();
return restart(); return restart();
} }
if (keyId != *(uint64*)encrypted) { if (keyId != *(uint64*)encrypted) {
LOG(("TCP Error: bad auth_key_id %1 instead of %2 received").arg(keyId).arg(*(uint64*)encrypted)); LOG(("TCP Error: bad auth_key_id %1 instead of %2 received").arg(keyId).arg(*(uint64*)encrypted));
TCP_LOG(("TCP Error: bad message %1").arg(mb(encrypted, len * sizeof(mtpPrime)).str())); TCP_LOG(("TCP Error: bad message %1").arg(mb(encrypted, len * sizeof(mtpPrime)).str()));
lockFinished.unlock();
return restart(); return restart();
} }
@ -2028,6 +2169,8 @@ void MTProtoConnectionPrivate::handleReceived() {
LOG(("TCP Error: bad msg_len received %1, data size: %2").arg(msgLen).arg(dataBuffer.size())); LOG(("TCP Error: bad msg_len received %1, data size: %2").arg(msgLen).arg(dataBuffer.size()));
TCP_LOG(("TCP Error: bad message %1").arg(mb(encrypted, len * sizeof(mtpPrime)).str())); TCP_LOG(("TCP Error: bad message %1").arg(mb(encrypted, len * sizeof(mtpPrime)).str()));
_conn->received().pop_front(); _conn->received().pop_front();
lockFinished.unlock();
return restart(); return restart();
} }
uchar sha1Buffer[20]; uchar sha1Buffer[20];
@ -2035,6 +2178,8 @@ void MTProtoConnectionPrivate::handleReceived() {
LOG(("TCP Error: bad SHA1 hash after aesDecrypt in message")); LOG(("TCP Error: bad SHA1 hash after aesDecrypt in message"));
TCP_LOG(("TCP Error: bad message %1").arg(mb(encrypted, len * sizeof(mtpPrime)).str())); TCP_LOG(("TCP Error: bad message %1").arg(mb(encrypted, len * sizeof(mtpPrime)).str()));
_conn->received().pop_front(); _conn->received().pop_front();
lockFinished.unlock();
return restart(); return restart();
} }
TCP_LOG(("TCP Info: decrypted message %1,%2,%3 is %4 len").arg(msgId).arg(seqNo).arg(logBool(needAck)).arg(msgLen + 8 * sizeof(mtpPrime))); TCP_LOG(("TCP Info: decrypted message %1,%2,%3 is %4 len").arg(msgId).arg(seqNo).arg(logBool(needAck)).arg(msgLen + 8 * sizeof(mtpPrime)));
@ -2044,6 +2189,8 @@ void MTProtoConnectionPrivate::handleReceived() {
LOG(("MTP Error: bad server session received")); LOG(("MTP Error: bad server session received"));
TCP_LOG(("MTP Error: bad server session %1 instead of %2 in message received").arg(session).arg(serverSession)); TCP_LOG(("MTP Error: bad server session %1 instead of %2 in message received").arg(session).arg(serverSession));
_conn->received().pop_front(); _conn->received().pop_front();
lockFinished.unlock();
return restart(); return restart();
} }
@ -2053,6 +2200,8 @@ void MTProtoConnectionPrivate::handleReceived() {
bool isReply = ((msgId & 0x03) == 1); bool isReply = ((msgId & 0x03) == 1);
if (!isReply && ((msgId & 0x03) != 3)) { if (!isReply && ((msgId & 0x03) != 3)) {
LOG(("MTP Error: bad msg_id %1 in message received").arg(msgId)); LOG(("MTP Error: bad msg_id %1 in message received").arg(msgId));
lockFinished.unlock();
return restart(); return restart();
} }
@ -2128,6 +2277,8 @@ void MTProtoConnectionPrivate::handleReceived() {
if (res < 0) { if (res < 0) {
_needSessionReset = (res < -1); _needSessionReset = (res < -1);
lockFinished.unlock();
return restart(); return restart();
} }
retryTimeout = 1; // reset restart() timer retryTimeout = 1; // reset restart() timer
@ -2898,6 +3049,8 @@ void MTProtoConnectionPrivate::onConnected4() {
disconnect(_conn4, SIGNAL(connected()), this, SLOT(onConnected4())); disconnect(_conn4, SIGNAL(connected()), this, SLOT(onConnected4()));
if (!_conn4->isConnected()) { if (!_conn4->isConnected()) {
LOG(("Connection Error: not connected in onConnected4(), state: %1").arg(_conn4->debugState())); LOG(("Connection Error: not connected in onConnected4(), state: %1").arg(_conn4->debugState()));
lockFinished.unlock();
return restart(); return restart();
} }
@ -2906,6 +3059,7 @@ void MTProtoConnectionPrivate::onConnected4() {
DEBUG_LOG(("MTP Info: connection through IPv4 succeed.")); DEBUG_LOG(("MTP Info: connection through IPv4 succeed."));
lockFinished.unlock();
updateAuthKey(); updateAuthKey();
} }
@ -2916,9 +3070,11 @@ void MTProtoConnectionPrivate::onConnected6() {
QReadLocker lockFinished(&sessionDataMutex); QReadLocker lockFinished(&sessionDataMutex);
if (!sessionData) return; if (!sessionData) return;
disconnect(_conn6, SIGNAL(connected()), this, SLOT(onConnected())); disconnect(_conn6, SIGNAL(connected()), this, SLOT(onConnected6()));
if (!_conn6->isConnected()) { if (!_conn6->isConnected()) {
LOG(("Connection Error: not connected in onConnected(), state: %1").arg(_conn6->debugState())); LOG(("Connection Error: not connected in onConnected(), state: %1").arg(_conn6->debugState()));
lockFinished.unlock();
return restart(); return restart();
} }
@ -2997,6 +3153,7 @@ void MTProtoConnectionPrivate::updateAuthKey() {
connect(_conn, SIGNAL(receivedData()), this, SLOT(pqAnswered())); connect(_conn, SIGNAL(receivedData()), this, SLOT(pqAnswered()));
DEBUG_LOG(("AuthKey Info: sending Req_pq..")); DEBUG_LOG(("AuthKey Info: sending Req_pq.."));
lockFinished.unlock();
sendRequestNotSecure(req_pq); sendRequestNotSecure(req_pq);
} }
@ -3300,6 +3457,7 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() {
MTPSet_client_DH_params::ResponseType res_client_DH_params; MTPSet_client_DH_params::ResponseType res_client_DH_params;
if (!readResponseNotSecure(res_client_DH_params)) { if (!readResponseNotSecure(res_client_DH_params)) {
lockFinished.unlock();
return restart(); return restart();
} }
@ -3309,11 +3467,15 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() {
if (resDH.vnonce != authKeyData->nonce) { if (resDH.vnonce != authKeyData->nonce) {
LOG(("AuthKey Error: received nonce <> sent nonce (in dh_gen_ok)!")); LOG(("AuthKey Error: received nonce <> sent nonce (in dh_gen_ok)!"));
DEBUG_LOG(("AuthKey Error: received nonce: %1, sent nonce: %2").arg(mb(&resDH.vnonce, 16).str()).arg(mb(&authKeyData->nonce, 16).str())); DEBUG_LOG(("AuthKey Error: received nonce: %1, sent nonce: %2").arg(mb(&resDH.vnonce, 16).str()).arg(mb(&authKeyData->nonce, 16).str()));
lockFinished.unlock();
return restart(); return restart();
} }
if (resDH.vserver_nonce != authKeyData->server_nonce) { if (resDH.vserver_nonce != authKeyData->server_nonce) {
LOG(("AuthKey Error: received server_nonce <> sent server_nonce (in dh_gen_ok)!")); LOG(("AuthKey Error: received server_nonce <> sent server_nonce (in dh_gen_ok)!"));
DEBUG_LOG(("AuthKey Error: received server_nonce: %1, sent server_nonce: %2").arg(mb(&resDH.vserver_nonce, 16).str()).arg(mb(&authKeyData->server_nonce, 16).str())); DEBUG_LOG(("AuthKey Error: received server_nonce: %1, sent server_nonce: %2").arg(mb(&resDH.vserver_nonce, 16).str()).arg(mb(&authKeyData->server_nonce, 16).str()));
lockFinished.unlock();
return restart(); return restart();
} }
authKeyData->new_nonce_buf[32] = 1; authKeyData->new_nonce_buf[32] = 1;
@ -3321,6 +3483,8 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() {
if (resDH.vnew_nonce_hash1 != *(MTPint128*)(hashSha1(authKeyData->new_nonce_buf, 41, sha1Buffer) + 1)) { if (resDH.vnew_nonce_hash1 != *(MTPint128*)(hashSha1(authKeyData->new_nonce_buf, 41, sha1Buffer) + 1)) {
LOG(("AuthKey Error: received new_nonce_hash1 did not match!")); LOG(("AuthKey Error: received new_nonce_hash1 did not match!"));
DEBUG_LOG(("AuthKey Error: received new_nonce_hash1: %1, new_nonce_buf: %2").arg(mb(&resDH.vnew_nonce_hash1, 16).str()).arg(mb(authKeyData->new_nonce_buf, 41).str())); DEBUG_LOG(("AuthKey Error: received new_nonce_hash1: %1, new_nonce_buf: %2").arg(mb(&resDH.vnew_nonce_hash1, 16).str()).arg(mb(authKeyData->new_nonce_buf, 41).str()));
lockFinished.unlock();
return restart(); return restart();
} }
@ -3343,11 +3507,15 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() {
if (resDH.vnonce != authKeyData->nonce) { if (resDH.vnonce != authKeyData->nonce) {
LOG(("AuthKey Error: received nonce <> sent nonce (in dh_gen_retry)!")); LOG(("AuthKey Error: received nonce <> sent nonce (in dh_gen_retry)!"));
DEBUG_LOG(("AuthKey Error: received nonce: %1, sent nonce: %2").arg(mb(&resDH.vnonce, 16).str()).arg(mb(&authKeyData->nonce, 16).str())); DEBUG_LOG(("AuthKey Error: received nonce: %1, sent nonce: %2").arg(mb(&resDH.vnonce, 16).str()).arg(mb(&authKeyData->nonce, 16).str()));
lockFinished.unlock();
return restart(); return restart();
} }
if (resDH.vserver_nonce != authKeyData->server_nonce) { if (resDH.vserver_nonce != authKeyData->server_nonce) {
LOG(("AuthKey Error: received server_nonce <> sent server_nonce (in dh_gen_retry)!")); LOG(("AuthKey Error: received server_nonce <> sent server_nonce (in dh_gen_retry)!"));
DEBUG_LOG(("AuthKey Error: received server_nonce: %1, sent server_nonce: %2").arg(mb(&resDH.vserver_nonce, 16).str()).arg(mb(&authKeyData->server_nonce, 16).str())); DEBUG_LOG(("AuthKey Error: received server_nonce: %1, sent server_nonce: %2").arg(mb(&resDH.vserver_nonce, 16).str()).arg(mb(&authKeyData->server_nonce, 16).str()));
lockFinished.unlock();
return restart(); return restart();
} }
authKeyData->new_nonce_buf[32] = 2; authKeyData->new_nonce_buf[32] = 2;
@ -3355,6 +3523,8 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() {
if (resDH.vnew_nonce_hash2 != *(MTPint128*)(hashSha1(authKeyData->new_nonce_buf, 41, sha1Buffer) + 1)) { if (resDH.vnew_nonce_hash2 != *(MTPint128*)(hashSha1(authKeyData->new_nonce_buf, 41, sha1Buffer) + 1)) {
LOG(("AuthKey Error: received new_nonce_hash2 did not match!")); LOG(("AuthKey Error: received new_nonce_hash2 did not match!"));
DEBUG_LOG(("AuthKey Error: received new_nonce_hash2: %1, new_nonce_buf: %2").arg(mb(&resDH.vnew_nonce_hash2, 16).str()).arg(mb(authKeyData->new_nonce_buf, 41).str())); DEBUG_LOG(("AuthKey Error: received new_nonce_hash2: %1, new_nonce_buf: %2").arg(mb(&resDH.vnew_nonce_hash2, 16).str()).arg(mb(authKeyData->new_nonce_buf, 41).str()));
lockFinished.unlock();
return restart(); return restart();
} }
authKeyData->retry_id = authKeyData->auth_key_aux_hash; authKeyData->retry_id = authKeyData->auth_key_aux_hash;
@ -3365,11 +3535,15 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() {
if (resDH.vnonce != authKeyData->nonce) { if (resDH.vnonce != authKeyData->nonce) {
LOG(("AuthKey Error: received nonce <> sent nonce (in dh_gen_fail)!")); LOG(("AuthKey Error: received nonce <> sent nonce (in dh_gen_fail)!"));
DEBUG_LOG(("AuthKey Error: received nonce: %1, sent nonce: %2").arg(mb(&resDH.vnonce, 16).str()).arg(mb(&authKeyData->nonce, 16).str())); DEBUG_LOG(("AuthKey Error: received nonce: %1, sent nonce: %2").arg(mb(&resDH.vnonce, 16).str()).arg(mb(&authKeyData->nonce, 16).str()));
lockFinished.unlock();
return restart(); return restart();
} }
if (resDH.vserver_nonce != authKeyData->server_nonce) { if (resDH.vserver_nonce != authKeyData->server_nonce) {
LOG(("AuthKey Error: received server_nonce <> sent server_nonce (in dh_gen_fail)!")); LOG(("AuthKey Error: received server_nonce <> sent server_nonce (in dh_gen_fail)!"));
DEBUG_LOG(("AuthKey Error: received server_nonce: %1, sent server_nonce: %2").arg(mb(&resDH.vserver_nonce, 16).str()).arg(mb(&authKeyData->server_nonce, 16).str())); DEBUG_LOG(("AuthKey Error: received server_nonce: %1, sent server_nonce: %2").arg(mb(&resDH.vserver_nonce, 16).str()).arg(mb(&authKeyData->server_nonce, 16).str()));
lockFinished.unlock();
return restart(); return restart();
} }
authKeyData->new_nonce_buf[32] = 3; authKeyData->new_nonce_buf[32] = 3;
@ -3377,13 +3551,20 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() {
if (resDH.vnew_nonce_hash3 != *(MTPint128*)(hashSha1(authKeyData->new_nonce_buf, 41, sha1Buffer) + 1)) { if (resDH.vnew_nonce_hash3 != *(MTPint128*)(hashSha1(authKeyData->new_nonce_buf, 41, sha1Buffer) + 1)) {
LOG(("AuthKey Error: received new_nonce_hash3 did not match!")); LOG(("AuthKey Error: received new_nonce_hash3 did not match!"));
DEBUG_LOG(("AuthKey Error: received new_nonce_hash3: %1, new_nonce_buf: %2").arg(mb(&resDH.vnew_nonce_hash3, 16).str()).arg(mb(authKeyData->new_nonce_buf, 41).str())); DEBUG_LOG(("AuthKey Error: received new_nonce_hash3: %1, new_nonce_buf: %2").arg(mb(&resDH.vnew_nonce_hash3, 16).str()).arg(mb(authKeyData->new_nonce_buf, 41).str()));
lockFinished.unlock();
return restart(); return restart();
} }
LOG(("AuthKey Error: dh_gen_fail received!")); LOG(("AuthKey Error: dh_gen_fail received!"));
} return restart(); }
lockFinished.unlock();
return restart();
} }
LOG(("AuthKey Error: unknown set_client_DH_params_answer received, typeId = %1").arg(res_client_DH_params.type())); LOG(("AuthKey Error: unknown set_client_DH_params_answer received, typeId = %1").arg(res_client_DH_params.type()));
lockFinished.unlock();
return restart(); return restart();
} }
@ -3522,7 +3703,7 @@ bool MTProtoConnectionPrivate::readResponseNotSecure(TResponse &response) {
return true; return true;
} }
bool MTProtoConnectionPrivate::sendRequest(mtpRequest &request, bool needAnyResponse) { bool MTProtoConnectionPrivate::sendRequest(mtpRequest &request, bool needAnyResponse, QReadLocker &lockFinished) {
uint32 fullSize = request->size(); uint32 fullSize = request->size();
if (fullSize < 9) return false; if (fullSize < 9) return false;
@ -3532,6 +3713,8 @@ bool MTProtoConnectionPrivate::sendRequest(mtpRequest &request, bool needAnyResp
ReadLockerAttempt lock(sessionData->keyMutex()); ReadLockerAttempt lock(sessionData->keyMutex());
if (!lock) { if (!lock) {
DEBUG_LOG(("MTP Info: could not lock key for read in sendBuffer(), dc %1, restarting..").arg(dc)); DEBUG_LOG(("MTP Info: could not lock key for read in sendBuffer(), dc %1, restarting..").arg(dc));
lockFinished.unlock();
restart(); restart();
return false; return false;
} }
@ -3539,6 +3722,8 @@ bool MTProtoConnectionPrivate::sendRequest(mtpRequest &request, bool needAnyResp
mtpAuthKeyPtr key(sessionData->getKey()); mtpAuthKeyPtr key(sessionData->getKey());
if (!key || key->keyId() != keyId) { if (!key || key->keyId() != keyId) {
DEBUG_LOG(("MTP Error: auth_key id for dc %1 changed").arg(dc)); DEBUG_LOG(("MTP Error: auth_key id for dc %1 changed").arg(dc));
lockFinished.unlock();
restart(); restart();
return false; return false;
} }
@ -3605,9 +3790,6 @@ void MTProtoConnectionPrivate::lockKey() {
} }
void MTProtoConnectionPrivate::unlockKey() { void MTProtoConnectionPrivate::unlockKey() {
QReadLocker lockFinished(&sessionDataMutex);
if (!sessionData) return;
if (myKeyLock) { if (myKeyLock) {
myKeyLock = false; myKeyLock = false;
sessionData->keyMutex()->unlock(); sessionData->keyMutex()->unlock();

View file

@ -41,10 +41,18 @@ enum {
MTPDreplyKeyboardMarkup_flag_resize = (1 << 0), MTPDreplyKeyboardMarkup_flag_resize = (1 << 0),
MTPDreplyKeyboardMarkup_flag_single_use = (1 << 1), MTPDreplyKeyboardMarkup_flag_single_use = (1 << 1),
MTPDreplyKeyboardMarkup_flag_ZERO = (1 << 31) // client side flag for zeroMarkup MTPDreplyKeyboardMarkup_flag_personal = (1 << 2),
MTPDreplyKeyboardMarkup_flag_FORCE_REPLY = (1 << 30), // client side flag for forceReply
MTPDreplyKeyboardMarkup_flag_ZERO = (1 << 31), // client side flag for zeroMarkup
MTPDstickerSet_flag_installed = (1 << 0),
MTPDstickerSet_flag_disabled = (1 << 1),
MTPDstickerSet_flag_official = (1 << 2),
MTPDstickerSet_flag_NOT_LOADED = (1 << 31), // client side flag for not yet loaded set
}; };
static const MTPReplyMarkup MTPnullMarkup = MTP_replyKeyboardMarkup(MTP_int(0), MTP_vector<MTPKeyboardButtonRow>(0)); static const MTPReplyMarkup MTPnullMarkup = MTP_replyKeyboardMarkup(MTP_int(0), MTP_vector<MTPKeyboardButtonRow>(0));
static const MTPVector<MTPMessageEntity> MTPnullEntities = MTP_vector<MTPMessageEntity>(0);
#include "mtproto/mtpPublicRSA.h" #include "mtproto/mtpPublicRSA.h"
#include "mtproto/mtpAuthKey.h" #include "mtproto/mtpAuthKey.h"
@ -139,7 +147,7 @@ public:
virtual void sendData(mtpBuffer &buffer) = 0; // has size + 3, buffer[0] = len, buffer[1] = packetnum, buffer[last] = crc32 virtual void sendData(mtpBuffer &buffer) = 0; // has size + 3, buffer[0] = len, buffer[1] = packetnum, buffer[last] = crc32
virtual void disconnectFromServer() = 0; virtual void disconnectFromServer() = 0;
virtual void connectToServer(const QString &addr, int32 port, int32 flags) = 0; virtual void connectToServer(const QString &addr, int32 port, int32 flags) = 0;
virtual bool isConnected() = 0; virtual bool isConnected() const = 0;
virtual bool usingHttpWait() { virtual bool usingHttpWait() {
return false; return false;
} }
@ -207,7 +215,7 @@ public:
void sendData(mtpBuffer &buffer); void sendData(mtpBuffer &buffer);
void disconnectFromServer(); void disconnectFromServer();
void connectToServer(const QString &addr, int32 port, int32 flags); void connectToServer(const QString &addr, int32 port, int32 flags);
bool isConnected(); bool isConnected() const;
bool usingHttpWait(); bool usingHttpWait();
bool needHttpWait(); bool needHttpWait();
@ -254,7 +262,7 @@ private:
Requests requests; Requests requests;
QString _addr; QString _addr;
int32 _port, _tcpTimeout; int32 _port, _tcpTimeout, _flags;
QTimer tcpTimeoutTimer; QTimer tcpTimeoutTimer;
}; };
@ -269,7 +277,7 @@ public:
void sendData(mtpBuffer &buffer); void sendData(mtpBuffer &buffer);
void disconnectFromServer(); void disconnectFromServer();
void connectToServer(const QString &addr, int32 port, int32 flags); void connectToServer(const QString &addr, int32 port, int32 flags);
bool isConnected(); bool isConnected() const;
int32 debugState() const; int32 debugState() const;
@ -279,10 +287,29 @@ public slots:
void socketError(QAbstractSocket::SocketError e); void socketError(QAbstractSocket::SocketError e);
void onSocketConnected();
void onSocketDisconnected();
void onTcpTimeoutTimer();
protected: protected:
void socketPacket(mtpPrime *packet, uint32 packetSize); void socketPacket(mtpPrime *packet, uint32 packetSize);
private:
enum Status {
WaitingTcp = 0,
UsingTcp,
FinishedWork
};
Status status;
MTPint128 tcpNonce;
QString _addr;
int32 _port, _tcpTimeout, _flags;
QTimer tcpTimeoutTimer;
}; };
class MTPhttpConnection : public MTPabstractConnection { class MTPhttpConnection : public MTPabstractConnection {
@ -295,7 +322,7 @@ public:
void sendData(mtpBuffer &buffer); void sendData(mtpBuffer &buffer);
void disconnectFromServer(); void disconnectFromServer();
void connectToServer(const QString &addr, int32 port, int32 flags); void connectToServer(const QString &addr, int32 port, int32 flags);
bool isConnected(); bool isConnected() const;
bool usingHttpWait(); bool usingHttpWait();
bool needHttpWait(); bool needHttpWait();
@ -309,6 +336,15 @@ public slots:
private: private:
enum Status {
WaitingHttp = 0,
UsingHttp,
FinishedWork
};
Status status;
MTPint128 httpNonce;
int32 _flags;
QNetworkAccessManager manager; QNetworkAccessManager manager;
QUrl address; QUrl address;
@ -375,7 +411,6 @@ public slots:
void onError4(bool maybeBadKey = false); void onError4(bool maybeBadKey = false);
void onError6(bool maybeBadKey = false); void onError6(bool maybeBadKey = false);
void doDisconnect();
void doFinish(); void doFinish();
// Auth key creation packet receive slots // Auth key creation packet receive slots
@ -395,6 +430,8 @@ public slots:
private: private:
void doDisconnect();
void createConn(bool createIPv4, bool createIPv6); void createConn(bool createIPv4, bool createIPv6);
void destroyConn(MTPabstractConnection **conn = 0); // 0 - destory all void destroyConn(MTPabstractConnection **conn = 0); // 0 - destory all
@ -402,7 +439,7 @@ private:
mtpMsgId prepareToSend(mtpRequest &request, mtpMsgId currentLastId); mtpMsgId prepareToSend(mtpRequest &request, mtpMsgId currentLastId);
mtpMsgId replaceMsgId(mtpRequest &request, mtpMsgId newId); mtpMsgId replaceMsgId(mtpRequest &request, mtpMsgId newId);
bool sendRequest(mtpRequest &request, bool needAnyResponse); bool sendRequest(mtpRequest &request, bool needAnyResponse, QReadLocker &lockFinished);
mtpRequestId wasSent(mtpMsgId msgId) const; mtpRequestId wasSent(mtpMsgId msgId) const;
int32 handleOneReceived(const mtpPrime *from, const mtpPrime *end, uint64 msgId, int32 serverTime, uint64 serverSalt, bool badTime); int32 handleOneReceived(const mtpPrime *from, const mtpPrime *end, uint64 msgId, int32 serverTime, uint64 serverSalt, bool badTime);
@ -412,7 +449,7 @@ private:
void clearMessages(); void clearMessages();
bool setState(int32 state, int32 ifState = MTProtoConnection::UpdateAlways); bool setState(int32 state, int32 ifState = MTProtoConnection::UpdateAlways);
mutable QReadWriteLock stateMutex; mutable QReadWriteLock stateConnMutex;
int32 _state; int32 _state;
bool _needSessionReset; bool _needSessionReset;

Some files were not shown because too many files have changed in this diff Show more