Merge branch 'dev'

Merging os x build version to master.
This commit is contained in:
John Preston 2014-06-26 09:42:43 +04:00
commit ce84c603c2
117 changed files with 6605 additions and 1497 deletions

113
MSVC.md Normal file
View file

@ -0,0 +1,113 @@
##Build instructions for Visual Studio 2013
###Prepare folder
Choose a folder for the future build, for example **D:\TBuild\**. There you will have two folders, **Libraries** for third-party libs and **tdesktop** (or **tdesktop-master**) for the app.
###Clone source code
By git in [Git Bash](http://git-scm.com/downloads) go to **/d/tbuild** and run
git clone https://github.com/telegramdesktop/tdesktop.git
or download in ZIP and extract to **D:\TBuild\**, rename **tdesktop-master** to **tdesktop** to have **D:\TBuild\tdesktop\Telegram.sln** solution
###Prepare libraries
####OpenSSL 1.0.1g
https://www.openssl.org/related/binaries.html > **OpenSSL for Windows** > Download [**Win32 OpenSSL v1.0.1g** (16 Mb)](http://slproweb.com/download/Win32OpenSSL-1_0_1g.exe)
Install to **D:\TBuild\Libraries\OpenSSL-Win32**, while installing **Copy OpenSSL DLLs to** choose **The OpenSSL binaries (/bin) directory**
####LZMA SDK 9.20
http://www.7-zip.org/sdk.html > Download [**LZMA SDK (C, C++, C#, Java)** 9.20](http://downloads.sourceforge.net/sevenzip/lzma920.tar.bz2)
Extract to **D:\TBuild\Libraries**
#####Building library
* Open in VS2013 **D:\TBuild\Libraries\lzma\C\Util\LzmaLib\LzmaLib.dsw** > One-way upgrade **OK**
* For **Debug** and **Release** configurations
* LzmaLib Properties > General > Configuration Type = **Static library (.lib)** **OK**
* LzmaLib Properties > Librarian > General > Target Machine = **MachineX86 (/MACHINE:X86)** **OK**
* Build Debug configuration
* Build Release configuration
####zlib 1.2.8
http://www.zlib.net/ > Download [**zlib source code, version 1.2.8, zipfile format**](http://zlib.net/zlib128.zip)
Extract to **D:\TBuild\Libraries\**
#####Building library
* Open in VS2013 **D:\TBuild\Libraries\zlib-1.2.8\contrib\vstudio\vc11\zlibvc.sln** > One-way upgrade **OK**
* We are interested only in **zlibstat** project, but it depends on some custom pre-build step, so build all
* For **Debug** configuration
* zlibstat Properties > C/C++ > Code Generation > Runtime Library = **Multi-threaded Debug (/MTd)** **OK**
* For **Release** configuration
* zlibstat Properties > C/C++ > Code Generation > Runtime Library = **Multi-threaded (/MT)** **OK**
* Build Solution for Debug configuration only **zlibstat** project builds successfully
* Build Solution for Release configuration only **zlibstat** project builds successfully
####libexif 0.6.20
Get sources from https://github.com/telegramdesktop/libexif-0.6.20, by git in [Git Bash](http://git-scm.com/downloads) go to **/d/tbuild/libraries** and run
git clone https://github.com/telegramdesktop/libexif-0.6.20.git
or download in ZIP and extract to **D:\TBuild\Libraries\**, rename **libexif-0.6.20-master** to **libexif-0.6.20** to have **D:\TBuild\Libraries\libexif-0.6.20\win32\lib_exif.sln** solution
#####Building library
* Open in VS2013 **D:\TBuild\Libraries\libexif-0.6.20\win32\lib_exif.sln**
* Build Debug configuration
* Build Release configuration
####Qt 5.3.0, slightly patched
http://download.qt-project.org/official_releases/qt/5.3/5.3.0/single/qt-everywhere-opensource-src-5.3.0.zip
Extract to **D:\TBuild\Libraries\**, rename **qt-everywhere-opensource-src-5.3.0** to **QtStatic** to have **D:\TBuild\Libraries\QtStatic\qtbase\** folder
Apply patch copy (with overwrite!) everything from **D:\TBuild\tdesktop\\\_qt\_5\_3\_0\_patch\** to **D:\TBuild\Libraries\QtStatic\**
#####Building library
* Install Python 3.3.2 from https://www.python.org/download/releases/3.3.2 > [**Windows x86 MSI Installer (3.3.2)**](https://www.python.org/ftp/python/3.3.2/python-3.3.2.msi)
* Open **VS2013 x86 Native Tools Command Prompt.bat** (should be in **\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts\** folder)
There go to Qt directory
D:
cd TBuild\Libraries\QtStatic
and after that run configure
configure -debug-and-release -opensource -static -opengl desktop -mp -nomake examples -platform win32-msvc2013
y
to configure Qt build. After configuration is complete run
nmake
nmake install
building (**nmake** command) will take really long time.
####Qt Visual Studio Addin 1.2.3
http://download.qt-project.org/official_releases/vsaddin/qt-vs-addin-1.2.3-opensource.exe
Close all VS2013 instances and install to default location
###Building Telegram Desktop
* Launch VS2013 for configuring Qt Addin
* QT5 > Qt Options > Add
* Version name: **QtStatic.5.3.0**
* Path: **D:\TBuild\Libraries\QtStatic\qtbase**
* Default Qt/Win version: **QtStatic.5.3.0** **OK**
* File > Open > Project/Solution > **D:\TBuild\tdesktop\Telegram.sln**
* Build \ Build Solution (Debug and Release configurations)

126
README.md
View file

@ -6,13 +6,15 @@ Source code is published under GPL v3, license is available [here](https://githu
###Supported systems ###Supported systems
Only Windows systems are supported at this moment, OS X and Linux builds are on their way. Only Windows and OS X systems are supported at this moment, Linux builds are on their way.
* Windows XP * Windows XP
* Windows Vista * Windows Vista
* Windows 7 * Windows 7
* Windows 8 (**not** RT) * Windows 8 (**not** RT)
* Windows 8.1 (**not** RT) * Windows 8.1 (**not** RT)
* OS X 10.9
* OS X 10.7-10.8 (not tested)
###Third-party ###Third-party
@ -21,121 +23,12 @@ Only Windows systems are supported at this moment, OS X and Linux builds are on
* 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))
* LZMA SDK 9.20 ([public domain](http://www.7-zip.org/sdk.html)) * LZMA SDK 9.20 ([public domain](http://www.7-zip.org/sdk.html))
* liblzma ([public domain](http://tukaani.org/xz/))
* Open Sans font ([Apache License](http://www.apache.org/licenses/LICENSE-2.0.html)) * Open Sans font ([Apache License](http://www.apache.org/licenses/LICENSE-2.0.html))
##Build instructions for Visual Studio 2013 ###[Build instructions for Visual Studio 2013](https://github.com/telegramdesktop/tdesktop/blob/master/MSVC.md)
###Prepare folder ###[Build instructions for XCode 5.1.1](https://github.com/telegramdesktop/tdesktop/blob/master/XCODE.md)
Choose a folder for the future build, for example **D:\TBuild\**. There you will have two folders, **Libraries** for third-party libs and **tdesktop** (or **tdesktop-master**) for the app.
###Clone source code
By git in [Git Bash](http://git-scm.com/downloads) go to **/d/tbuild** and run
git clone https://github.com/telegramdesktop/tdesktop.git
or download in ZIP and extract to **D:\TBuild\**, rename **tdesktop-master** to **tdesktop** to have **D:\TBuild\tdesktop\Telegram.sln** solution
###Prepare libraries
####OpenSSL 1.0.1g
https://www.openssl.org/related/binaries.html > **OpenSSL for Windows** > Download [**Win32 OpenSSL v1.0.1g** (16 Mb)](http://slproweb.com/download/Win32OpenSSL-1_0_1g.exe)
Install to **D:\TBuild\Libraries\OpenSSL-Win32**, while installing **Copy OpenSSL DLLs to** choose **The OpenSSL binaries (/bin) directory**
####LZMA SDK 9.20
http://www.7-zip.org/sdk.html > Download [**LZMA SDK (C, C++, C#, Java)** 9.20](http://downloads.sourceforge.net/sevenzip/lzma920.tar.bz2)
Extract to **D:\TBuild\Libraries**
#####Building library
* Open in VS2013 **D:\TBuild\Libraries\lzma\C\Util\LzmaLib\LzmaLib.dsw** > One-way upgrade **OK**
* For **Debug** and **Release** configurations
* LzmaLib Properties > General > Configuration Type = **Static library (.lib)** **OK**
* LzmaLib Properties > Librarian > General > Target Machine = **MachineX86 (/MACHINE:X86)** **OK**
* Build Debug configuration
* Build Release configuration
####zlib 1.2.8
http://www.zlib.net/ > Download [**zlib source code, version 1.2.8, zipfile format**](http://zlib.net/zlib128.zip)
Extract to **D:\TBuild\Libraries\**
#####Building library
* Open in VS2013 **D:\TBuild\Libraries\zlib-1.2.8\contrib\vstudio\vc11\zlibvc.sln** > One-way upgrade **OK**
* We are interested only in **zlibstat** project, but it depends on some custom pre-build step, so build all
* For **Debug** configuration
* zlibstat Properties > C/C++ > Code Generation > Runtime Library = **Multi-threaded Debug (/MTd)** **OK**
* For **Release** configuration
* zlibstat Properties > C/C++ > Code Generation > Runtime Library = **Multi-threaded (/MT)** **OK**
* Build Solution for Debug configuration only **zlibstat** project builds successfully
* Build Solution for Release configuration only **zlibstat** project builds successfully
####libexif 0.6.20
Get sources from https://github.com/telegramdesktop/libexif-0.6.20, by git in [Git Bash](http://git-scm.com/downloads) go to **/d/tbuild/libraries** and run
git clone https://github.com/telegramdesktop/libexif-0.6.20.git
or download in ZIP and extract to **D:\TBuild\Libraries\**, rename **libexif-0.6.20-master** to **libexif-0.6.20** to have **D:\TBuild\Libraries\libexif-0.6.20\win32\lib_exif.sln** solution
#####Building library
* Open in VS2013 **D:\TBuild\Libraries\libexif-0.6.20\win32\lib_exif.sln**
* Build Debug configuration
* Build Release configuration
####Qt 5.3.0, slightly patched
http://download.qt-project.org/official_releases/qt/5.3/5.3.0/single/qt-everywhere-opensource-src-5.3.0.zip
Extract to **D:\TBuild\Libraries\**, rename **qt-everywhere-opensource-src-5.3.0** to **QtStatic** to have **D:\TBuild\Libraries\QtStatic\qtbase\** folder
Apply patch copy (with overwrite!) everything from **D:\TBuild\tdesktop\\\_qt\_5\_3\_0\_patch\** to **D:\TBuild\Libraries\QtStatic\**
#####Building library
* Install Python 3.3.2 from https://www.python.org/download/releases/3.3.2 > [**Windows x86 MSI Installer (3.3.2)**](https://www.python.org/ftp/python/3.3.2/python-3.3.2.msi)
* Open **VS2013 x86 Native Tools Command Prompt.bat** (should be in **\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts\** folder)
There go to Qt directory
D:
cd TBuild\Libraries\QtStatic
and after that run configure
configure -debug-and-release -opensource -static -opengl desktop -mp -nomake examples -platform win32-msvc2013
y
to configure Qt build. After configuration is complete run
nmake
nmake install
building (**nmake** command) will take really long time.
####Qt Visual Studio Addin 1.2.3
http://download.qt-project.org/official_releases/vsaddin/qt-vs-addin-1.2.3-opensource.exe
Close all VS2013 instances and install to default location
###Building Telegram Desktop
* Launch VS2013 for configuring Qt Addin
* QT5 > Qt Options > Add
* Version name: **QtStatic.5.3.0**
* Path: **D:\TBuild\Libraries\QtStatic\qtbase**
* Default Qt/Win version: **QtStatic.5.3.0** **OK**
* File > Open > Project/Solution > **D:\TBuild\tdesktop\Telegram.sln**
* Build \ Build Solution (Debug and Release configurations)
##Projects in Telegram solution ##Projects in Telegram solution
@ -153,12 +46,17 @@ compiles given files to single update file, compresses it with lzma and signs wi
####Prepare ####Prepare
prepares a release for deployment, puts all files to deploy/{version} folder prepares a release for deployment, puts all files to deploy/{version} folder, for Win:
* current tsetup{version}exe installer * current tsetup{version}exe installer
* current Telegram.exe * current Telegram.exe
* current Telegram.pdb (debug info for crash minidumps view) * current Telegram.pdb (debug info for crash minidumps view)
* current tupdate{updversion} binary lzma update archive * current tupdate{updversion} binary lzma update archive
for Mac:
* current tsetup{version}dmg
* current Telegram.app
* current tmacupd{updversion} binary lzma update archive
####MetaEmoji ####MetaEmoji
from two folders from two folders

20
Telegram/Emoji.plist Normal file
View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>MetaEmoji</string>
<key>CFBundleGetInfoString</key>
<string>MetaEmoji compiler</string>
<key>CFBundleIdentifier</key>
<string>com.tdesktop.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>NOTE</key>
<string></string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>

31
Telegram/MetaEmoji.pro Normal file
View file

@ -0,0 +1,31 @@
QT += core
CONFIG(debug, debug|release) {
DEFINES += _DEBUG
OBJECTS_DIR = ./../Mac/DebugIntermediateEmoji
MOC_DIR = ./GeneratedFiles/Debug
DESTDIR = ./../Mac/DebugEmoji
}
CONFIG(release, debug|release) {
OBJECTS_DIR = ./../Mac/ReleaseIntermediateEmoji
MOC_DIR = ./GeneratedFiles/Release
DESTDIR = ./../Mac/ReleaseEmoji
}
macx {
QMAKE_INFO_PLIST = ./SourceFiles/_other/Emoji.plist
QMAKE_LFLAGS += -framework Cocoa
}
SOURCES += \
./SourceFiles/_other/memain.cpp \
./SourceFiles/_other/genemoji.cpp \
HEADERS += \
./SourceFiles/_other/memain.h \
./SourceFiles/_other/genemoji.h \
INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui\
./../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore\
./../../Libraries/QtStatic/qtbase/include\

View file

@ -0,0 +1,801 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXAggregateTarget section */
D93715D85BD26B270C3CC80B /* Preprocess */ = {
isa = PBXAggregateTarget;
buildConfigurationList = 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "MetaEmoji" */;
buildPhases = (
7EF0942E79C014DCEC8976BC /* Qt Preprocessors */,
);
dependencies = (
);
name = Preprocess;
productName = "Qt Preprocess";
};
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
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 */; };
328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; };
496FD9CEEB508016AFB9F928 /* qico in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8F500B5166907B6D9A7C3E3D /* qico */; };
4B166C0FE4A3C31F5E3D05CE /* metaemoji_plugin_import.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = A9341A7B02F69BC5802268AA /* metaemoji_plugin_import.cpp */; settings = {ATTRIBUTES = (); }; };
59789101736112A570B8EFE6 /* qjp2 in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = F0681BC551FC8A2B132FC646 /* qjp2 */; };
668DDDA0C55405E7FCFD6CA5 /* CoreServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 9742F24EE18EA44D52824F1E /* CoreServices.framework */; };
7CA5405B8503BFFC60932D2B /* qicns in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 31120EDB269DFF13E1D49847 /* qicns */; };
7F76437B577F737145996DC3 /* qtga in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DCEFD9167C239650120B0145 /* qtga */; };
83425F7776C9E52C29BE0E6F /* memain.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 3AC2626B26B65AA88F06BFB5 /* memain.cpp */; settings = {ATTRIBUTES = (); }; };
8771A8C96E9C391044035D99 /* OpenGL.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D4B32C2222F82AC56BADEB21 /* OpenGL.framework */; };
8D267F2E4776F0ECA2F49DC8 /* IOKit.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = A1A67BEAA744704B29168D39 /* IOKit.framework */; };
8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D6193B79CECC9DD0142D1200 /* qtharfbuzzng */; };
9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 04391BE7A8B9D811E255100A /* Qt5Gui */; };
A3F8F2284013928A02AE5C38 /* qwbmp in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8CF51323544B886B8F4A2232 /* qwbmp */; };
A9563D9C9FD0D76FAAF1CA96 /* qdds in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D3D1BE0BEA3AEE0551AD39AC /* qdds */; };
B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 5A80A1907B6CFFB524C1E57D /* Qt5Core */; };
BE6AB9DF1C4880624131C669 /* Qt5Widgets in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */; };
C06DDE378A7AC1FA9E6FF69A /* qtiff in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = F2453BA07315EB9F34F1CD57 /* qtiff */; };
C4F1177BDAACCF1E50ACCED9 /* moc_genemoji.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 93E4BE1A02365B73BAF00B73 /* moc_genemoji.cpp */; settings = {ATTRIBUTES = (); }; };
C5357D951917482510CE3E54 /* genemoji.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 1F47C130E1F45B4A5A91DB5E /* genemoji.cpp */; settings = {ATTRIBUTES = (); }; };
D1FA8AF31837B51C762A9D4D /* qcocoa in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D53D8E6A188E05078A114294 /* qcocoa */; };
D22929A2B8C5281567FCACDC /* Qt5PlatformSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */; };
E45E51A644D5FC9F942ECE55 /* AGL.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */; };
F26454630C80841CBDCFE1CA /* Foundation.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = FCC237CA5AD60B9BA4447615 /* Foundation.framework */; };
F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = ADC6308023253CEA51F86E21 /* qwebp */; };
F8B465CE34D8DF87AAE95913 /* CoreFoundation.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */; };
F8ED42CF8679BF83227DAFC4 /* Carbon.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 9DFF62A901D70814B8A323D4 /* Carbon.framework */; };
FBD56E2AC34F76BFFDB68619 /* qmng in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 83D37373949868693FB7816D /* qmng */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
0708466E1954218200B5AE3A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 6DB9C3763D02B1415CD9D565 /* Project object */;
proxyType = 1;
remoteGlobalIDString = D93715D85BD26B270C3CC80B;
remoteInfo = "Qt Preprocess";
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.3.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
060A694B42A4555240009936 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = "<absolute>"; };
075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = "<absolute>"; };
0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.3.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/unix.conf"; sourceTree = "<absolute>"; };
111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = "<absolute>"; };
16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = "<absolute>"; };
23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = "<absolute>"; };
2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = "<absolute>"; };
247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = "<absolute>"; };
24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = "<absolute>"; };
28BD0D10214709D95B161E24 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = "<absolute>"; };
293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = "<absolute>"; };
2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = "<absolute>"; };
2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = "<absolute>"; };
311004331A04F3D69C98643C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = "<absolute>"; };
31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = "<absolute>"; };
346287C9E754E7C458153F03 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = "<absolute>"; };
360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = "<absolute>"; };
3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = "<absolute>"; };
382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = "<absolute>"; };
45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/gcc-base.conf"; sourceTree = "<absolute>"; };
45DB132B756499D4DF38430E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = "<absolute>"; };
4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.3.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
4C6C71914B1926119120DACD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = "<absolute>"; };
5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.3.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = "<absolute>"; };
5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = "<absolute>"; };
5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = "<absolute>"; };
6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = "<absolute>"; };
63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf"; sourceTree = "<absolute>"; };
669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.3.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/shell-unix.conf"; sourceTree = "<absolute>"; };
69347C39E4D922E94D0860BF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = "<absolute>"; };
6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = "<absolute>"; };
6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.3.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/qdevice.pri"; sourceTree = "<absolute>"; };
74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = "<absolute>"; };
77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = "<absolute>"; };
7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = "<absolute>"; };
7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = "<absolute>"; };
7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = "<absolute>"; };
7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = "<absolute>"; };
7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = "<absolute>"; };
817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.3.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/macx.conf"; sourceTree = "<absolute>"; };
82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = "<absolute>"; };
83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
85061B1DA49D125991117950 /* /usr/local/Qt-5.3.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = "<absolute>"; };
85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = "<absolute>"; };
87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = "<absolute>"; };
87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = "<absolute>"; };
8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = "<absolute>"; };
892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = "<absolute>"; };
89863CCAF1D29037AE95755D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = "<absolute>"; };
8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = "<absolute>"; };
8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = "<absolute>"; };
8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = "<absolute>"; };
8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.3.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/clang.conf"; sourceTree = "<absolute>"; };
8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.3.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>"; };
8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = "<absolute>"; };
8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = "<absolute>"; };
8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = "<absolute>"; };
8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = "<absolute>"; };
A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = "<absolute>"; };
A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = "<absolute>"; };
A9341A7B02F69BC5802268AA /* metaemoji_plugin_import.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = metaemoji_plugin_import.cpp; sourceTree = "<absolute>"; };
A9E30FA27827990C5F182223 /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = "<absolute>"; };
AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = "<absolute>"; };
AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = "<absolute>"; };
AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = "<absolute>"; };
ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = "<absolute>"; };
ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = "<absolute>"; };
ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = "<absolute>"; };
B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = "<absolute>"; };
B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = "<absolute>"; };
B26239063A068F800A2C95F4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = "<absolute>"; };
B382B645B34234E451AE5D94 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = "<absolute>"; };
B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = "<absolute>"; };
B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = "<absolute>"; };
B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = "<absolute>"; };
B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = "<absolute>"; };
B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = "<absolute>"; };
BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = "<absolute>"; };
BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = "<absolute>"; };
BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = "<absolute>"; };
BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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; };
C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = "<absolute>"; };
C505A18319B9B63C63877858 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = "<absolute>"; };
C84546C18DCBB04166195DCF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = "<absolute>"; };
CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = "<absolute>"; };
CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = "<absolute>"; };
CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = "<absolute>"; };
CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = "<absolute>"; };
CFFBE05DB004895080314289 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = "<absolute>"; };
D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = "<absolute>"; };
D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = "<absolute>"; };
D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = "<absolute>"; };
D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.3.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>"; };
D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.3.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/qconfig.pri"; sourceTree = "<absolute>"; };
D5141F795670589C8CC41CBC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = "<absolute>"; };
D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.3.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.3.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = "<absolute>"; };
D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = "<absolute>"; };
D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = "<absolute>"; };
DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = "<absolute>"; };
DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.3.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
DF8188E30892A4654B984221 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = "<absolute>"; };
E37365B4489B4918BEBB707D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = "<absolute>"; };
E432DA897A5F027987342E8F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = "<absolute>"; };
E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = "<absolute>"; };
E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = "<absolute>"; };
E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.3.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = "<absolute>"; };
EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = "<absolute>"; };
EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = "<absolute>"; };
EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.3.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/mac.conf"; sourceTree = "<absolute>"; };
F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
F0A58515945747E36783CC21 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; 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.3.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = "<absolute>"; };
F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.3.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/clang-mac.conf"; sourceTree = "<absolute>"; };
F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = "<absolute>"; };
F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = "<absolute>"; };
F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = "<absolute>"; };
F9BEAA743A908603687DA204 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = "<absolute>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
D1C883685E82D5676953459A /* Link Binary With Libraries */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */,
328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */,
668DDDA0C55405E7FCFD6CA5 /* CoreServices.framework in Link Binary With Libraries */,
F8B465CE34D8DF87AAE95913 /* CoreFoundation.framework in Link Binary With Libraries */,
F26454630C80841CBDCFE1CA /* Foundation.framework in Link Binary With Libraries */,
8771A8C96E9C391044035D99 /* OpenGL.framework in Link Binary With Libraries */,
E45E51A644D5FC9F942ECE55 /* AGL.framework in Link Binary With Libraries */,
D1FA8AF31837B51C762A9D4D /* qcocoa in Link Binary With Libraries */,
F8ED42CF8679BF83227DAFC4 /* Carbon.framework in Link Binary With Libraries */,
8D267F2E4776F0ECA2F49DC8 /* IOKit.framework in Link Binary With Libraries */,
1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */,
D22929A2B8C5281567FCACDC /* Qt5PlatformSupport in Link Binary With Libraries */,
BE6AB9DF1C4880624131C669 /* Qt5Widgets in Link Binary With Libraries */,
A9563D9C9FD0D76FAAF1CA96 /* qdds in Link Binary With Libraries */,
7CA5405B8503BFFC60932D2B /* qicns in Link Binary With Libraries */,
496FD9CEEB508016AFB9F928 /* qico in Link Binary With Libraries */,
59789101736112A570B8EFE6 /* qjp2 in Link Binary With Libraries */,
FBD56E2AC34F76BFFDB68619 /* qmng in Link Binary With Libraries */,
7F76437B577F737145996DC3 /* qtga in Link Binary With Libraries */,
C06DDE378A7AC1FA9E6FF69A /* qtiff in Link Binary With Libraries */,
A3F8F2284013928A02AE5C38 /* qwbmp in Link Binary With Libraries */,
F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */,
9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */,
8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */,
B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */,
);
name = "Link Binary With Libraries";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
25B08E2869634E9BCBA333A2 /* Generated Sources */ = {
isa = PBXGroup;
children = (
D0B536A85E53302E4F66CE23 /* GeneratedFiles */,
);
name = "Generated Sources";
sourceTree = "<Group>";
};
2EB56BE3C2D93CDAB0C52E67 /* Sources */ = {
isa = PBXGroup;
children = (
73F2E45FDEB381A085D37A49 /* SourceFiles */,
A9341A7B02F69BC5802268AA /* metaemoji_plugin_import.cpp */,
);
name = Sources;
sourceTree = "<Group>";
};
31562E815E3DF5B1A777D3EF /* _other */ = {
isa = PBXGroup;
children = (
3AC2626B26B65AA88F06BFB5 /* memain.cpp */,
1F47C130E1F45B4A5A91DB5E /* genemoji.cpp */,
E981470FA003A8DCE3C52E59 /* memain.h */,
58308B26DE991A86E8589883 /* genemoji.h */,
);
name = _other;
sourceTree = "<Group>";
};
73F2E45FDEB381A085D37A49 /* SourceFiles */ = {
isa = PBXGroup;
children = (
31562E815E3DF5B1A777D3EF /* _other */,
);
name = SourceFiles;
sourceTree = "<Group>";
};
74B182DB50CB5611B5C1C297 /* Supporting Files */ = {
isa = PBXGroup;
children = (
F13124A218B58585B027D96A /* MetaEmoji.pro */,
6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.3.0/mkspecs/qdevice.pri */,
669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.3.0/mkspecs/common/shell-unix.conf */,
0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.3.0/mkspecs/common/unix.conf */,
EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.3.0/mkspecs/common/mac.conf */,
817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.3.0/mkspecs/common/macx.conf */,
45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base.conf */,
A9E30FA27827990C5F182223 /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base-mac.conf */,
8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.3.0/mkspecs/common/clang.conf */,
F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.3.0/mkspecs/common/clang-mac.conf */,
D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.3.0/mkspecs/qconfig.pri */,
ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth.pri */,
2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth_private.pri */,
BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bootstrap_private.pri */,
CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_clucene_private.pri */,
77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent.pri */,
7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent_private.pri */,
7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core.pri */,
5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core_private.pri */,
7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative.pri */,
89863CCAF1D29037AE95755D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative_private.pri */,
F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer.pri */,
7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer_private.pri */,
69347C39E4D922E94D0860BF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designercomponents_private.pri */,
360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio.pri */,
4C6C71914B1926119120DACD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio_private.pri */,
23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui.pri */,
D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui_private.pri */,
FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help.pri */,
D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help_private.pri */,
A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras.pri */,
33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras_private.pri */,
D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia.pri */,
E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia_private.pri */,
28BD0D10214709D95B161E24 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets.pri */,
D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */,
293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network.pri */,
382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network_private.pri */,
8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc.pri */,
B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc_private.pri */,
5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl.pri */,
E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl_private.pri */,
E432DA897A5F027987342E8F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions.pri */,
5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions_private.pri */,
8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_platformsupport_private.pri */,
F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning.pri */,
E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning_private.pri */,
6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport.pri */,
D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport_private.pri */,
B382B645B34234E451AE5D94 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml.pri */,
6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml_private.pri */,
4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */,
DF8188E30892A4654B984221 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest.pri */,
ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest_private.pri */,
5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */,
16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick.pri */,
8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick_private.pri */,
82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickparticles_private.pri */,
D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets.pri */,
B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */,
CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script.pri */,
C505A18319B9B63C63877858 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script_private.pri */,
CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools.pri */,
A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools_private.pri */,
85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors.pri */,
BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors_private.pri */,
BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport.pri */,
311004331A04F3D69C98643C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport_private.pri */,
7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql.pri */,
075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri */,
ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg.pri */,
8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg_private.pri */,
DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib.pri */,
8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib_private.pri */,
E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools.pri */,
B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools_private.pri */,
8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets.pri */,
87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets_private.pri */,
A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets.pri */,
8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets_private.pri */,
AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml.pri */,
E37365B4489B4918BEBB707D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml_private.pri */,
2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns.pri */,
F9BEAA743A908603687DA204 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */,
D5141F795670589C8CC41CBC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */,
1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfcamera.pri */,
F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */,
AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcocoa.pri */,
EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */,
111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdds.pri */,
3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */,
2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */,
EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qicns.pri */,
C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qico.pri */,
45DB132B756499D4DF38430E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qjp2.pri */,
B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qminimal.pri */,
F0A58515945747E36783CC21 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */,
B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */,
EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */,
3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */,
946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmng.pri */,
CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qoffscreen.pri */,
9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qqt7engine.pri */,
B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsqlite.pri */,
F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvg.pri */,
CFFBE05DB004895080314289 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvgicon.pri */,
247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */,
87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */,
24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */,
060A694B42A4555240009936 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri */,
BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtiff.pri */,
B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */,
74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */,
C84546C18DCBB04166195DCF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */,
AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */,
8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */,
892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */,
A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */,
346287C9E754E7C458153F03 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwbmp.pri */,
B26239063A068F800A2C95F4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwebp.pri */,
63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf */,
85061B1DA49D125991117950 /* /usr/local/Qt-5.3.0/mkspecs/macx-xcode/qmake.conf */,
AB745978DF0F41D1801ABDA6 /* .qmake.stash */,
);
name = "Supporting Files";
sourceTree = "<Group>";
};
801973D3334D0FCA849CF485 /* Debug */ = {
isa = PBXGroup;
children = (
93E4BE1A02365B73BAF00B73 /* moc_genemoji.cpp */,
);
name = Debug;
sourceTree = "<Group>";
};
AF39DD055C3EF8226FBE929D /* Frameworks */ = {
isa = PBXGroup;
children = (
AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */,
DFD7912080BC557230093752 /* ApplicationServices.framework */,
9742F24EE18EA44D52824F1E /* CoreServices.framework */,
4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */,
FCC237CA5AD60B9BA4447615 /* Foundation.framework */,
D4B32C2222F82AC56BADEB21 /* OpenGL.framework */,
8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */,
D53D8E6A188E05078A114294 /* qcocoa */,
9DFF62A901D70814B8A323D4 /* Carbon.framework */,
A1A67BEAA744704B29168D39 /* IOKit.framework */,
DBF506D10449BFABD45B82DA /* Qt5PrintSupport */,
E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */,
4689C06178B60B84E7F3A3B7 /* Qt5Widgets */,
D3D1BE0BEA3AEE0551AD39AC /* qdds */,
31120EDB269DFF13E1D49847 /* qicns */,
8F500B5166907B6D9A7C3E3D /* qico */,
F0681BC551FC8A2B132FC646 /* qjp2 */,
83D37373949868693FB7816D /* qmng */,
DCEFD9167C239650120B0145 /* qtga */,
F2453BA07315EB9F34F1CD57 /* qtiff */,
8CF51323544B886B8F4A2232 /* qwbmp */,
ADC6308023253CEA51F86E21 /* qwebp */,
04391BE7A8B9D811E255100A /* Qt5Gui */,
D6193B79CECC9DD0142D1200 /* qtharfbuzzng */,
5A80A1907B6CFFB524C1E57D /* Qt5Core */,
);
name = Frameworks;
sourceTree = "<Group>";
};
D0B536A85E53302E4F66CE23 /* GeneratedFiles */ = {
isa = PBXGroup;
children = (
801973D3334D0FCA849CF485 /* Debug */,
);
name = GeneratedFiles;
sourceTree = "<Group>";
};
E8C543AB96796ECAA2E65C57 /* MetaEmoji */ = {
isa = PBXGroup;
children = (
2EB56BE3C2D93CDAB0C52E67 /* Sources */,
25B08E2869634E9BCBA333A2 /* Generated Sources */,
74B182DB50CB5611B5C1C297 /* Supporting Files */,
AF39DD055C3EF8226FBE929D /* Frameworks */,
FE0A091FDBFB3E9C31B7A1BD /* Products */,
);
name = MetaEmoji;
sourceTree = "<Group>";
};
FE0A091FDBFB3E9C31B7A1BD /* Products */ = {
isa = PBXGroup;
children = (
C3345709A0BD182590087379 /* MetaEmoji.app */,
);
name = Products;
sourceTree = "<Group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
E4122523B1AB28431125160A /* MetaEmoji */ = {
isa = PBXNativeTarget;
buildConfigurationList = 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "MetaEmoji" */;
buildPhases = (
F7E50F631C51CD5B5DC0BC43 /* Compile Sources */,
D1C883685E82D5676953459A /* Link Binary With Libraries */,
);
buildRules = (
);
dependencies = (
8F9AEC020DB94B2A3918B1FE /* PBXTargetDependency */,
);
name = MetaEmoji;
productInstallPath = ../Mac/DebugEmoji/;
productName = MetaEmoji;
productReference = C3345709A0BD182590087379 /* MetaEmoji.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
6DB9C3763D02B1415CD9D565 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0510;
};
buildConfigurationList = DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "MetaEmoji" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
en,
);
mainGroup = E8C543AB96796ECAA2E65C57 /* MetaEmoji */;
productRefGroup = FE0A091FDBFB3E9C31B7A1BD /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
E4122523B1AB28431125160A /* MetaEmoji */,
D93715D85BD26B270C3CC80B /* Preprocess */,
);
};
/* End PBXProject section */
/* Begin PBXShellScriptBuildPhase section */
7EF0942E79C014DCEC8976BC /* Qt Preprocessors */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
name = "Qt Preprocessors";
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "make -C . -f MetaEmoji.xcodeproj/qt_preprocess.mak";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
F7E50F631C51CD5B5DC0BC43 /* Compile Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
83425F7776C9E52C29BE0E6F /* memain.cpp in Compile Sources */,
C5357D951917482510CE3E54 /* genemoji.cpp in Compile Sources */,
4B166C0FE4A3C31F5E3D05CE /* metaemoji_plugin_import.cpp in Compile Sources */,
C4F1177BDAACCF1E50ACCED9 /* moc_genemoji.cpp in Compile Sources */,
);
name = "Compile Sources";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
8F9AEC020DB94B2A3918B1FE /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = D93715D85BD26B270C3CC80B /* Preprocess */;
targetProxy = 0708466E1954218200B5AE3A /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
339EE1B2CC4FC24589A0EA95 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Emoji$(EFFECTIVE_PLATFORM_NAME)";
COPY_PHASE_STRIP = YES;
DYLIB_COMPATIBILITY_VERSION = 1.0;
DYLIB_CURRENT_VERSION = 1.0.0;
FRAMEWORK_SEARCH_PATHS = "";
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui,
../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore,
../../Libraries/QtStatic/qtbase/include,
"/usr/local/Qt-5.3.0/include",
"/usr/local/Qt-5.3.0/include/QtGui",
"/usr/local/Qt-5.3.0/include/QtCore",
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/AGL.framework/Headers,
"/usr/local/Qt-5.3.0/mkspecs/macx-clang",
);
INFOPLIST_FILE = Emoji.plist;
INSTALL_DIR = ../Mac/ReleaseEmoji/;
LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++";
LIBRARY_SEARCH_PATHS = (
/System/Library/Frameworks/,
"/usr/local/Qt-5.3.0/lib",
"/usr/local/Qt-5.3.0/plugins/platforms",
"/usr/local/Qt-5.3.0/plugins/imageformats",
);
MACOSX_DEPLOYMENT_TARGET = 10.7;
OBJROOT = ./../Mac/ReleaseIntermediateEmoji/;
OTHER_CFLAGS = (
"-pipe",
"-g",
"-Wall",
"-W",
"-fPIE",
"-D_DEBUG",
"-DQT_GUI_LIB",
"-DQT_CORE_LIB",
);
OTHER_CPLUSPLUSFLAGS = (
"-pipe",
"-g",
"-std=c++11",
"-stdlib=libc++",
"-Wall",
"-W",
"-fPIE",
"-D_DEBUG",
"-DQT_GUI_LIB",
"-DQT_CORE_LIB",
);
OTHER_LDFLAGS = (
"-headerpad_max_install_names",
"-stdlib=libc++",
"-L/usr/local/Qt-5.3.0/lib",
"-L/usr/local/Qt-5.3.0/plugins/platforms",
"-lcups",
"-L/usr/local/Qt-5.3.0/plugins/imageformats",
"-lz",
"-lm",
);
PRODUCT_NAME = MetaEmoji;
QT_LIBRARY_SUFFIX = "";
SDKROOT = macosx;
SYMROOT = ./../Mac;
};
name = Release;
};
3AA6C32AC930069E80220CF1 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Emoji$(EFFECTIVE_PLATFORM_NAME)";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DYLIB_COMPATIBILITY_VERSION = 1.0;
DYLIB_CURRENT_VERSION = 1.0.0;
FRAMEWORK_SEARCH_PATHS = "";
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui,
../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore,
../../Libraries/QtStatic/qtbase/include,
"/usr/local/Qt-5.3.0/include",
"/usr/local/Qt-5.3.0/include/QtGui",
"/usr/local/Qt-5.3.0/include/QtCore",
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/AGL.framework/Headers,
"/usr/local/Qt-5.3.0/mkspecs/macx-clang",
);
INFOPLIST_FILE = Emoji.plist;
INSTALL_DIR = ../Mac/DebugEmoji/;
LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++";
LIBRARY_SEARCH_PATHS = (
/System/Library/Frameworks/,
"/usr/local/Qt-5.3.0/lib",
"/usr/local/Qt-5.3.0/plugins/platforms",
"/usr/local/Qt-5.3.0/plugins/imageformats",
);
MACOSX_DEPLOYMENT_TARGET = 10.7;
OBJROOT = ./../Mac/DebugIntermediateEmoji/;
ONLY_ACTIVE_ARCH = YES;
OTHER_CFLAGS = (
"-pipe",
"-g",
"-Wall",
"-W",
"-fPIE",
"-D_DEBUG",
"-DQT_GUI_LIB",
"-DQT_CORE_LIB",
);
OTHER_CPLUSPLUSFLAGS = (
"-pipe",
"-g",
"-std=c++11",
"-stdlib=libc++",
"-Wall",
"-W",
"-fPIE",
"-D_DEBUG",
"-DQT_GUI_LIB",
"-DQT_CORE_LIB",
);
OTHER_LDFLAGS = (
"-headerpad_max_install_names",
"-stdlib=libc++",
"-L/usr/local/Qt-5.3.0/lib",
"-L/usr/local/Qt-5.3.0/plugins/platforms",
"-lcups",
"-L/usr/local/Qt-5.3.0/plugins/imageformats",
"-lz",
"-lm",
);
PRODUCT_NAME = MetaEmoji;
QT_LIBRARY_SUFFIX = _debug;
SDKROOT = macosx;
SYMROOT = ./../Mac;
};
name = Debug;
};
6666AA5E688052234F6758D8 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
PRODUCT_NAME = MetaEmoji;
QT_LIBRARY_SUFFIX = "";
SDKROOT = macosx;
};
name = Release;
};
77418F46922677BB04ED38DD /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
PRODUCT_NAME = MetaEmoji;
QT_LIBRARY_SUFFIX = _debug;
SDKROOT = macosx;
};
name = Debug;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "MetaEmoji" */ = {
isa = XCConfigurationList;
buildConfigurations = (
77418F46922677BB04ED38DD /* Debug */,
6666AA5E688052234F6758D8 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "MetaEmoji" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3AA6C32AC930069E80220CF1 /* Debug */,
339EE1B2CC4FC24589A0EA95 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
/* End XCConfigurationList section */
};
rootObject = 6DB9C3763D02B1415CD9D565 /* Project object */;
}

View file

@ -0,0 +1,345 @@
#############################################################################
# Makefile for building: ../Mac/DebugEmoji/MetaEmoji.app/Contents/MacOS/MetaEmoji
# Generated by qmake (3.0) (Qt 5.3.0)
# Project: MetaEmoji.pro
# Template: app
# Command: /usr/local/Qt-5.3.0/bin/qmake -spec macx-xcode -o MetaEmoji.xcodeproj/project.pbxproj MetaEmoji.pro
#############################################################################
MAKEFILE = project.pbxproj
QMAKE = /usr/local/Qt-5.3.0/bin/qmake
MetaEmoji.xcodeproj/project.pbxproj: MetaEmoji.pro /usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf /usr/local/Qt-5.3.0/mkspecs/features/spec_pre.prf \
/usr/local/Qt-5.3.0/mkspecs/qdevice.pri \
/usr/local/Qt-5.3.0/mkspecs/features/device_config.prf \
/usr/local/Qt-5.3.0/mkspecs/common/shell-unix.conf \
/usr/local/Qt-5.3.0/mkspecs/common/unix.conf \
/usr/local/Qt-5.3.0/mkspecs/common/mac.conf \
/usr/local/Qt-5.3.0/mkspecs/common/macx.conf \
/usr/local/Qt-5.3.0/mkspecs/common/gcc-base.conf \
/usr/local/Qt-5.3.0/mkspecs/common/gcc-base-mac.conf \
/usr/local/Qt-5.3.0/mkspecs/common/clang.conf \
/usr/local/Qt-5.3.0/mkspecs/common/clang-mac.conf \
/usr/local/Qt-5.3.0/mkspecs/qconfig.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bootstrap_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_clucene_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designercomponents_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_platformsupport_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmldevtools_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickparticles_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfcamera.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcocoa.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdds.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qgenericbearer.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qicns.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qico.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qjp2.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qminimal.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmng.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qoffscreen.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qqt7engine.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsqlite.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvg.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvgicon.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtiff.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwbmp.pri \
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwebp.pri \
/usr/local/Qt-5.3.0/mkspecs/features/qt_functions.prf \
/usr/local/Qt-5.3.0/mkspecs/features/qt_config.prf \
/usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf \
/usr/local/Qt-5.3.0/mkspecs/macx-xcode/qmake.conf \
/usr/local/Qt-5.3.0/mkspecs/features/spec_post.prf \
.qmake.stash \
/usr/local/Qt-5.3.0/mkspecs/features/exclusive_builds.prf \
/usr/local/Qt-5.3.0/mkspecs/features/default_pre.prf \
/usr/local/Qt-5.3.0/mkspecs/features/mac/default_pre.prf \
/usr/local/Qt-5.3.0/mkspecs/features/resolve_config.prf \
/usr/local/Qt-5.3.0/mkspecs/features/default_post.prf \
/usr/local/Qt-5.3.0/mkspecs/features/mac/sdk.prf \
/usr/local/Qt-5.3.0/mkspecs/features/mac/default_post.prf \
/usr/local/Qt-5.3.0/mkspecs/features/c++11.prf \
/usr/local/Qt-5.3.0/mkspecs/features/mac/objective_c.prf \
/usr/local/Qt-5.3.0/mkspecs/features/warn_on.prf \
/usr/local/Qt-5.3.0/mkspecs/features/qt.prf \
/usr/local/Qt-5.3.0/mkspecs/features/resources.prf \
/usr/local/Qt-5.3.0/mkspecs/features/moc.prf \
/usr/local/Qt-5.3.0/mkspecs/features/unix/opengl.prf \
/usr/local/Qt-5.3.0/mkspecs/features/unix/thread.prf \
/usr/local/Qt-5.3.0/mkspecs/features/mac/rez.prf \
/usr/local/Qt-5.3.0/mkspecs/features/testcase_targets.prf \
/usr/local/Qt-5.3.0/mkspecs/features/exceptions.prf \
/usr/local/Qt-5.3.0/mkspecs/features/yacc.prf \
/usr/local/Qt-5.3.0/mkspecs/features/lex.prf \
MetaEmoji.pro \
/usr/local/Qt-5.3.0/lib/libQt5Gui_debug.prl \
/usr/local/Qt-5.3.0/lib/libQt5Core_debug.prl \
/usr/local/Qt-5.3.0/lib/libqtharfbuzzng_debug.prl \
/usr/local/Qt-5.3.0/plugins/platforms/libqcocoa_debug.prl \
/usr/local/Qt-5.3.0/lib/libQt5PrintSupport_debug.prl \
/usr/local/Qt-5.3.0/lib/libQt5Widgets_debug.prl \
/usr/local/Qt-5.3.0/lib/libQt5PlatformSupport_debug.prl \
/usr/local/Qt-5.3.0/plugins/imageformats/libqdds_debug.prl \
/usr/local/Qt-5.3.0/plugins/imageformats/libqicns_debug.prl \
/usr/local/Qt-5.3.0/plugins/imageformats/libqico_debug.prl \
/usr/local/Qt-5.3.0/plugins/imageformats/libqjp2_debug.prl \
/usr/local/Qt-5.3.0/plugins/imageformats/libqmng_debug.prl \
/usr/local/Qt-5.3.0/plugins/imageformats/libqtga_debug.prl \
/usr/local/Qt-5.3.0/plugins/imageformats/libqtiff_debug.prl \
/usr/local/Qt-5.3.0/plugins/imageformats/libqwbmp_debug.prl \
/usr/local/Qt-5.3.0/plugins/imageformats/libqwebp_debug.prl
$(QMAKE) -spec macx-xcode -o MetaEmoji.xcodeproj/project.pbxproj MetaEmoji.pro
/usr/local/Qt-5.3.0/mkspecs/features/spec_pre.prf:
/usr/local/Qt-5.3.0/mkspecs/qdevice.pri:
/usr/local/Qt-5.3.0/mkspecs/features/device_config.prf:
/usr/local/Qt-5.3.0/mkspecs/common/shell-unix.conf:
/usr/local/Qt-5.3.0/mkspecs/common/unix.conf:
/usr/local/Qt-5.3.0/mkspecs/common/mac.conf:
/usr/local/Qt-5.3.0/mkspecs/common/macx.conf:
/usr/local/Qt-5.3.0/mkspecs/common/gcc-base.conf:
/usr/local/Qt-5.3.0/mkspecs/common/gcc-base-mac.conf:
/usr/local/Qt-5.3.0/mkspecs/common/clang.conf:
/usr/local/Qt-5.3.0/mkspecs/common/clang-mac.conf:
/usr/local/Qt-5.3.0/mkspecs/qconfig.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bootstrap_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_clucene_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designercomponents_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_platformsupport_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmldevtools_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickparticles_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfcamera.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcocoa.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdds.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qgenericbearer.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qicns.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qico.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qjp2.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qminimal.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmng.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qoffscreen.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qqt7engine.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsqlite.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvg.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvgicon.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtiff.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwbmp.pri:
/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwebp.pri:
/usr/local/Qt-5.3.0/mkspecs/features/qt_functions.prf:
/usr/local/Qt-5.3.0/mkspecs/features/qt_config.prf:
/usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf:
/usr/local/Qt-5.3.0/mkspecs/macx-xcode/qmake.conf:
/usr/local/Qt-5.3.0/mkspecs/features/spec_post.prf:
.qmake.stash:
/usr/local/Qt-5.3.0/mkspecs/features/exclusive_builds.prf:
/usr/local/Qt-5.3.0/mkspecs/features/default_pre.prf:
/usr/local/Qt-5.3.0/mkspecs/features/mac/default_pre.prf:
/usr/local/Qt-5.3.0/mkspecs/features/resolve_config.prf:
/usr/local/Qt-5.3.0/mkspecs/features/default_post.prf:
/usr/local/Qt-5.3.0/mkspecs/features/mac/sdk.prf:
/usr/local/Qt-5.3.0/mkspecs/features/mac/default_post.prf:
/usr/local/Qt-5.3.0/mkspecs/features/c++11.prf:
/usr/local/Qt-5.3.0/mkspecs/features/mac/objective_c.prf:
/usr/local/Qt-5.3.0/mkspecs/features/warn_on.prf:
/usr/local/Qt-5.3.0/mkspecs/features/qt.prf:
/usr/local/Qt-5.3.0/mkspecs/features/resources.prf:
/usr/local/Qt-5.3.0/mkspecs/features/moc.prf:
/usr/local/Qt-5.3.0/mkspecs/features/unix/opengl.prf:
/usr/local/Qt-5.3.0/mkspecs/features/unix/thread.prf:
/usr/local/Qt-5.3.0/mkspecs/features/mac/rez.prf:
/usr/local/Qt-5.3.0/mkspecs/features/testcase_targets.prf:
/usr/local/Qt-5.3.0/mkspecs/features/exceptions.prf:
/usr/local/Qt-5.3.0/mkspecs/features/yacc.prf:
/usr/local/Qt-5.3.0/mkspecs/features/lex.prf:
MetaEmoji.pro:
/usr/local/Qt-5.3.0/lib/libQt5Gui_debug.prl:
/usr/local/Qt-5.3.0/lib/libQt5Core_debug.prl:
/usr/local/Qt-5.3.0/lib/libqtharfbuzzng_debug.prl:
/usr/local/Qt-5.3.0/plugins/platforms/libqcocoa_debug.prl:
/usr/local/Qt-5.3.0/lib/libQt5PrintSupport_debug.prl:
/usr/local/Qt-5.3.0/lib/libQt5Widgets_debug.prl:
/usr/local/Qt-5.3.0/lib/libQt5PlatformSupport_debug.prl:
/usr/local/Qt-5.3.0/plugins/imageformats/libqdds_debug.prl:
/usr/local/Qt-5.3.0/plugins/imageformats/libqicns_debug.prl:
/usr/local/Qt-5.3.0/plugins/imageformats/libqico_debug.prl:
/usr/local/Qt-5.3.0/plugins/imageformats/libqjp2_debug.prl:
/usr/local/Qt-5.3.0/plugins/imageformats/libqmng_debug.prl:
/usr/local/Qt-5.3.0/plugins/imageformats/libqtga_debug.prl:
/usr/local/Qt-5.3.0/plugins/imageformats/libqtiff_debug.prl:
/usr/local/Qt-5.3.0/plugins/imageformats/libqwbmp_debug.prl:
/usr/local/Qt-5.3.0/plugins/imageformats/libqwebp_debug.prl:
qmake: FORCE
@$(QMAKE) -spec macx-xcode -o MetaEmoji.xcodeproj/project.pbxproj MetaEmoji.pro
qmake_all: FORCE

View file

@ -0,0 +1,70 @@
#############################################################################
# Makefile for building: ../Mac/DebugEmoji/MetaEmoji.app/Contents/MacOS/MetaEmoji
# Generated by qmake (3.0) (Qt 5.3.0)
# Project: MetaEmoji.pro
# Template: app
# Command: /usr/local/Qt-5.3.0/bin/qmake -spec macx-xcode -o MetaEmoji.xcodeproj/project.pbxproj MetaEmoji.pro
#############################################################################
MAKEFILE = project.pbxproj
MOC = /usr/local/Qt-5.3.0/bin/moc
UIC =
LEX = flex
LEXFLAGS =
YACC = yacc
YACCFLAGS = -d
DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB
INCPATH = -I/usr/local/Qt-5.3.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtGui -I/usr/local/Qt-5.3.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
MOVE = mv -f
IMAGES =
PARSERS =
preprocess: $(PARSERS) compilers
clean preprocess_clean: parser_clean compiler_clean
parser_clean:
mocclean: compiler_moc_header_clean compiler_moc_source_clean
mocables: compiler_moc_header_make_all compiler_moc_source_make_all
check: first
compilers: GeneratedFiles/Debug/moc_genemoji.cpp
compiler_objective_c_make_all:
compiler_objective_c_clean:
compiler_rcc_make_all:
compiler_rcc_clean:
compiler_moc_header_make_all: GeneratedFiles/Debug/moc_genemoji.cpp
compiler_moc_header_clean:
-$(DEL_FILE) GeneratedFiles/Debug/moc_genemoji.cpp
GeneratedFiles/Debug/moc_genemoji.cpp: ../../Libraries/QtStatic/qtbase/include/QtCore/QMap \
../../Libraries/QtStatic/qtbase/include/QtCore/QVector \
../../Libraries/QtStatic/qtbase/include/QtCore/QFile \
../../Libraries/QtStatic/qtbase/include/QtCore/QFileInfo \
../../Libraries/QtStatic/qtbase/include/QtCore/QBuffer \
../../Libraries/QtStatic/qtbase/include/QtCore/QDir \
../../Libraries/QtStatic/qtbase/include/QtCore/QRegularExpression \
../../Libraries/QtStatic/qtbase/include/QtGui/QImage \
../../Libraries/QtStatic/qtbase/include/QtGui/QPixmap \
../../Libraries/QtStatic/qtbase/include/QtGui/QPainter \
../../Libraries/QtStatic/qtbase/include/QtCore/QTextStream \
../../Libraries/QtStatic/qtbase/include/QtCore/QString \
../../Libraries/QtStatic/qtbase/include/QtCore/QCoreApplication \
../../Libraries/QtStatic/qtbase/include/QtGui/QGuiApplication \
SourceFiles/_other/genemoji.h
/usr/local/Qt-5.3.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.3.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.3.0/include/QtGui/5.3.0/QtGui -I/usr/local/Qt-5.3.0/include/QtCore/5.3.0/QtCore -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtGui -I/usr/local/Qt-5.3.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_clean:
compiler_rez_source_make_all:
compiler_rez_source_clean:
compiler_yacc_decl_make_all:
compiler_yacc_decl_clean:
compiler_yacc_impl_make_all:
compiler_yacc_impl_clean:
compiler_lex_make_all:
compiler_lex_clean:
compiler_clean: compiler_moc_header_clean

View file

@ -599,6 +599,7 @@
CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Lang$(EFFECTIVE_PLATFORM_NAME)";
COPY_PHASE_STRIP = YES; COPY_PHASE_STRIP = YES;
DYLIB_COMPATIBILITY_VERSION = 1.0; DYLIB_COMPATIBILITY_VERSION = 1.0;
DYLIB_CURRENT_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 1.0.0;
@ -633,7 +634,7 @@
"/usr/local/Qt-5.3.0/plugins/imageformats", "/usr/local/Qt-5.3.0/plugins/imageformats",
); );
MACOSX_DEPLOYMENT_TARGET = 10.7; MACOSX_DEPLOYMENT_TARGET = 10.7;
OBJROOT = ../Mac/DebugIntermediateLang/; OBJROOT = ./../Mac/ReleaseIntermediateLang;
OTHER_CFLAGS = ( OTHER_CFLAGS = (
"-pipe", "-pipe",
"-g", "-g",
@ -669,7 +670,7 @@
PRODUCT_NAME = MetaLang; PRODUCT_NAME = MetaLang;
QT_LIBRARY_SUFFIX = ""; QT_LIBRARY_SUFFIX = "";
SDKROOT = macosx; SDKROOT = macosx;
SYMROOT = ../Mac/ReleaseLang; SYMROOT = ./../Mac;
}; };
name = Release; name = Release;
}; };
@ -683,6 +684,7 @@
CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Lang$(EFFECTIVE_PLATFORM_NAME)";
COPY_PHASE_STRIP = NO; COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf; DEBUG_INFORMATION_FORMAT = dwarf;
DYLIB_COMPATIBILITY_VERSION = 1.0; DYLIB_COMPATIBILITY_VERSION = 1.0;
@ -719,7 +721,7 @@
"/usr/local/Qt-5.3.0/plugins/imageformats", "/usr/local/Qt-5.3.0/plugins/imageformats",
); );
MACOSX_DEPLOYMENT_TARGET = 10.7; MACOSX_DEPLOYMENT_TARGET = 10.7;
OBJROOT = ../Mac/DebugIntermediateLang/; OBJROOT = ./../Mac/DebugIntermediateLang;
ONLY_ACTIVE_ARCH = YES; ONLY_ACTIVE_ARCH = YES;
OTHER_CFLAGS = ( OTHER_CFLAGS = (
"-pipe", "-pipe",
@ -756,7 +758,7 @@
PRODUCT_NAME = MetaLang; PRODUCT_NAME = MetaLang;
QT_LIBRARY_SUFFIX = _debug; QT_LIBRARY_SUFFIX = _debug;
SDKROOT = macosx; SDKROOT = macosx;
SYMROOT = ../Mac/DebugLang; SYMROOT = ./../Mac;
}; };
name = Debug; name = Debug;
}; };
@ -764,7 +766,6 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Lang$(EFFECTIVE_PLATFORM_NAME)";
COPY_PHASE_STRIP = YES; COPY_PHASE_STRIP = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
@ -779,11 +780,9 @@
"/usr/local/Qt-5.3.0/mkspecs/macx-clang", "/usr/local/Qt-5.3.0/mkspecs/macx-clang",
); );
INSTALL_DIR = ../Mac/ReleaseLang/; INSTALL_DIR = ../Mac/ReleaseLang/;
OBJROOT = ../Mac/ReleaseIntermediateLang;
PRODUCT_NAME = MetaLang; PRODUCT_NAME = MetaLang;
QT_LIBRARY_SUFFIX = ""; QT_LIBRARY_SUFFIX = "";
SDKROOT = macosx; SDKROOT = macosx;
SYMROOT = ./../Mac;
}; };
name = Release; name = Release;
}; };
@ -791,7 +790,6 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Lang$(EFFECTIVE_PLATFORM_NAME)";
COPY_PHASE_STRIP = NO; COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf; DEBUG_INFORMATION_FORMAT = dwarf;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
@ -808,11 +806,9 @@
"/usr/local/Qt-5.3.0/mkspecs/macx-clang", "/usr/local/Qt-5.3.0/mkspecs/macx-clang",
); );
INSTALL_DIR = ../Mac/DebugLang/; INSTALL_DIR = ../Mac/DebugLang/;
OBJROOT = ../Mac/DebugIntermediateLang;
PRODUCT_NAME = MetaLang; PRODUCT_NAME = MetaLang;
QT_LIBRARY_SUFFIX = _debug; QT_LIBRARY_SUFFIX = _debug;
SDKROOT = macosx; SDKROOT = macosx;
SYMROOT = ./../Mac;
}; };
name = Debug; name = Debug;
}; };

View file

@ -519,6 +519,7 @@
6DB9C3763D02B1415CD9D565 /* Project object */ = { 6DB9C3763D02B1415CD9D565 /* Project object */ = {
isa = PBXProject; isa = PBXProject;
attributes = { attributes = {
LastUpgradeCheck = 0510;
}; };
buildConfigurationList = DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "MetaStyle" */; buildConfigurationList = DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "MetaStyle" */;
compatibilityVersion = "Xcode 3.2"; compatibilityVersion = "Xcode 3.2";
@ -591,14 +592,26 @@
339EE1B2CC4FC24589A0EA95 /* Release */ = { 339EE1B2CC4FC24589A0EA95 /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ARCHS = x86_64;
CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang; CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Style$(EFFECTIVE_PLATFORM_NAME)";
COPY_PHASE_STRIP = YES; COPY_PHASE_STRIP = YES;
DYLIB_COMPATIBILITY_VERSION = 1.0; DYLIB_COMPATIBILITY_VERSION = 1.0;
DYLIB_CURRENT_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 1.0.0;
FRAMEWORK_SEARCH_PATHS = ""; FRAMEWORK_SEARCH_PATHS = "";
GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
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_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui, ../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui,
../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore, ../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore,
@ -621,7 +634,7 @@
"/usr/local/Qt-5.3.0/plugins/imageformats", "/usr/local/Qt-5.3.0/plugins/imageformats",
); );
MACOSX_DEPLOYMENT_TARGET = 10.7; MACOSX_DEPLOYMENT_TARGET = 10.7;
OBJROOT = ../Mac/DebugIntermediateStyle/; OBJROOT = ./../Mac/ReleaseIntermediateStyle;
OTHER_CFLAGS = ( OTHER_CFLAGS = (
"-pipe", "-pipe",
"-g", "-g",
@ -657,15 +670,21 @@
PRODUCT_NAME = MetaStyle; PRODUCT_NAME = MetaStyle;
QT_LIBRARY_SUFFIX = ""; QT_LIBRARY_SUFFIX = "";
SDKROOT = macosx; SDKROOT = macosx;
SYMROOT = ../Mac/ReleaseStyle; SYMROOT = ./../Mac;
}; };
name = Release; name = Release;
}; };
3AA6C32AC930069E80220CF1 /* Debug */ = { 3AA6C32AC930069E80220CF1 /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ARCHS = x86_64;
CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang; CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Style$(EFFECTIVE_PLATFORM_NAME)";
COPY_PHASE_STRIP = NO; COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf; DEBUG_INFORMATION_FORMAT = dwarf;
DYLIB_COMPATIBILITY_VERSION = 1.0; DYLIB_COMPATIBILITY_VERSION = 1.0;
@ -674,6 +693,12 @@
GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = 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_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui, ../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui,
../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore, ../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore,
@ -696,7 +721,8 @@
"/usr/local/Qt-5.3.0/plugins/imageformats", "/usr/local/Qt-5.3.0/plugins/imageformats",
); );
MACOSX_DEPLOYMENT_TARGET = 10.7; MACOSX_DEPLOYMENT_TARGET = 10.7;
OBJROOT = ../Mac/DebugIntermediateStyle/; OBJROOT = ./../Mac/DebugIntermediateStyle;
ONLY_ACTIVE_ARCH = YES;
OTHER_CFLAGS = ( OTHER_CFLAGS = (
"-pipe", "-pipe",
"-g", "-g",
@ -732,14 +758,14 @@
PRODUCT_NAME = MetaStyle; PRODUCT_NAME = MetaStyle;
QT_LIBRARY_SUFFIX = _debug; QT_LIBRARY_SUFFIX = _debug;
SDKROOT = macosx; SDKROOT = macosx;
SYMROOT = ../Mac/DebugStyle; SYMROOT = ./../Mac;
}; };
name = Debug; name = Debug;
}; };
6666AA5E688052234F6758D8 /* Release */ = { 6666AA5E688052234F6758D8 /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Style$(EFFECTIVE_PLATFORM_NAME)"; COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = YES; COPY_PHASE_STRIP = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
HEADER_SEARCH_PATHS = ( HEADER_SEARCH_PATHS = (
@ -754,18 +780,16 @@
"/usr/local/Qt-5.3.0/mkspecs/macx-clang", "/usr/local/Qt-5.3.0/mkspecs/macx-clang",
); );
INSTALL_DIR = ./../Mac/ReleaseStyle/; INSTALL_DIR = ./../Mac/ReleaseStyle/;
OBJROOT = ./../Mac/ReleaseIntermediateStyle;
PRODUCT_NAME = MetaStyle; PRODUCT_NAME = MetaStyle;
QT_LIBRARY_SUFFIX = ""; QT_LIBRARY_SUFFIX = "";
SDKROOT = macosx; SDKROOT = macosx;
SYMROOT = ./../Mac;
}; };
name = Release; name = Release;
}; };
77418F46922677BB04ED38DD /* Debug */ = { 77418F46922677BB04ED38DD /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Style$(EFFECTIVE_PLATFORM_NAME)"; COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO; COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf; DEBUG_INFORMATION_FORMAT = dwarf;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
@ -782,11 +806,9 @@
"/usr/local/Qt-5.3.0/mkspecs/macx-clang", "/usr/local/Qt-5.3.0/mkspecs/macx-clang",
); );
INSTALL_DIR = ./../Mac/DebugStyle/; INSTALL_DIR = ./../Mac/DebugStyle/;
OBJROOT = ./../Mac/DebugIntermediateStyle;
PRODUCT_NAME = MetaStyle; PRODUCT_NAME = MetaStyle;
QT_LIBRARY_SUFFIX = _debug; QT_LIBRARY_SUFFIX = _debug;
SDKROOT = macosx; SDKROOT = macosx;
SYMROOT = ./../Mac;
}; };
name = Debug; name = Debug;
}; };

View file

@ -2,21 +2,21 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>NSPrincipalClass</key> <key>CFBundleExecutable</key>
<string>NSApplication</string> <string>Packer</string>
<key>CFBundleGetInfoString</key>
<string>Update packer utility for tdesktop</string>
<key>CFBundleIconFile</key> <key>CFBundleIconFile</key>
<string></string> <string></string>
<key>CFBundleIdentifier</key>
<string>com.ddesktop.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleGetInfoString</key>
<string>Created by Qt/QMake</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleExecutable</key>
<string>MetaStyle</string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.${PRODUCT_NAME:rfc1034identifier}</string>
<key>NOTE</key> <key>NOTE</key>
<string>This file was generated by Qt/QMake.</string> <string></string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict> </dict>
</plist> </plist>

32
Telegram/Packer.pro Normal file
View file

@ -0,0 +1,32 @@
QT += core
CONFIG(debug, debug|release) {
DEFINES += _DEBUG
OBJECTS_DIR = ./../Mac/DebugIntermediatePacker
MOC_DIR = ./GeneratedFiles/Debug
DESTDIR = ./../Mac/DebugPacker
}
CONFIG(release, debug|release) {
OBJECTS_DIR = ./../Mac/ReleaseIntermediatePacker
MOC_DIR = ./GeneratedFiles/Release
DESTDIR = ./../Mac/ReleasePacker
}
macx {
QMAKE_INFO_PLIST = ./SourceFiles/_other/Packer.plist
QMAKE_LFLAGS += -framework Cocoa
}
SOURCES += \
./SourceFiles/_other/packer.cpp \
HEADERS += \
./SourceFiles/_other/packer.h \
INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui\
./../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore\
./../../Libraries/QtStatic/qtbase/include\
./../../Libraries/lzma/C
LIBS += -lcrypto -lssl -lz

View file

@ -0,0 +1,823 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXAggregateTarget section */
6E977D353048DB44129F752B /* Preprocess */ = {
isa = PBXAggregateTarget;
buildConfigurationList = 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "Packer" */;
buildPhases = (
7EF0942E79C014DCEC8976BC /* Qt Preprocessors */,
);
dependencies = (
);
name = Preprocess;
productName = "Qt Preprocess";
};
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
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 */; };
328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; };
496FD9CEEB508016AFB9F928 /* qico in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8F500B5166907B6D9A7C3E3D /* qico */; };
52B661A713AE959F9084E291 /* packer_plugin_import.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = CB20BF73330AAF80B8BC8907 /* packer_plugin_import.cpp */; settings = {ATTRIBUTES = (); }; };
59789101736112A570B8EFE6 /* qjp2 in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = F0681BC551FC8A2B132FC646 /* qjp2 */; };
668DDDA0C55405E7FCFD6CA5 /* CoreServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 9742F24EE18EA44D52824F1E /* CoreServices.framework */; };
7CA5405B8503BFFC60932D2B /* qicns in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 31120EDB269DFF13E1D49847 /* qicns */; };
7F76437B577F737145996DC3 /* qtga in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DCEFD9167C239650120B0145 /* qtga */; };
8771A8C96E9C391044035D99 /* OpenGL.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D4B32C2222F82AC56BADEB21 /* OpenGL.framework */; };
8D267F2E4776F0ECA2F49DC8 /* IOKit.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = A1A67BEAA744704B29168D39 /* IOKit.framework */; };
8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D6193B79CECC9DD0142D1200 /* qtharfbuzzng */; };
9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 04391BE7A8B9D811E255100A /* Qt5Gui */; };
A3F8F2284013928A02AE5C38 /* qwbmp in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8CF51323544B886B8F4A2232 /* qwbmp */; };
A9563D9C9FD0D76FAAF1CA96 /* qdds in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D3D1BE0BEA3AEE0551AD39AC /* qdds */; };
B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 5A80A1907B6CFFB524C1E57D /* Qt5Core */; };
BE6AB9DF1C4880624131C669 /* Qt5Widgets in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */; };
C06DDE378A7AC1FA9E6FF69A /* qtiff in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = F2453BA07315EB9F34F1CD57 /* qtiff */; };
D1FA8AF31837B51C762A9D4D /* qcocoa in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D53D8E6A188E05078A114294 /* qcocoa */; };
D22929A2B8C5281567FCACDC /* Qt5PlatformSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */; };
E45E51A644D5FC9F942ECE55 /* AGL.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */; };
EAA05789DF6EBAD24D3EFF96 /* packer.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = E3790AE49DBDB3F5EFA42FE1 /* packer.cpp */; settings = {ATTRIBUTES = (); }; };
F26454630C80841CBDCFE1CA /* Foundation.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = FCC237CA5AD60B9BA4447615 /* Foundation.framework */; };
F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = ADC6308023253CEA51F86E21 /* qwebp */; };
F8B465CE34D8DF87AAE95913 /* CoreFoundation.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */; };
F8ED42CF8679BF83227DAFC4 /* Carbon.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 9DFF62A901D70814B8A323D4 /* Carbon.framework */; };
FBD56E2AC34F76BFFDB68619 /* qmng in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 83D37373949868693FB7816D /* qmng */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
072AB35C1955F39D00328D9B /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 6DB9C3763D02B1415CD9D565 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 6E977D353048DB44129F752B;
remoteInfo = "Qt Preprocess";
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.3.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
060A694B42A4555240009936 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = "<absolute>"; };
075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = "<absolute>"; };
0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.3.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/unix.conf"; sourceTree = "<absolute>"; };
111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = "<absolute>"; };
16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = "<absolute>"; };
1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = "<absolute>"; };
23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = "<absolute>"; };
2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = "<absolute>"; };
247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = "<absolute>"; };
24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = "<absolute>"; };
28BD0D10214709D95B161E24 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = "<absolute>"; };
293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = "<absolute>"; };
2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = "<absolute>"; };
2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = "<absolute>"; };
311004331A04F3D69C98643C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = "<absolute>"; };
31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = "<absolute>"; };
346287C9E754E7C458153F03 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = "<absolute>"; };
360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = "<absolute>"; };
3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = "<absolute>"; };
382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = "<absolute>"; };
3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = "<absolute>"; };
45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/gcc-base.conf"; sourceTree = "<absolute>"; };
45DB132B756499D4DF38430E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = "<absolute>"; };
4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.3.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
4C6C71914B1926119120DACD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = "<absolute>"; };
5520A59148EC5EC44EF0D3CD /* Packer.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = Packer.pro; sourceTree = "<absolute>"; };
5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = "<absolute>"; };
5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.3.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>"; };
5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = "<absolute>"; };
5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = "<absolute>"; };
5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = "<absolute>"; };
6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = "<absolute>"; };
63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf"; sourceTree = "<absolute>"; };
669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.3.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/shell-unix.conf"; sourceTree = "<absolute>"; };
69347C39E4D922E94D0860BF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = "<absolute>"; };
6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = "<absolute>"; };
6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.3.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/qdevice.pri"; sourceTree = "<absolute>"; };
74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = "<absolute>"; };
77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = "<absolute>"; };
7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = "<absolute>"; };
7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = "<absolute>"; };
7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = "<absolute>"; };
7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = "<absolute>"; };
7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = "<absolute>"; };
817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.3.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/macx.conf"; sourceTree = "<absolute>"; };
82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = "<absolute>"; };
83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
85061B1DA49D125991117950 /* /usr/local/Qt-5.3.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = "<absolute>"; };
85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = "<absolute>"; };
87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = "<absolute>"; };
87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = "<absolute>"; };
8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = "<absolute>"; };
892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = "<absolute>"; };
89863CCAF1D29037AE95755D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = "<absolute>"; };
8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = "<absolute>"; };
8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = "<absolute>"; };
8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = "<absolute>"; };
8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.3.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/clang.conf"; sourceTree = "<absolute>"; };
8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.3.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>"; };
8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = "<absolute>"; };
8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = "<absolute>"; };
8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = "<absolute>"; };
8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = "<absolute>"; };
946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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; };
A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = "<absolute>"; };
A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = "<absolute>"; };
A9E30FA27827990C5F182223 /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = "<absolute>"; };
AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = "<absolute>"; };
AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = "<absolute>"; };
AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = "<absolute>"; };
ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = "<absolute>"; };
ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = "<absolute>"; };
ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = "<absolute>"; };
B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = "<absolute>"; };
B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = "<absolute>"; };
B26239063A068F800A2C95F4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = "<absolute>"; };
B382B645B34234E451AE5D94 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = "<absolute>"; };
B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = "<absolute>"; };
B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = "<absolute>"; };
B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = "<absolute>"; };
B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = "<absolute>"; };
B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = "<absolute>"; };
BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = "<absolute>"; };
BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = "<absolute>"; };
BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = "<absolute>"; };
BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = "<absolute>"; };
C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = "<absolute>"; };
C505A18319B9B63C63877858 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = "<absolute>"; };
C84546C18DCBB04166195DCF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = "<absolute>"; };
CB20BF73330AAF80B8BC8907 /* packer_plugin_import.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = packer_plugin_import.cpp; sourceTree = "<absolute>"; };
CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = "<absolute>"; };
CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = "<absolute>"; };
CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = "<absolute>"; };
CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = "<absolute>"; };
CFFBE05DB004895080314289 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = "<absolute>"; };
D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = "<absolute>"; };
D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = "<absolute>"; };
D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = "<absolute>"; };
D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.3.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>"; };
D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.3.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/qconfig.pri"; sourceTree = "<absolute>"; };
D5141F795670589C8CC41CBC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = "<absolute>"; };
D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.3.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.3.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = "<absolute>"; };
D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = "<absolute>"; };
D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = "<absolute>"; };
DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = "<absolute>"; };
DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.3.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
DF8188E30892A4654B984221 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = "<absolute>"; };
E37365B4489B4918BEBB707D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
E432DA897A5F027987342E8F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = "<absolute>"; };
E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = "<absolute>"; };
E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = "<absolute>"; };
E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.3.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = "<absolute>"; };
EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = "<absolute>"; };
EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = "<absolute>"; };
EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = "<absolute>"; };
EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.3.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/mac.conf"; sourceTree = "<absolute>"; };
F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
F0A58515945747E36783CC21 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = "<absolute>"; };
F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = "<absolute>"; };
F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.3.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/clang-mac.conf"; sourceTree = "<absolute>"; };
F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = "<absolute>"; };
F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = "<absolute>"; };
F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = "<absolute>"; };
F9BEAA743A908603687DA204 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.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>"; };
FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = "<absolute>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
D1C883685E82D5676953459A /* Link Binary With Libraries */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */,
328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */,
668DDDA0C55405E7FCFD6CA5 /* CoreServices.framework in Link Binary With Libraries */,
F8B465CE34D8DF87AAE95913 /* CoreFoundation.framework in Link Binary With Libraries */,
F26454630C80841CBDCFE1CA /* Foundation.framework in Link Binary With Libraries */,
8771A8C96E9C391044035D99 /* OpenGL.framework in Link Binary With Libraries */,
E45E51A644D5FC9F942ECE55 /* AGL.framework in Link Binary With Libraries */,
D1FA8AF31837B51C762A9D4D /* qcocoa in Link Binary With Libraries */,
F8ED42CF8679BF83227DAFC4 /* Carbon.framework in Link Binary With Libraries */,
8D267F2E4776F0ECA2F49DC8 /* IOKit.framework in Link Binary With Libraries */,
1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */,
D22929A2B8C5281567FCACDC /* Qt5PlatformSupport in Link Binary With Libraries */,
BE6AB9DF1C4880624131C669 /* Qt5Widgets in Link Binary With Libraries */,
A9563D9C9FD0D76FAAF1CA96 /* qdds in Link Binary With Libraries */,
7CA5405B8503BFFC60932D2B /* qicns in Link Binary With Libraries */,
496FD9CEEB508016AFB9F928 /* qico in Link Binary With Libraries */,
59789101736112A570B8EFE6 /* qjp2 in Link Binary With Libraries */,
FBD56E2AC34F76BFFDB68619 /* qmng in Link Binary With Libraries */,
7F76437B577F737145996DC3 /* qtga in Link Binary With Libraries */,
C06DDE378A7AC1FA9E6FF69A /* qtiff in Link Binary With Libraries */,
A3F8F2284013928A02AE5C38 /* qwbmp in Link Binary With Libraries */,
F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */,
9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */,
8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */,
B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */,
);
name = "Link Binary With Libraries";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
2EB56BE3C2D93CDAB0C52E67 /* Sources */ = {
isa = PBXGroup;
children = (
73F2E45FDEB381A085D37A49 /* SourceFiles */,
CB20BF73330AAF80B8BC8907 /* packer_plugin_import.cpp */,
);
name = Sources;
sourceTree = "<Group>";
};
31562E815E3DF5B1A777D3EF /* _other */ = {
isa = PBXGroup;
children = (
E3790AE49DBDB3F5EFA42FE1 /* packer.cpp */,
5AA25EFD83BC060B26945285 /* packer.h */,
);
name = _other;
sourceTree = "<Group>";
};
73F2E45FDEB381A085D37A49 /* SourceFiles */ = {
isa = PBXGroup;
children = (
31562E815E3DF5B1A777D3EF /* _other */,
);
name = SourceFiles;
sourceTree = "<Group>";
};
74B182DB50CB5611B5C1C297 /* Supporting Files */ = {
isa = PBXGroup;
children = (
5520A59148EC5EC44EF0D3CD /* Packer.pro */,
6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.3.0/mkspecs/qdevice.pri */,
669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.3.0/mkspecs/common/shell-unix.conf */,
0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.3.0/mkspecs/common/unix.conf */,
EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.3.0/mkspecs/common/mac.conf */,
817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.3.0/mkspecs/common/macx.conf */,
45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base.conf */,
A9E30FA27827990C5F182223 /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base-mac.conf */,
8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.3.0/mkspecs/common/clang.conf */,
F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.3.0/mkspecs/common/clang-mac.conf */,
D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.3.0/mkspecs/qconfig.pri */,
ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth.pri */,
2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth_private.pri */,
BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bootstrap_private.pri */,
CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_clucene_private.pri */,
77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent.pri */,
7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent_private.pri */,
7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core.pri */,
5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core_private.pri */,
7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative.pri */,
89863CCAF1D29037AE95755D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative_private.pri */,
F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer.pri */,
7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer_private.pri */,
69347C39E4D922E94D0860BF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designercomponents_private.pri */,
360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio.pri */,
4C6C71914B1926119120DACD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio_private.pri */,
23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui.pri */,
D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui_private.pri */,
FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help.pri */,
D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help_private.pri */,
A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras.pri */,
33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras_private.pri */,
D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia.pri */,
E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia_private.pri */,
28BD0D10214709D95B161E24 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets.pri */,
D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */,
293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network.pri */,
382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network_private.pri */,
8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc.pri */,
B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc_private.pri */,
5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl.pri */,
E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl_private.pri */,
E432DA897A5F027987342E8F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions.pri */,
5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions_private.pri */,
8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_platformsupport_private.pri */,
F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning.pri */,
E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning_private.pri */,
6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport.pri */,
D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport_private.pri */,
B382B645B34234E451AE5D94 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml.pri */,
6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml_private.pri */,
4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */,
DF8188E30892A4654B984221 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest.pri */,
ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest_private.pri */,
5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */,
16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick.pri */,
8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick_private.pri */,
82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickparticles_private.pri */,
D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets.pri */,
B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */,
CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script.pri */,
C505A18319B9B63C63877858 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script_private.pri */,
CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools.pri */,
A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools_private.pri */,
85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors.pri */,
BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors_private.pri */,
BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport.pri */,
311004331A04F3D69C98643C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport_private.pri */,
7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql.pri */,
075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri */,
ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg.pri */,
8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg_private.pri */,
DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib.pri */,
8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib_private.pri */,
E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools.pri */,
B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools_private.pri */,
8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets.pri */,
87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets_private.pri */,
A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets.pri */,
8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets_private.pri */,
AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml.pri */,
E37365B4489B4918BEBB707D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml_private.pri */,
2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns.pri */,
F9BEAA743A908603687DA204 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */,
D5141F795670589C8CC41CBC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */,
1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfcamera.pri */,
F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */,
AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcocoa.pri */,
EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */,
111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdds.pri */,
3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */,
2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */,
EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qicns.pri */,
C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qico.pri */,
45DB132B756499D4DF38430E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qjp2.pri */,
B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qminimal.pri */,
F0A58515945747E36783CC21 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */,
B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */,
EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */,
3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */,
946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmng.pri */,
CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qoffscreen.pri */,
9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qqt7engine.pri */,
B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsqlite.pri */,
F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvg.pri */,
CFFBE05DB004895080314289 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvgicon.pri */,
247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */,
87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */,
24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */,
060A694B42A4555240009936 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri */,
BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtiff.pri */,
B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */,
74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */,
C84546C18DCBB04166195DCF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */,
AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */,
8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */,
892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */,
A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */,
346287C9E754E7C458153F03 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwbmp.pri */,
B26239063A068F800A2C95F4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwebp.pri */,
63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf */,
85061B1DA49D125991117950 /* /usr/local/Qt-5.3.0/mkspecs/macx-xcode/qmake.conf */,
AB745978DF0F41D1801ABDA6 /* .qmake.stash */,
);
name = "Supporting Files";
sourceTree = "<Group>";
};
AF39DD055C3EF8226FBE929D /* Frameworks */ = {
isa = PBXGroup;
children = (
AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */,
DFD7912080BC557230093752 /* ApplicationServices.framework */,
9742F24EE18EA44D52824F1E /* CoreServices.framework */,
4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */,
FCC237CA5AD60B9BA4447615 /* Foundation.framework */,
D4B32C2222F82AC56BADEB21 /* OpenGL.framework */,
8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */,
D53D8E6A188E05078A114294 /* qcocoa */,
9DFF62A901D70814B8A323D4 /* Carbon.framework */,
A1A67BEAA744704B29168D39 /* IOKit.framework */,
DBF506D10449BFABD45B82DA /* Qt5PrintSupport */,
E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */,
4689C06178B60B84E7F3A3B7 /* Qt5Widgets */,
D3D1BE0BEA3AEE0551AD39AC /* qdds */,
31120EDB269DFF13E1D49847 /* qicns */,
8F500B5166907B6D9A7C3E3D /* qico */,
F0681BC551FC8A2B132FC646 /* qjp2 */,
83D37373949868693FB7816D /* qmng */,
DCEFD9167C239650120B0145 /* qtga */,
F2453BA07315EB9F34F1CD57 /* qtiff */,
8CF51323544B886B8F4A2232 /* qwbmp */,
ADC6308023253CEA51F86E21 /* qwebp */,
04391BE7A8B9D811E255100A /* Qt5Gui */,
D6193B79CECC9DD0142D1200 /* qtharfbuzzng */,
5A80A1907B6CFFB524C1E57D /* Qt5Core */,
);
name = Frameworks;
sourceTree = "<Group>";
};
E8C543AB96796ECAA2E65C57 /* Packer */ = {
isa = PBXGroup;
children = (
2EB56BE3C2D93CDAB0C52E67 /* Sources */,
74B182DB50CB5611B5C1C297 /* Supporting Files */,
AF39DD055C3EF8226FBE929D /* Frameworks */,
FE0A091FDBFB3E9C31B7A1BD /* Products */,
);
name = Packer;
sourceTree = "<Group>";
};
FE0A091FDBFB3E9C31B7A1BD /* Products */ = {
isa = PBXGroup;
children = (
A5588D4B50885E2A9CAA5505 /* Packer.app */,
);
name = Products;
sourceTree = "<Group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
FD92333211119EF3CA40F70D /* Packer */ = {
isa = PBXNativeTarget;
buildConfigurationList = 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "Packer" */;
buildPhases = (
F7E50F631C51CD5B5DC0BC43 /* Compile Sources */,
D1C883685E82D5676953459A /* Link Binary With Libraries */,
);
buildRules = (
);
dependencies = (
A7CD3B627B093BF0A5BBA9AE /* PBXTargetDependency */,
);
name = Packer;
productInstallPath = ../Mac/DebugPacker/;
productName = Packer;
productReference = A5588D4B50885E2A9CAA5505 /* Packer.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
6DB9C3763D02B1415CD9D565 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0510;
};
buildConfigurationList = DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "Packer" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
en,
);
mainGroup = E8C543AB96796ECAA2E65C57 /* Packer */;
productRefGroup = FE0A091FDBFB3E9C31B7A1BD /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
FD92333211119EF3CA40F70D /* Packer */,
6E977D353048DB44129F752B /* Preprocess */,
);
};
/* End PBXProject section */
/* Begin PBXShellScriptBuildPhase section */
7EF0942E79C014DCEC8976BC /* Qt Preprocessors */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
name = "Qt Preprocessors";
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "make -C . -f Packer.xcodeproj/qt_preprocess.mak";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
F7E50F631C51CD5B5DC0BC43 /* Compile Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
EAA05789DF6EBAD24D3EFF96 /* packer.cpp in Compile Sources */,
52B661A713AE959F9084E291 /* packer_plugin_import.cpp in Compile Sources */,
);
name = "Compile Sources";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
A7CD3B627B093BF0A5BBA9AE /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 6E977D353048DB44129F752B /* Preprocess */;
targetProxy = 072AB35C1955F39D00328D9B /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
339EE1B2CC4FC24589A0EA95 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = YES;
DYLIB_COMPATIBILITY_VERSION = 1.0;
DYLIB_CURRENT_VERSION = 1.0.0;
FRAMEWORK_SEARCH_PATHS = "";
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui,
../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore,
../../Libraries/QtStatic/qtbase/include,
/usr/local/include,
"/usr/local/Qt-5.3.0/include",
"/usr/local/Qt-5.3.0/include/QtGui",
"/usr/local/Qt-5.3.0/include/QtCore",
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/AGL.framework/Headers,
"/usr/local/Qt-5.3.0/mkspecs/macx-clang",
);
INFOPLIST_FILE = Packer.plist;
INSTALL_DIR = "../Mac/$(CONFIGURATION)";
LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++";
LIBRARY_SEARCH_PATHS = (
/System/Library/Frameworks/,
"/usr/local/Qt-5.3.0/lib",
"/usr/local/Qt-5.3.0/plugins/platforms",
"/usr/local/Qt-5.3.0/plugins/imageformats",
);
MACOSX_DEPLOYMENT_TARGET = 10.7;
OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker/";
OTHER_CFLAGS = (
"-pipe",
"-g",
"-Wall",
"-W",
"-fPIE",
"-D_DEBUG",
"-DQT_GUI_LIB",
"-DQT_CORE_LIB",
);
OTHER_CPLUSPLUSFLAGS = (
"-pipe",
"-g",
"-std=c++11",
"-stdlib=libc++",
"-Wall",
"-W",
"-fPIE",
"-D_DEBUG",
"-DQT_GUI_LIB",
"-DQT_CORE_LIB",
);
OTHER_LDFLAGS = (
"-headerpad_max_install_names",
"-stdlib=libc++",
"-lcrypto",
"-lssl",
"-L/usr/local/Qt-5.3.0/lib",
"-L/usr/local/Qt-5.3.0/plugins/platforms",
"-lcups",
"-L/usr/local/Qt-5.3.0/plugins/imageformats",
"-lz",
"-lm",
"-llzma",
);
PRODUCT_NAME = Packer;
QT_LIBRARY_SUFFIX = "";
SDKROOT = macosx;
SYMROOT = ../Mac;
};
name = Release;
};
3AA6C32AC930069E80220CF1 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DYLIB_COMPATIBILITY_VERSION = 1.0;
DYLIB_CURRENT_VERSION = 1.0.0;
FRAMEWORK_SEARCH_PATHS = "";
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui,
../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore,
../../Libraries/QtStatic/qtbase/include,
/usr/local/include,
"/usr/local/Qt-5.3.0/include",
"/usr/local/Qt-5.3.0/include/QtGui",
"/usr/local/Qt-5.3.0/include/QtCore",
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/AGL.framework/Headers,
"/usr/local/Qt-5.3.0/mkspecs/macx-clang",
);
INFOPLIST_FILE = Packer.plist;
INSTALL_DIR = "../Mac/$(CONFIGURATION)";
LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++";
LIBRARY_SEARCH_PATHS = (
/System/Library/Frameworks/,
"/usr/local/Qt-5.3.0/lib",
"/usr/local/Qt-5.3.0/plugins/platforms",
"/usr/local/Qt-5.3.0/plugins/imageformats",
);
MACOSX_DEPLOYMENT_TARGET = 10.7;
OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker/";
ONLY_ACTIVE_ARCH = YES;
OTHER_CFLAGS = (
"-pipe",
"-g",
"-Wall",
"-W",
"-fPIE",
"-D_DEBUG",
"-DQT_GUI_LIB",
"-DQT_CORE_LIB",
);
OTHER_CPLUSPLUSFLAGS = (
"-pipe",
"-g",
"-std=c++11",
"-stdlib=libc++",
"-Wall",
"-W",
"-fPIE",
"-D_DEBUG",
"-DQT_GUI_LIB",
"-DQT_CORE_LIB",
);
OTHER_LDFLAGS = (
"-headerpad_max_install_names",
"-stdlib=libc++",
"-lcrypto",
"-lssl",
"-L/usr/local/Qt-5.3.0/lib",
"-L/usr/local/Qt-5.3.0/plugins/platforms",
"-lcups",
"-L/usr/local/Qt-5.3.0/plugins/imageformats",
"-lz",
"-lm",
"-llzma",
);
PRODUCT_NAME = Packer;
QT_LIBRARY_SUFFIX = _debug;
SDKROOT = macosx;
SYMROOT = ../Mac;
};
name = Debug;
};
6666AA5E688052234F6758D8 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker";
OTHER_CFLAGS = (
"-pipe",
"-g",
"-Wall",
"-W",
"-fPIE",
"-D_DEBUG",
"-DQT_GUI_LIB",
"-DQT_CORE_LIB",
"-I./../../Libraries/openssl-xcode/include",
);
OTHER_CPLUSPLUSFLAGS = (
"-pipe",
"-g",
"-std=c++11",
"-stdlib=libc++",
"-Wall",
"-W",
"-fPIE",
"-D_DEBUG",
"-DQT_GUI_LIB",
"-DQT_CORE_LIB",
"-I./../../Libraries/openssl-xcode/include",
);
PRODUCT_NAME = Packer;
QT_LIBRARY_SUFFIX = "";
SDKROOT = macosx;
};
name = Release;
};
77418F46922677BB04ED38DD /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker";
OTHER_CFLAGS = (
"-pipe",
"-g",
"-Wall",
"-W",
"-fPIE",
"-D_DEBUG",
"-DQT_GUI_LIB",
"-DQT_CORE_LIB",
"-I./../../Libraries/openssl-xcode/include",
);
OTHER_CPLUSPLUSFLAGS = (
"-pipe",
"-g",
"-std=c++11",
"-stdlib=libc++",
"-Wall",
"-W",
"-fPIE",
"-D_DEBUG",
"-DQT_GUI_LIB",
"-DQT_CORE_LIB",
"-I./../../Libraries/openssl-xcode/include",
);
PRODUCT_NAME = Packer;
QT_LIBRARY_SUFFIX = _debug;
SDKROOT = macosx;
};
name = Debug;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "Packer" */ = {
isa = XCConfigurationList;
buildConfigurations = (
77418F46922677BB04ED38DD /* Debug */,
6666AA5E688052234F6758D8 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "Packer" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3AA6C32AC930069E80220CF1 /* Debug */,
339EE1B2CC4FC24589A0EA95 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
/* End XCConfigurationList section */
};
rootObject = 6DB9C3763D02B1415CD9D565 /* Project object */;
}

View file

@ -0,0 +1,52 @@
#############################################################################
# Makefile for building: ../Mac/DebugPacker/Packer.app/Contents/MacOS/Packer
# Generated by qmake (3.0) (Qt 5.3.0)
# Project: Packer.pro
# Template: app
# Command: /usr/local/Qt-5.3.0/bin/qmake -spec macx-xcode -o Packer.xcodeproj/project.pbxproj Packer.pro
#############################################################################
MAKEFILE = project.pbxproj
MOC = /usr/local/Qt-5.3.0/bin/moc
UIC =
LEX = flex
LEXFLAGS =
YACC = yacc
YACCFLAGS = -d
DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB
INCPATH = -I/usr/local/Qt-5.3.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I../../Libraries/lzma/C -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtGui -I/usr/local/Qt-5.3.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
MOVE = mv -f
IMAGES =
PARSERS =
preprocess: $(PARSERS) compilers
clean preprocess_clean: parser_clean compiler_clean
parser_clean:
mocclean: compiler_moc_header_clean compiler_moc_source_clean
mocables: compiler_moc_header_make_all compiler_moc_source_make_all
check: first
compilers:
compiler_objective_c_make_all:
compiler_objective_c_clean:
compiler_rcc_make_all:
compiler_rcc_clean:
compiler_moc_header_make_all:
compiler_moc_header_clean:
compiler_moc_source_make_all:
compiler_moc_source_clean:
compiler_rez_source_make_all:
compiler_rez_source_clean:
compiler_yacc_decl_make_all:
compiler_yacc_decl_clean:
compiler_yacc_impl_make_all:
compiler_yacc_impl_clean:
compiler_lex_make_all:
compiler_lex_clean:
compiler_clean:

32
Telegram/Prepare.sh Executable file
View file

@ -0,0 +1,32 @@
AppVersionStr=0.5.5
AppVersion=5005
if [ -d "deploy/$AppVersionStr" ]; then
echo "Deploy folder for version $AppVersionStr already exists!"
exit 1
fi
if [ -f "tupdate$AppVersion" ]; then
echo "Update file for version $AppVersion already exists!"
exit 1
fi
if [ ! -d "Telegram.app" ]; then
echo "Telegram.app not found!"
exit 1
fi
echo "Preparing version $AppVersionStr, executing Packer.."
./Packer.app/Contents/MacOS/Packer -path Telegram.app -version $AppVersion
echo "Packer done!"
if [ ! -d "deploy/" ]; then
mkdir "deploy"
fi
echo "Copying Telegram.app and tmacupd$AppVersion to deploy/$AppVersionStr..";
mkdir "deploy/$AppVersionStr"
mkdir "deploy/$AppVersionStr/Telegram"
mv Telegram.app deploy/$AppVersionStr/Telegram/
mv tmacupd$AppVersion deploy/$AppVersionStr/
mv Telegram.dmg deploy/$AppVersionStr/
echo "Version $AppVersionStr prepared!";

View file

@ -161,6 +161,7 @@ lng_settings_view_emojis: "View list";
lng_settings_emoji_list: "List of supported emojis"; lng_settings_emoji_list: "List of supported emojis";
lng_settings_send_enter: "Send by Enter"; lng_settings_send_enter: "Send by Enter";
lng_settings_send_ctrlenter: "Send by Ctrl+Enter"; lng_settings_send_ctrlenter: "Send by Ctrl+Enter";
lng_settings_send_cmdenter: "Send by Cmd+Enter";
lng_settings_cats_and_dogs: "Allow cats and dogs"; lng_settings_cats_and_dogs: "Allow cats and dogs";
lng_download_path_dont_ask: "Don't ask download path for each file"; lng_download_path_dont_ask: "Don't ask download path for each file";
@ -313,6 +314,7 @@ lng_context_copy_image: "Copy Image";
lng_context_close_image: "Close Image"; lng_context_close_image: "Close Image";
lng_context_cancel_download: "Cancel Download"; lng_context_cancel_download: "Cancel Download";
lng_context_show_in_folder: "Show in Folder"; lng_context_show_in_folder: "Show in Folder";
lng_context_show_in_finder: "Show in Finder";
lng_context_open_video: "Open Video"; lng_context_open_video: "Open Video";
lng_context_save_video: "Save Video As..."; lng_context_save_video: "Save Video As...";
lng_context_open_audio: "Open Audio"; lng_context_open_audio: "Open Audio";
@ -378,4 +380,16 @@ This software is licensed under [a href=\"https://github.com/telegramdesktop/tde
source code is available on [a href=\"https://github.com/telegramdesktop/tdesktop\"]GitHub[/a]."; source code is available on [a href=\"https://github.com/telegramdesktop/tdesktop\"]GitHub[/a].";
lng_about_done: "Done"; lng_about_done: "Done";
// Mac specific
lng_mac_choose_app: "Choose Application";
lng_mac_choose_text: "Choose an application to open the document \"{file}\".";
lng_mac_enable_filter: "Enable:";
lng_mac_recommended_apps: "Recommended Applications";
lng_mac_all_apps: "All Applications";
lng_mac_always_open_with: "Always Open With";
lng_mac_this_app_can_open: "This application can open \"{file}\".";
lng_mac_not_known_app: "It's not known if this application can open \"{file}\".";
// Keys finished // Keys finished

View file

@ -20,8 +20,9 @@ semibold: 'Open Sans Semibold';
fsize: 13px; fsize: 13px;
spriteFile: ':/gui/art/sprite.png' / 2:':/gui/art/sprite_125x.png' / 3:':/gui/art/sprite_150x.png' / 4:':/gui/art/sprite_200x.png'; spriteFile: ':/gui/art/sprite.png' / 2:':/gui/art/sprite_125x.png' / 3:':/gui/art/sprite_150x.png' / 4:':/gui/art/sprite_200x.png'; // exceptional value for retina
emojisFile: ':/gui/art/emoji.png' / 2:':/gui/art/emoji_125x.png' / 3:':/gui/art/emoji_150x.png' / 4:':/gui/art/emoji_200x.png'; emojisFile: ':/gui/art/emoji.png' / 2:':/gui/art/emoji_125x.png' / 3:':/gui/art/emoji_150x.png' / 4:':/gui/art/emoji_200x.png'; // exceptional value for retina
emojiImgSize: 16px; // exceptional value for retina
emojiSize: 16px; emojiSize: 16px;
emojiPadding: 1px; emojiPadding: 1px;
@ -1384,3 +1385,13 @@ emojiPanSub: 0px;
emojiPanDuration: 200; emojiPanDuration: 200;
emojiPanHover: #f0f0f0; emojiPanHover: #f0f0f0;
emojiPanRound: 2px; emojiPanRound: 2px;
// Mac specific
macAccessoryHeight: 90;
macEnableFilterAdd: 2;
macEnableFilterTop: 5;
macSelectorTop: 6;
macAlwaysThisAppTop: 4;
macAppHintTop: 8;
macCautionIconSize: size(16, 16);

View file

@ -17,8 +17,10 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
*/ */
#include "genemoji.h" #include "genemoji.h"
#ifdef Q_OS_WIN
#include <QtCore/QtPlugin> #include <QtCore/QtPlugin>
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin) Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
#endif
typedef unsigned int uint32; typedef unsigned int uint32;
@ -938,7 +940,7 @@ void writeEmojiCategory(QTextStream &tcpp, uint32 *emojiCategory, uint32 size, c
tcpp << "\t\tstatic QVector<EmojiPtr> v" << name << ";\n"; tcpp << "\t\tstatic QVector<EmojiPtr> v" << name << ";\n";
tcpp << "\t\tif (v" << name << ".isEmpty()) {\n"; tcpp << "\t\tif (v" << name << ".isEmpty()) {\n";
tcpp << "\t\t\tv" << name << ".resize(" << size << ");\n"; tcpp << "\t\t\tv" << name << ".resize(" << size << ");\n";
for (int i = 0; i < size; ++i) { for (uint32 i = 0; i < size; ++i) {
int index = 0; int index = 0;
for (EmojisData::const_iterator j = emojisData.cbegin(), e = emojisData.cend(); j != e; ++j) { for (EmojisData::const_iterator j = emojisData.cbegin(), e = emojisData.cend(); j != e; ++j) {
if (j->code == emojiCategory[i]) { if (j->code == emojiCategory[i]) {
@ -947,7 +949,7 @@ void writeEmojiCategory(QTextStream &tcpp, uint32 *emojiCategory, uint32 size, c
++index; ++index;
} }
if (index == emojisData.size()) { if (index == emojisData.size()) {
throw exception(QString("Could not find emoji from category '%1' with index %2, code %3").arg(name).arg(i).arg(emojiCategory[i]).toUtf8().constData()); throw Exception(QString("Could not find emoji from category '%1' with index %2, code %3").arg(name).arg(i).arg(emojiCategory[i]).toUtf8().constData());
} }
tcpp << "\t\t\tv" << name << "[" << i << "] = &emojis[" << index << "];\n"; tcpp << "\t\t\tv" << name << "[" << i << "] = &emojis[" << index << "];\n";
} }
@ -956,7 +958,7 @@ void writeEmojiCategory(QTextStream &tcpp, uint32 *emojiCategory, uint32 size, c
tcpp << "\t} break;\n\n"; tcpp << "\t} break;\n\n";
} }
bool genEmoji(QString emoji_in, const QString &emoji_out) { bool genEmoji(QString emoji_in, const QString &emoji_out, const QString &emoji_png) {
QDir d(emoji_in); QDir d(emoji_in);
if (!d.exists()) { if (!d.exists()) {
cout << "Could not open emoji input dir '" << emoji_in.toUtf8().constData() << "'!\n"; cout << "Could not open emoji input dir '" << emoji_in.toUtf8().constData() << "'!\n";
@ -1012,7 +1014,7 @@ bool genEmoji(QString emoji_in, const QString &emoji_out) {
if (data.code < min1) min1 = data.code; if (data.code < min1) min1 = data.code;
if (data.code > max1) max1 = data.code; if (data.code > max1) max1 = data.code;
} }
} else if (high == 35 || high >= 48 && high < 58) { // digits } else if (high == 35 || (high >= 48 && high < 58)) { // digits
} else { } else {
if (data.code < min2) min2 = data.code; if (data.code < min2) min2 = data.code;
if (data.code > max2) max2 = data.code; if (data.code > max2) max2 = data.code;
@ -1055,7 +1057,8 @@ bool genEmoji(QString emoji_in, const QString &emoji_out) {
cout << "Could not read image '" << name.toUtf8().constData() << "'!\n"; cout << "Could not read image '" << name.toUtf8().constData() << "'!\n";
} }
} }
QString postfix = variantPostfix[variantIndex], emojif = "./SourceFiles/art/emoji" + postfix + ".png"; QString postfix = variantPostfix[variantIndex], emojif = emoji_png + postfix + ".png";
const char *tmp = emojif.toUtf8().constData();
QByteArray emojib; QByteArray emojib;
{ {
QBuffer ebuf(&emojib); QBuffer ebuf(&emojib);
@ -1126,7 +1129,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\
tcpp << "void initEmoji() {\n"; tcpp << "void initEmoji() {\n";
tcpp << "\tEmojiData *toFill = emojis = (EmojiData*)emojisData;\n\n"; tcpp << "\tEmojiData *toFill = emojis = (EmojiData*)emojisData;\n\n";
tcpp << "\tswitch (cScale()) {\n\n"; tcpp << "\tDBIScale emojiForScale = cRetina() ? dbisTwo : cScale();\n\n";
tcpp << "\tswitch (emojiForScale) {\n\n";
for (int variantIndex = 0; variantIndex < variantsCount; ++variantIndex) { for (int variantIndex = 0; variantIndex < variantsCount; ++variantIndex) {
int imSize = imSizes[variantIndex]; int imSize = imSizes[variantIndex];
tcpp << "\tcase " << variantNames[variantIndex] << ":\n"; tcpp << "\tcase " << variantNames[variantIndex] << ":\n";
@ -1165,7 +1169,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\
tcpp << "\t\treturn 0;\n"; tcpp << "\t\treturn 0;\n";
tcpp << "\t}\n\n"; tcpp << "\t}\n\n";
tcpp << "\tif (highCode == 35 || highCode >= 48 && highCode < 58) {\n"; // digits tcpp << "\tif (highCode == 35 || (highCode >= 48 && highCode < 58)) {\n"; // digits
tcpp << "\t\tif ((code & 0xFFFF) != 0x20E3) return 0;\n\n"; tcpp << "\t\tif ((code & 0xFFFF) != 0x20E3) return 0;\n\n";
tcpp << "\t\tswitch (code) {\n"; tcpp << "\t\tswitch (code) {\n";
for (; i != e; ++i) { for (; i != e; ++i) {
@ -1194,7 +1198,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\
tcpp << "\tswitch (ch->unicode()) {\n"; tcpp << "\tswitch (ch->unicode()) {\n";
QString tab("\t"); QString tab("\t");
for (int i = 0; i < replacesCount; ++i) { for (uint32 i = 0; i < replacesCount; ++i) {
QString key = QString::fromUtf8(replaces[i].replace); QString key = QString::fromUtf8(replaces[i].replace);
replaceMap[key] = replaces[i].code; replaceMap[key] = replaces[i].code;
} }
@ -1268,8 +1272,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\
} }
if (write_cpp) { if (write_cpp) {
cout << "Emoji updated, writing " << currentRow << " rows, full count " << emojisData.size() << " emojis.\n"; cout << "Emoji updated, writing " << currentRow << " rows, full count " << emojisData.size() << " emojis.\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!");
}/**/ }/**/
} catch (exception &e) { } catch (exception &e) {
cout << e.what() << "\n"; cout << e.what() << "\n";

View file

@ -37,19 +37,35 @@ using std::cout;
using std::cerr; using std::cerr;
using std::exception; using std::exception;
bool genEmoji(QString emoji_in, const QString &emoji_out); class Exception : public exception {
public:
Exception(const QString &msg) : _msg(msg.toUtf8()) {
}
virtual const char *what() const throw() {
return _msg.constData();
}
virtual ~Exception() throw() {
}
private:
QByteArray _msg;
};
bool genEmoji(QString emoji_in, const QString &emoji_out, const QString &emoji_png);
class GenEmoji : public QObject { class GenEmoji : public QObject {
Q_OBJECT Q_OBJECT
public: public:
GenEmoji(const QString &emoji_in, const QString &emoji_out) : QObject(0), GenEmoji(const QString &emoji_in, const QString &emoji_out, const QString &emoji_png) : QObject(0),
_emoji_in(emoji_in), _emoji_out(emoji_out) { _emoji_in(emoji_in), _emoji_out(emoji_out), _emoji_png(emoji_png) {
} }
public slots : public slots :
void run() { void run() {
if (genEmoji(_emoji_in, _emoji_out)) { if (genEmoji(_emoji_in, _emoji_out, _emoji_png)) {
emit finished(); emit finished();
} }
} }
@ -59,5 +75,5 @@ signals:
private: private:
QString _emoji_in, _emoji_out; QString _emoji_in, _emoji_out, _emoji_png;
}; };

View file

@ -53,8 +53,8 @@ bool skipComment(const char *&from, const char *end) {
while (from < end && *from != '\n' && *from != '\r') { while (from < end && *from != '\n' && *from != '\r') {
++from; ++from;
} }
++from; if (from < end) ++from;
return (from < end); return true;
} else { } else {
return true; return true;
} }

View file

@ -38,17 +38,17 @@ using std::exception;
class Exception : public exception { class Exception : public exception {
public: public:
Exception(const QString &msg) : _msg(msg) { Exception(const QString &msg) : _msg(msg.toUtf8()) {
} }
virtual const char *what() const throw() { virtual const char *what() const throw() {
return _msg.toUtf8().constData(); return _msg.constData();
} }
virtual ~Exception() throw() { virtual ~Exception() throw() {
} }
private: private:
QString _msg; QByteArray _msg;
}; };
bool genLang(const QString &lang_in, const QString &lang_out); bool genLang(const QString &lang_in, const QString &lang_out);

View file

@ -60,7 +60,7 @@ string outputTypeNames[] = {
"color", "color",
"point", "point",
"rect", "rect",
"rect", "sprite",
"size", "size",
"transition", "transition",
"cursor", "cursor",
@ -1302,7 +1302,11 @@ string prepareObject(const string &cls, Fields fields, const string &obj, int va
} else if (f.value().first != j.value()) { } else if (f.value().first != j.value()) {
throw Exception(QString("Bad type of field %1 while parsing %2").arg(j.key().c_str()).arg(obj.c_str())); throw Exception(QString("Bad type of field %1 while parsing %2").arg(j.key().c_str()).arg(obj.c_str()));
} else { } else {
if (variant == -1) { // retina
result += findScalarVariant(f.value().second, (j.value() == scSprite) ? 4 : 0);
} else {
result += findScalarVariant(f.value().second, variant); result += findScalarVariant(f.value().second, variant);
}
} }
fields.erase(f); fields.erase(f);
if (++j != e) { if (++j != e) {
@ -1518,7 +1522,7 @@ GNU General Public License for more details.\n\
Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\n\ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\n\
Copyright (c) 2014 John Preston, https://tdesktop.com\n\ Copyright (c) 2014 John Preston, https://tdesktop.com\n\
*/\n"; */\n";
tcpp << "#include \"stdafx.h\"\n#include \"style_auto.h\"\n\n"; tcpp << "#include \"stdafx.h\"\n#include \"style_auto.h\"\n\nnamespace {\n";
for (int i = 0, l = scalars.size(); i < l; ++i) { for (int i = 0, l = scalars.size(); i < l; ++i) {
Scalar &sc(scalars[i]); Scalar &sc(scalars[i]);
tout << "\textern const style::" << outputTypeNames[sc.second.first].c_str() << " &" << sc.first.c_str() << ";\n"; tout << "\textern const style::" << outputTypeNames[sc.second.first].c_str() << " &" << sc.first.c_str() << ";\n";
@ -1531,7 +1535,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\
tout << "\textern const style::" << obj.second.first.c_str() << " &" << obj.first.c_str() << ";\n"; tout << "\textern const style::" << obj.second.first.c_str() << " &" << obj.first.c_str() << ";\n";
tcpp << "\tstyle::" << obj.second.first.c_str() << " _" << obj.first.c_str() << prepareObject(obj.second.first, obj.second.second, obj.first, variant).c_str() << ";\n"; tcpp << "\tstyle::" << obj.second.first.c_str() << " _" << obj.first.c_str() << prepareObject(obj.second.first, obj.second.second, obj.first, variant).c_str() << ";\n";
} }
tout << "\n};\n"; tout << "};\n";
tcpp << "};\n";
tcpp << "\nnamespace st {\n"; tcpp << "\nnamespace st {\n";
for (int i = 0, l = scalars.size(); i < l; ++i) { for (int i = 0, l = scalars.size(); i < l; ++i) {
@ -1543,7 +1548,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\
Object &obj(objects[i]); Object &obj(objects[i]);
tcpp << "\tconst style::" << obj.second.first.c_str() << " &" << obj.first.c_str() << "(_" << obj.first.c_str() << ");\n"; tcpp << "\tconst style::" << obj.second.first.c_str() << " &" << obj.first.c_str() << "(_" << obj.first.c_str() << ");\n";
} }
tcpp << "\n};\n"; tcpp << "};\n";
tcpp << "\nnamespace style {\n\n"; tcpp << "\nnamespace style {\n\n";
tcpp << "\tFontFamilies _fontFamilies;\n"; tcpp << "\tFontFamilies _fontFamilies;\n";
@ -1551,7 +1556,25 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\
tcpp << "\tColorDatas _colorsMap;\n\n"; tcpp << "\tColorDatas _colorsMap;\n\n";
tcpp << "\tvoid startManager() {\n"; tcpp << "\tvoid startManager() {\n";
tcpp << "\n\t\tswitch (cScale()) {\n\n"; tcpp << "\n\t\tif (cRetina()) {\n";
tcpp << "\t\t\tcSetRealScale(dbisOne);\n\n";
for (int i = 0, l = scalars.size(); i < l; ++i) {
Scalar &sc(scalars[i]);
if (sc.second.first == scSprite || sc.first == "spriteFile" || sc.first == "emojisFile" || sc.first == "emojiImgSize") {
string v = findScalarVariant(sc.second.second, 4);
if (v != findScalarVariant(sc.second.second, 0)) {
tcpp << "\t\t\t_" << sc.first.c_str() << " = style::" << outputTypeNames[sc.second.first].c_str() << v.c_str() << ";\n";
}
}
}
for (int i = 0, l = objects.size(); i < l; ++i) {
Object &obj(objects[i]);
string v = prepareObject(obj.second.first, obj.second.second, obj.first, -1); // retina
if (v != prepareObject(obj.second.first, obj.second.second, obj.first, 0)) {
tcpp << "\t\t\t_" << obj.first.c_str() << " = style::" << obj.second.first.c_str() << v.c_str() << ";\n";
}
}
tcpp << "\t\t} else switch (cScale()) {\n\n";
for (int i = 1; i < variantsCount; ++i) { for (int i = 1; i < variantsCount; ++i) {
variant = variants[i]; variant = variants[i];
const char *varName = variantNames[i]; const char *varName = variantNames[i];

View file

@ -37,17 +37,17 @@ using std::exception;
class Exception : public exception { class Exception : public exception {
public: public:
Exception(const QString &msg) : _msg(msg) { Exception(const QString &msg) : _msg(msg.toUtf8()) {
} }
virtual const char *what() const throw() { virtual const char *what() const throw() {
return _msg.toUtf8().constData(); return _msg.constData();
} }
virtual ~Exception() throw() { virtual ~Exception() throw() {
} }
private: private:
QString _msg; QByteArray _msg;
}; };
bool genStyles(const QString &classes_in, const QString &classes_out, const QString &styles_in, const QString &styles_out, const QString &path_to_sprites); bool genStyles(const QString &classes_in, const QString &classes_out, const QString &styles_in, const QString &styles_out, const QString &path_to_sprites);

View file

@ -18,15 +18,32 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include "memain.h" #include "memain.h"
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
QString emoji_in("."), emoji_out("emoji_config.cpp"); QString emoji_in("."), emoji_out("emoji_config.cpp"), emoji_png("./SourceFiles/art/emoji");
for (int i = 0; i < argc; ++i) { for (int i = 0; i < argc; ++i) {
if (string("-emoji_in") == argv[i]) { if (string("-emoji_in") == argv[i]) {
if (++i < argc) emoji_in = argv[i]; if (++i < argc) emoji_in = argv[i];
} else if (string("-emoji_out") == argv[i]) { } else if (string("-emoji_out") == argv[i]) {
if (++i < argc) emoji_out = argv[i]; if (++i < argc) emoji_out = argv[i];
} else if (string("-emoji_png") == argv[i]) {
if (++i < argc) emoji_png = argv[i];
} }
} }
QObject *taskImpl = new GenEmoji(emoji_in, emoji_out); #ifdef Q_OS_MAC
if (QDir(QString()).absolutePath() == "/") {
QString first = argc ? QString::fromLocal8Bit(argv[0]) : QString();
if (!first.isEmpty()) {
QFileInfo info(first);
if (info.exists()) {
QDir result(info.absolutePath() + "/../../..");
QString basePath = result.absolutePath() + '/';
emoji_in = basePath + emoji_in;
emoji_out = basePath + emoji_out;
emoji_png = basePath + emoji_png;
}
}
}
#endif
QObject *taskImpl = new GenEmoji(emoji_in, emoji_out, emoji_png);
QGuiApplication a(argc, argv); QGuiApplication a(argc, argv);

View file

@ -111,12 +111,26 @@ int32 *hashSha1(const void *data, uint32 len, void *dest) {
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
QString workDir;
#ifdef Q_OS_MAC
if (QDir(QString()).absolutePath() == "/") {
QString first = argc ? QString::fromLocal8Bit(argv[0]) : QString();
if (!first.isEmpty()) {
QFileInfo info(first);
if (info.exists()) {
QDir result(info.absolutePath() + "/../../..");
workDir = result.absolutePath() + '/';
}
}
}
#endif
QString remove; QString remove;
int version = 0; int version = 0;
QFileInfoList files; QFileInfoList files;
for (int i = 0; i < argc; ++i) { for (int i = 0; i < argc; ++i) {
if (string("-path") == argv[i] && i + 1 < argc) { if (string("-path") == argv[i] && i + 1 < argc) {
QString path = QString(argv[i + 1]); QString path = workDir + QString(argv[i + 1]);
QFileInfo info(path); QFileInfo info(path);
files.push_back(info); files.push_back(info);
if (remove.isEmpty()) remove = info.canonicalPath() + "/"; if (remove.isEmpty()) remove = info.canonicalPath() + "/";
@ -126,8 +140,12 @@ int main(int argc, char *argv[])
} }
if (files.isEmpty() || remove.isEmpty() || version <= 1016 || version > 999999) { // not for release =) if (files.isEmpty() || remove.isEmpty() || version <= 1016 || version > 999999) { // not for release =)
#ifdef Q_OS_WIN
cout << "Usage: Packer.exe -path {file} -version {version} OR Packer.exe -path {dir} -version {version}\n"; cout << "Usage: Packer.exe -path {file} -version {version} OR Packer.exe -path {dir} -version {version}\n";
return 0; #elif defined Q_OS_MAC
cout << "Usage: Packer.app -path {file} -version {version} OR Packer.app -path {dir} -version {version}\n";
#endif
return -1;
} }
bool hasDirs = true; bool hasDirs = true;
@ -147,6 +165,10 @@ int main(int argc, char *argv[])
} else if (!info.isReadable()) { } else if (!info.isReadable()) {
cout << "Can't read: " << info.absoluteFilePath().toUtf8().constData() << "\n"; cout << "Can't read: " << info.absoluteFilePath().toUtf8().constData() << "\n";
return -1; return -1;
} else if (info.isHidden()) {
hasDirs = true;
files.erase(i);
break;
} }
} }
} }
@ -182,6 +204,9 @@ int main(int argc, char *argv[])
} }
QByteArray inner = f.readAll(); QByteArray inner = f.readAll();
stream << name << quint32(inner.size()) << inner; stream << name << quint32(inner.size()) << inner;
#if defined Q_OS_MAC || defined Q_OS_LINUX
stream << (QFileInfo(fullName).isExecutable() ? true : false);
#endif
} }
if (stream.status() != QDataStream::Ok) { if (stream.status() != QDataStream::Ok) {
cout << "Stream status is bad: " << stream.status() << "\n"; cout << "Stream status is bad: " << stream.status() << "\n";
@ -193,20 +218,19 @@ int main(int argc, char *argv[])
cout << "Compression start, size: " << resultSize << "\n"; cout << "Compression start, size: " << resultSize << "\n";
QByteArray compressed, resultCheck; QByteArray compressed, resultCheck;
#ifdef Q_OS_WIN // use Lzma SDK for win
const int32 hSigLen = 128, hShaLen = 20, hPropsLen = LZMA_PROPS_SIZE, hOriginalSizeLen = sizeof(int32), hSize = hSigLen + hShaLen + hPropsLen + hOriginalSizeLen; // header const int32 hSigLen = 128, hShaLen = 20, hPropsLen = LZMA_PROPS_SIZE, hOriginalSizeLen = sizeof(int32), hSize = hSigLen + hShaLen + hPropsLen + hOriginalSizeLen; // header
compressed.resize(hSize + resultSize + 1024 * 1024); // rsa signature + sha1 + lzma props + max compressed size compressed.resize(hSize + resultSize + 1024 * 1024); // rsa signature + sha1 + lzma props + max compressed size
size_t compressedLen = compressed.size() - hSize; size_t compressedLen = compressed.size() - hSize;
uchar outProps[LZMA_PROPS_SIZE];
size_t outPropsSize = LZMA_PROPS_SIZE; size_t outPropsSize = LZMA_PROPS_SIZE;
int res = LzmaCompress((uchar*)(compressed.data() + hSize), &compressedLen, (const uchar*)(result.constData()), result.size(), (uchar*)(compressed.data() + hSigLen + hShaLen), &outPropsSize, 9, 64 * 1024 * 1024, 0, 0, 0, 0, 0); int res = LzmaCompress((uchar*)(compressed.data() + hSize), &compressedLen, (const uchar*)(result.constData()), result.size(), (uchar*)(compressed.data() + hSigLen + hShaLen), &outPropsSize, 9, 64 * 1024 * 1024, 0, 0, 0, 0, 0);
if (res != SZ_OK) { if (res != SZ_OK) {
cout << "Error in compression: " << res << "\n"; cout << "Error in compression: " << res << "\n";
return -1; return -1;
} }
compressed.resize(hSize + compressedLen); compressed.resize(int(hSize + compressedLen));
memcpy(compressed.data() + hSigLen + hShaLen + hPropsLen, &resultSize, hOriginalSizeLen); memcpy(compressed.data() + hSigLen + hShaLen + hPropsLen, &resultSize, hOriginalSizeLen);
cout << "Compressed to size: " << compressedLen << "\n"; cout << "Compressed to size: " << compressedLen << "\n";
@ -228,10 +252,112 @@ int main(int argc, char *argv[])
cout << "Uncompress failed: " << uncompressRes << "\n"; cout << "Uncompress failed: " << uncompressRes << "\n";
return -1; return -1;
} }
if (resultLen != result.size()) { if (resultLen != size_t(result.size())) {
cout << "Uncompress bad size: " << resultLen << ", was: " << result.size() << "\n"; cout << "Uncompress bad size: " << resultLen << ", was: " << result.size() << "\n";
return -1; return -1;
} }
#else // use liblzma for others
const int32 hSigLen = 128, hShaLen = 20, hPropsLen = 0, hOriginalSizeLen = sizeof(int32), hSize = hSigLen + hShaLen + hOriginalSizeLen; // header
compressed.resize(hSize + resultSize + 1024 * 1024); // rsa signature + sha1 + lzma props + max compressed size
size_t compressedLen = compressed.size() - hSize;
lzma_stream stream = LZMA_STREAM_INIT;
int preset = 9 | LZMA_PRESET_EXTREME;
lzma_ret ret = lzma_easy_encoder(&stream, preset, LZMA_CHECK_CRC64);
if (ret != LZMA_OK) {
const char *msg;
switch (ret) {
case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break;
case LZMA_OPTIONS_ERROR: msg = "Specified preset is not supported"; break;
case LZMA_UNSUPPORTED_CHECK: msg = "Specified integrity check is not supported"; break;
default: msg = "Unknown error, possibly a bug"; break;
}
cout << "Error initializing the encoder: " << msg << " (error code " << ret << ")\n";
return -1;
}
stream.avail_in = resultSize;
stream.next_in = (uint8_t*)result.constData();
stream.avail_out = compressedLen;
stream.next_out = (uint8_t*)(compressed.data() + hSize);
lzma_ret res = lzma_code(&stream, LZMA_FINISH);
compressedLen -= stream.avail_out;
lzma_end(&stream);
if (res != LZMA_OK && res != LZMA_STREAM_END) {
const char *msg;
switch (res) {
case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break;
case LZMA_DATA_ERROR: msg = "File size limits exceeded"; break;
default: msg = "Unknown error, possibly a bug"; break;
}
cout << "Error in compression: " << msg << " (error code " << res << ")\n";
return -1;
}
compressed.resize(int(hSize + compressedLen));
memcpy(compressed.data() + hSigLen + hShaLen, &resultSize, hOriginalSizeLen);
cout << "Compressed to size: " << compressedLen << "\n";
cout << "Checking uncompressed..\n";
int32 resultCheckLen;
memcpy(&resultCheckLen, compressed.constData() + hSigLen + hShaLen, hOriginalSizeLen);
if (resultCheckLen <= 0 || resultCheckLen > 1024 * 1024 * 1024) {
cout << "Bad result len: " << resultCheckLen << "\n";
return -1;
}
resultCheck.resize(resultCheckLen);
size_t resultLen = resultCheck.size();
stream = LZMA_STREAM_INIT;
ret = lzma_stream_decoder(&stream, UINT64_MAX, LZMA_CONCATENATED);
if (ret != LZMA_OK) {
const char *msg;
switch (ret) {
case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break;
case LZMA_OPTIONS_ERROR: msg = "Specified preset is not supported"; break;
case LZMA_UNSUPPORTED_CHECK: msg = "Specified integrity check is not supported"; break;
default: msg = "Unknown error, possibly a bug"; break;
}
cout << "Error initializing the decoder: " << msg << " (error code " << ret << ")\n";
return -1;
}
stream.avail_in = compressedLen;
stream.next_in = (uint8_t*)(compressed.constData() + hSize);
stream.avail_out = resultLen;
stream.next_out = (uint8_t*)resultCheck.data();
res = lzma_code(&stream, LZMA_FINISH);
if (stream.avail_in) {
cout << "Error in decompression, " << stream.avail_in << " bytes left in _in of " << compressedLen << " whole.\n";
return -1;
} else if (stream.avail_out) {
cout << "Error in decompression, " << stream.avail_out << " bytes free left in _out of " << resultLen << " whole.\n";
return -1;
}
lzma_end(&stream);
if (res != LZMA_OK && res != LZMA_STREAM_END) {
const char *msg;
switch (res) {
case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break;
case LZMA_FORMAT_ERROR: msg = "The input data is not in the .xz format"; break;
case LZMA_OPTIONS_ERROR: msg = "Unsupported compression options"; break;
case LZMA_DATA_ERROR: msg = "Compressed file is corrupt"; break;
case LZMA_BUF_ERROR: msg = "Compressed data is truncated or otherwise corrupt"; break;
default: msg = "Unknown error, possibly a bug"; break;
}
cout << "Error in decompression: " << msg << " (error code " << res << ")\n";
return -1;
}
#endif
if (memcmp(result.constData(), resultCheck.constData(), resultLen)) { if (memcmp(result.constData(), resultCheck.constData(), resultLen)) {
cout << "Data differ :(\n"; cout << "Data differ :(\n";
return -1; return -1;
@ -242,7 +368,7 @@ int main(int argc, char *argv[])
cout << "Counting SHA1 hash..\n"; cout << "Counting SHA1 hash..\n";
uchar sha1Buffer[20]; uchar sha1Buffer[20];
memcpy(compressed.data() + hSigLen, hashSha1(compressed.constData() + hSigLen + hShaLen, compressedLen + hPropsLen + hOriginalSizeLen, sha1Buffer), hShaLen); // count sha1 memcpy(compressed.data() + hSigLen, hashSha1(compressed.constData() + hSigLen + hShaLen, uint32(compressedLen + hPropsLen + hOriginalSizeLen), sha1Buffer), hShaLen); // count sha1
uint32 siglen = 0; uint32 siglen = 0;
@ -283,7 +409,15 @@ int main(int argc, char *argv[])
cout << "Signature verified!\n"; cout << "Signature verified!\n";
RSA_free(pbKey); RSA_free(pbKey);
#ifdef Q_OS_WIN
QString outName(QString("tupdate%1").arg(version)); QString outName(QString("tupdate%1").arg(version));
#elif defined Q_OS_MAC
QString outName(QString("tmacupd%1").arg(version));
#elif defined Q_OS_LINUX
QString outName(QString("tlinuxupd%1").arg(version));
#else
#error Unknown platform!
#endif
QFile out(outName); QFile out(outName);
if (!out.open(QIODevice::WriteOnly)) { if (!out.open(QIODevice::WriteOnly)) {
cout << "Can't open '" << outName.toUtf8().constData() << "' for write..\n"; cout << "Can't open '" << outName.toUtf8().constData() << "' for write..\n";

View file

@ -34,7 +34,11 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include <openssl/aes.h> #include <openssl/aes.h>
#include <openssl/evp.h> #include <openssl/evp.h>
#ifdef Q_OS_WIN // use Lzma SDK for win
#include <LzmaLib.h> #include <LzmaLib.h>
#else
#include <lzma.h>
#endif
#include <string> #include <string>
#include <iostream> #include <iostream>

View file

@ -0,0 +1,207 @@
/*
This file is part of Telegram Desktop,
an unofficial desktop messaging app, see https://telegram.org
Telegram Desktop is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
It is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
Copyright (c) 2014 John Preston, https://tdesktop.com
*/
#import <Cocoa/Cocoa.h>
NSString *appName = @"Telegram.app";
NSString *appDir = nil;
NSString *workDir = nil;
#ifdef _DEBUG
BOOL _debug = YES;
#else
BOOL _debug = NO;
#endif
NSFileHandle *_logFile = nil;
void openLog() {
if (!_debug || _logFile) return;
NSString *logDir = [workDir stringByAppendingString:@"DebugLogs"];
if (![[NSFileManager defaultManager] createDirectoryAtPath:logDir withIntermediateDirectories:YES attributes:nil error:nil]) {
return;
}
NSDateFormatter *fmt = [[NSDateFormatter alloc] initWithDateFormat:@"DebugLogs/%Y%m%d %H%M%S_upd.txt" allowNaturalLanguage:NO];
NSString *logPath = [workDir stringByAppendingString:[fmt stringFromDate:[NSDate date]]];
[[NSFileManager defaultManager] createFileAtPath:logPath contents:nil attributes:nil];
_logFile = [NSFileHandle fileHandleForWritingAtPath:logPath];
}
void closeLog() {
if (!_logFile) return;
[_logFile closeFile];
}
void writeLog(NSString *msg) {
if (!_logFile) return;
[_logFile writeData:[[msg stringByAppendingString:@"\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[_logFile synchronizeFile];
}
void delFolder() {
[[NSFileManager defaultManager] removeItemAtPath:[workDir stringByAppendingString:@"tupdates/ready"] error:nil];
rmdir([[workDir stringByAppendingString:@"tupdates"] fileSystemRepresentation]);
}
int main(int argc, const char * argv[]) {
NSString *path = [[NSBundle mainBundle] bundlePath];
if (!path) {
return -1;
}
NSRange range = [path rangeOfString:appName options:NSBackwardsSearch];
if (range.location == NSNotFound) {
return -1;
}
appDir = [path substringToIndex:range.location > 0 ? range.location : 0];
openLog();
pid_t procId = 0;
BOOL update = YES, toSettings = NO, autoStart = NO;
NSString *key = nil;
for (int i = 0; i < argc; ++i) {
if ([@"-workpath" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) {
if (++i < argc) {
workDir = [NSString stringWithUTF8String:argv[i]];
}
} else if ([@"-procid" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) {
if (++i < argc) {
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
procId = [[formatter numberFromString:[NSString stringWithUTF8String:argv[i]]] intValue];
}
} else if ([@"-noupdate" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) {
update = NO;
} else if ([@"-tosettings" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) {
toSettings = YES;
} else if ([@"-autostart" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) {
autoStart = YES;
} else if ([@"-debug" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) {
_debug = YES;
} else if ([@"-key" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) {
if (++i < argc) key = [NSString stringWithUTF8String:argv[i]];
}
}
if (!workDir) workDir = appDir;
openLog();
NSMutableArray *argsArr = [[NSMutableArray alloc] initWithCapacity:argc];
for (int i = 0; i < argc; ++i) {
[argsArr addObject:[NSString stringWithUTF8String:argv[i]]];
}
writeLog([[NSArray arrayWithObjects:@"Arguments: '", [argsArr componentsJoinedByString:@"' '"], @"'..", nil] componentsJoinedByString:@""]);
if (key) writeLog([@"Key: " stringByAppendingString:key]);
if (toSettings) writeLog(@"To Settings!");
if (procId) {
NSRunningApplication *app = [NSRunningApplication runningApplicationWithProcessIdentifier:procId];
for (int i = 0; i < 5 && app != nil && ![app isTerminated]; ++i) {
usleep(200000);
app = [NSRunningApplication runningApplicationWithProcessIdentifier:procId];
}
if (app) [app forceTerminate];
app = [NSRunningApplication runningApplicationWithProcessIdentifier:procId];
for (int i = 0; i < 5 && app != nil && ![app isTerminated]; ++i) {
usleep(200000);
app = [NSRunningApplication runningApplicationWithProcessIdentifier:procId];
}
}
if (update) {
writeLog(@"Starting update files iteration!");
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *srcDir = [workDir stringByAppendingString:@"tupdates/ready/"];
NSArray *keys = [NSArray arrayWithObject:NSURLIsDirectoryKey];
NSDirectoryEnumerator *enumerator = [fileManager
enumeratorAtURL:[NSURL fileURLWithPath:[workDir stringByAppendingString:@"tupdates/ready"]]
includingPropertiesForKeys:keys
options:0
errorHandler:^(NSURL *url, NSError *error) {
return NO;
}];
for (NSURL *url in enumerator) {
NSString *srcPath = [url path];
writeLog([@"Handling file " stringByAppendingString:srcPath]);
NSRange r = [srcPath rangeOfString:srcDir];
if (r.location != 0) {
writeLog([@"Bad file found, no base path " stringByAppendingString:srcPath]);
delFolder();
break;
}
NSString *pathPart = [srcPath substringFromIndex:r.length];
if ([pathPart rangeOfString:appName].location != 0) {
writeLog([@"Skipping not app file " stringByAppendingString:srcPath]);
continue;
}
NSString *dstPath = [appDir stringByAppendingString:pathPart];
NSError *error;
NSNumber *isDirectory = nil;
writeLog([[NSArray arrayWithObjects: @"Copying file ", srcPath, @" to ", dstPath, nil] componentsJoinedByString:@""]);
if (![url getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:&error]) {
writeLog([@"Failed to get IsDirectory for file " stringByAppendingString:[url path]]);
delFolder();
break;
}
if ([isDirectory boolValue]) {
if (![fileManager createDirectoryAtPath:dstPath withIntermediateDirectories:YES attributes:nil error:nil]) {
writeLog([@"Failed to force path for directory " stringByAppendingString:dstPath]);
delFolder();
break;
}
} else if ([fileManager fileExistsAtPath:dstPath]) {
if (![[NSData dataWithContentsOfFile:srcPath] writeToFile:dstPath atomically:YES]) {
writeLog([@"Failed to edit file " stringByAppendingString:dstPath]);
delFolder();
break;
}
} else {
if (![fileManager copyItemAtPath:srcPath toPath:dstPath error:nil]) {
writeLog([@"Failed to copy file to " stringByAppendingString:dstPath]);
delFolder();
break;
}
}
}
delFolder();
}
NSString *appPath = [[NSArray arrayWithObjects:appDir, appName, nil] componentsJoinedByString:@""];
NSMutableArray *args = [[NSMutableArray alloc] initWithObjects:@"-noupdate", nil];
if (toSettings) [args addObject:@"-tosettings"];
if (_debug) [args addObject:@"-debug"];
if (autoStart) [args addObject:@"-autostart"];
if (key) {
[args addObject:@"-key"];
[args addObject:key];
}
writeLog([[NSArray arrayWithObjects:@"Running application '", appPath, @"' with args '", [args componentsJoinedByString:@"' '"], @"'..", nil] componentsJoinedByString:@""]);
NSError *error = nil;
NSRunningApplication *result = [[NSWorkspace sharedWorkspace]
launchApplicationAtURL:[NSURL fileURLWithPath:appPath]
options:NSWorkspaceLaunchDefault
configuration:[NSDictionary
dictionaryWithObject:args
forKey:NSWorkspaceLaunchConfigurationArguments]
error:&error];
if (!result) {
writeLog([@"Could not run application, error: " stringByAppendingString:error ? [error localizedDescription] : @"(nil)"]);
}
closeLog();
return result ? 0 : -1;
}

View file

@ -156,6 +156,13 @@ namespace App {
return (peer_id & 0x100000000L) ? MTP_peerChat(MTP_int(int32(peer_id & 0xFFFFFFFFL))) : MTP_peerUser(MTP_int(int32(peer_id & 0xFFFFFFFFL))); return (peer_id & 0x100000000L) ? MTP_peerChat(MTP_int(int32(peer_id & 0xFFFFFFFFL))) : MTP_peerUser(MTP_int(int32(peer_id & 0xFFFFFFFFL)));
} }
int32 userFromPeer(const PeerId &peer_id) {
return (peer_id & 0x100000000L) ? 0 : int32(peer_id & 0xFFFFFFFFL);
}
int32 chatFromPeer(const PeerId &peer_id) {
return (peer_id & 0x100000000L) ? int32(peer_id & 0xFFFFFFFFL) : 0;
}
int32 onlineWillChangeIn(int32 online, int32 now) { int32 onlineWillChangeIn(int32 online, int32 now) {
if (online <= 0) return 86400; if (online <= 0) return 86400;
if (online > now) { if (online > now) {
@ -314,7 +321,7 @@ namespace App {
case mtpc_userStatusOnline: data->onlineTill = status->c_userStatusOnline().vexpires.v; break; case mtpc_userStatusOnline: data->onlineTill = status->c_userStatusOnline().vexpires.v; break;
} }
if (data->contact < 0 && !data->phone.isEmpty() && data->id != MTP::authedId()) { if (data->contact < 0 && !data->phone.isEmpty() && (data->id & 0xFFFFFFFF) != MTP::authedId()) {
data->contact = 0; data->contact = 0;
} }
if (data->contact > 0 && !wasContact) { if (data->contact > 0 && !wasContact) {
@ -605,7 +612,7 @@ namespace App {
} }
if (user->contact > 0) { if (user->contact > 0) {
if (!wasContact) { if (!wasContact) {
App::main()->addNewContact(user->id & 0xFFFFFFFF, false); App::main()->addNewContact(App::userFromPeer(user->id), false);
user->input = MTP_inputPeerContact(userId); user->input = MTP_inputPeerContact(userId);
user->inputUser = MTP_inputUserContact(userId); user->inputUser = MTP_inputUserContact(userId);
} }
@ -614,7 +621,7 @@ namespace App {
user->input = MTP_inputPeerForeign(userId, MTP_long(user->access)); user->input = MTP_inputPeerForeign(userId, MTP_long(user->access));
user->inputUser = MTP_inputUserForeign(userId, MTP_long(user->access)); user->inputUser = MTP_inputUserForeign(userId, MTP_long(user->access));
} }
if (user->contact < 0 && !user->phone.isEmpty() && user->id != MTP::authedId()) { if (user->contact < 0 && !user->phone.isEmpty() && App::userFromPeer(user->id) != MTP::authedId()) {
user->contact = 0; user->contact = 0;
} }
if (wasContact) { if (wasContact) {
@ -1204,9 +1211,11 @@ namespace App {
if (!::sprite) { if (!::sprite) {
::sprite = new QPixmap(st::spriteFile); ::sprite = new QPixmap(st::spriteFile);
if (cRetina()) ::sprite->setDevicePixelRatio(cRetinaFactor());
} }
if (!::emojis) { if (!::emojis) {
::emojis = new QPixmap(st::emojisFile); ::emojis = new QPixmap(st::emojisFile);
if (cRetina()) ::emojis->setDevicePixelRatio(cRetinaFactor());
} }
initEmoji(); initEmoji();
} }
@ -1216,7 +1225,9 @@ namespace App {
textlnkDown(TextLinkPtr()); textlnkDown(TextLinkPtr());
if (completely) { if (completely) {
LOG(("Deleting sound.."));
delete newMsgSound; delete newMsgSound;
LOG(("Sound deleted!"));
newMsgSound = 0; newMsgSound = 0;
delete ::sprite; delete ::sprite;
@ -1300,12 +1311,13 @@ namespace App {
EmojisMap *map = &(fontHeight == st::taDefFlat.font->height ? mainEmojisMap : otherEmojisMap[fontHeight]); EmojisMap *map = &(fontHeight == st::taDefFlat.font->height ? mainEmojisMap : otherEmojisMap[fontHeight]);
EmojisMap::const_iterator i = map->constFind(emoji->code); EmojisMap::const_iterator i = map->constFind(emoji->code);
if (i == map->cend()) { if (i == map->cend()) {
QImage img(st::emojiSize + st::emojiPadding * 2, fontHeight, QImage::Format_ARGB32_Premultiplied); QImage img(st::emojiImgSize + st::emojiPadding * cIntRetinaFactor() * 2, fontHeight * cIntRetinaFactor(), QImage::Format_ARGB32_Premultiplied);
if (cRetina()) img.setDevicePixelRatio(cRetinaFactor());
{ {
QPainter p(&img); QPainter p(&img);
p.setCompositionMode(QPainter::CompositionMode_Source); p.setCompositionMode(QPainter::CompositionMode_Source);
p.fillRect(0, 0, img.width(), img.height(), Qt::transparent); p.fillRect(0, 0, img.width(), img.height(), Qt::transparent);
p.drawPixmap(QPoint(st::emojiPadding, (fontHeight - st::emojiSize) / 2), App::emojis(), QRect(emoji->x, emoji->y, st::emojiSize, st::emojiSize)); p.drawPixmap(QPoint(st::emojiPadding * cIntRetinaFactor(), (fontHeight * cIntRetinaFactor() - st::emojiImgSize) / 2), App::emojis(), QRect(emoji->x, emoji->y, st::emojiImgSize, st::emojiImgSize));
} }
i = map->insert(emoji->code, QPixmap::fromImage(img)); i = map->insert(emoji->code, QPixmap::fromImage(img));
} }
@ -1605,7 +1617,7 @@ namespace App {
continue; continue;
} }
uint32 dataLen = *(const uint32*)decrypted.constData(); uint32 dataLen = *(const uint32*)decrypted.constData();
if (dataLen > decrypted.size() || dataLen <= fullDataLen - 16 || dataLen < 4) { if (dataLen > uint32(decrypted.size()) || dataLen <= fullDataLen - 16 || dataLen < 4) {
LOG(("App Error: bad decrypted part size: %1, fullDataLen: %2, decrypted size: %3").arg(dataLen).arg(fullDataLen).arg(decrypted.size())); LOG(("App Error: bad decrypted part size: %1, fullDataLen: %2, decrypted size: %3").arg(dataLen).arg(fullDataLen).arg(decrypted.size()));
continue; continue;
} }
@ -1771,7 +1783,7 @@ namespace App {
quint32 count; quint32 count;
stream >> count; stream >> count;
for (int32 i = 0; i < count; ++i) { for (uint32 i = 0; i < count; ++i) {
readOneMuted(stream); readOneMuted(stream);
} }
} }

View file

@ -60,6 +60,8 @@ namespace App {
return peerFromUser(user_id.v); return peerFromUser(user_id.v);
} }
MTPpeer peerToMTP(const PeerId &peer_id); MTPpeer peerToMTP(const PeerId &peer_id);
int32 userFromPeer(const PeerId &peer_id);
int32 chatFromPeer(const PeerId &peer_id);
int32 onlineWillChangeIn(int32 onlineOnServer, int32 nowOnServer); int32 onlineWillChangeIn(int32 onlineOnServer, int32 nowOnServer);
QString onlineText(int32 onlineOnServer, int32 nowOnServer); QString onlineText(int32 onlineOnServer, int32 nowOnServer);

View file

@ -96,6 +96,12 @@ Application::Application(int &argc, char **argv) : PsApplication(argc, argv),
cSetScreenScale(dbisTwo); cSetScreenScale(dbisTwo);
} }
if (devicePixelRatio() > 1) {
cSetRetina(true);
cSetRetinaFactor(devicePixelRatio());
cSetIntRetinaFactor(int32(cRetinaFactor()));
}
if (!cLangFile().isEmpty()) { if (!cLangFile().isEmpty()) {
LangLoaderPlain loader(cLangFile()); LangLoaderPlain loader(cLangFile());
if (!loader.errors().isEmpty()) { if (!loader.errors().isEmpty()) {
@ -177,7 +183,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\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { if (QRegularExpression("^(tupdate|tmacupd|tlinuxupd)\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) {
QFile(i->absoluteFilePath()).remove(); QFile(i->absoluteFilePath()).remove();
} }
} }
@ -185,6 +191,7 @@ void Application::updateGotCurrent() {
emit updateLatest(); emit updateLatest();
} }
startUpdateCheck(true); startUpdateCheck(true);
App::writeConfig();
} }
void Application::updateFailedCurrent(QNetworkReply::NetworkError e) { void Application::updateFailedCurrent(QNetworkReply::NetworkError e) {
@ -403,16 +410,16 @@ 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\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { if (QRegularExpression("^(tupdate|tmacupd|tlinuxupd)\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) {
sendRequest = true; sendRequest = true;
} }
} }
} }
} }
if (cManyInstance() && !cDebug() || cPlatform() == dbipMac) return; // only main instance is updating if ((cManyInstance() && !cDebug()) || cPlatform() == dbipLinux) return; // only main instance is updating
if (sendRequest) { if (sendRequest) {
QNetworkRequest checkVersion(QUrl(qsl("http://tdesktop.com/win/tupdates/current"))); QNetworkRequest checkVersion(cUpdateURL());
if (updateReply) updateReply->deleteLater(); if (updateReply) updateReply->deleteLater();
App::setProxySettings(updateManager); App::setProxySettings(updateManager);
@ -497,10 +504,6 @@ void Application::startApp() {
App::writeUserConfig(); App::writeUserConfig();
cSetNeedConfigResave(false); cSetNeedConfigResave(false);
} }
if (devicePixelRatio() > 1) {
cSetRetina(true);
cSetRetinaFactor(devicePixelRatio());
}
window->createWinId(); window->createWinId();
window->init(); window->init();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

View file

@ -22,10 +22,10 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include "mainwidget.h" #include "mainwidget.h"
#include "window.h" #include "window.h"
AboutBox::AboutBox() : _hiding(false), AboutBox::AboutBox() :
_text(this, lang(lng_about_text), st::aboutLabel, st::aboutTextStyle),
_done(this, lang(lng_about_done), st::aboutCloseButton), _done(this, lang(lng_about_done), st::aboutCloseButton),
a_opacity(0, 1) { _text(this, lang(lng_about_text), st::aboutLabel, st::aboutTextStyle),
_hiding(false), a_opacity(0, 1) {
_width = st::aboutWidth; _width = st::aboutWidth;
_height = st::aboutHeight; _height = st::aboutHeight;
@ -80,7 +80,7 @@ void AboutBox::paintEvent(QPaintEvent *e) {
// fill bg // fill bg
p.fillRect(0, 0, _width, _height, st::boxBG->b); p.fillRect(0, 0, _width, _height, st::boxBG->b);
p.drawPixmap(QPoint((_width - st::aboutIcon.width()) / 2, st::aboutIconTop), App::sprite(), st::aboutIcon); p.drawPixmap(QPoint((_width - st::aboutIcon.pxWidth()) / 2, st::aboutIconTop), App::sprite(), st::aboutIcon);
p.setPen(st::black->p); p.setPen(st::black->p);
p.setFont(st::aboutHeaderFont->f); p.setFont(st::aboutHeaderFont->f);

View file

@ -24,14 +24,14 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include "window.h" #include "window.h"
AddContactBox::AddContactBox(QString fname, QString lname, QString phone) : AddContactBox::AddContactBox(QString fname, QString lname, QString phone) :
_hiding(false), _peer(0), _addRequest(0), _contactId(0), _peer(0),
_firstInput(this, st::inpAddContact, lang(lng_signup_firstname), fname),
_lastInput(this, st::inpAddContact, lang(lng_signup_lastname), lname),
_phoneInput(this, st::inpAddContact, lang(lng_contact_phone), phone.isEmpty() ? phone : App::formatPhone(phone)),
_addButton(this, lang(lng_add_contact), st::btnSelectDone), _addButton(this, lang(lng_add_contact), st::btnSelectDone),
_retryButton(this, lang(lng_try_other_contact), st::btnSelectDone), _retryButton(this, lang(lng_try_other_contact), st::btnSelectDone),
_cancelButton(this, lang(lng_cancel), st::btnSelectCancel), _cancelButton(this, lang(lng_cancel), st::btnSelectCancel),
a_opacity(0, 1) { _firstInput(this, st::inpAddContact, lang(lng_signup_firstname), fname),
_lastInput(this, st::inpAddContact, lang(lng_signup_lastname), lname),
_phoneInput(this, st::inpAddContact, lang(lng_contact_phone), phone.isEmpty() ? phone : App::formatPhone(phone)),
_contactId(0), _addRequest(0), a_opacity(0, 1), _hiding(false) {
if (!phone.isEmpty()) { if (!phone.isEmpty()) {
_phoneInput.setDisabled(true); _phoneInput.setDisabled(true);
@ -41,14 +41,14 @@ AddContactBox::AddContactBox(QString fname, QString lname, QString phone) :
} }
AddContactBox::AddContactBox(PeerData *peer) : AddContactBox::AddContactBox(PeerData *peer) :
_hiding(false), _peer(peer), _addRequest(0), _contactId(0), _peer(peer),
_firstInput(this, st::inpAddContact, lang(peer->chat ? lng_dlg_new_group_name : lng_signup_firstname), peer->chat ? peer->name : peer->asUser()->firstName),
_lastInput(this, st::inpAddContact, lang(lng_signup_lastname), peer->chat ? QString() : peer->asUser()->lastName),
_phoneInput(this, st::inpAddContact, lang(lng_contact_phone)),
_addButton(this, lang(lng_settings_save), st::btnSelectDone), _addButton(this, lang(lng_settings_save), st::btnSelectDone),
_retryButton(this, lang(lng_try_other_contact), st::btnSelectDone), _retryButton(this, lang(lng_try_other_contact), st::btnSelectDone),
_cancelButton(this, lang(lng_cancel), st::btnSelectCancel), _cancelButton(this, lang(lng_cancel), st::btnSelectCancel),
a_opacity(0, 1) { _firstInput(this, st::inpAddContact, lang(peer->chat ? lng_dlg_new_group_name : lng_signup_firstname), peer->chat ? peer->name : peer->asUser()->firstName),
_lastInput(this, st::inpAddContact, lang(lng_signup_lastname), peer->chat ? QString() : peer->asUser()->lastName),
_phoneInput(this, st::inpAddContact, lang(lng_contact_phone)),
_contactId(0), _addRequest(0), a_opacity(0, 1), _hiding(false) {
initBox(); initBox();
} }
@ -204,7 +204,7 @@ void AddContactBox::animStep(float64 dt) {
_cache = QPixmap(); _cache = QPixmap();
if (!_hiding) { if (!_hiding) {
showAll(); showAll();
if (_firstInput.text().isEmpty() && _lastInput.text().isEmpty() || _phoneInput.isHidden() || !_phoneInput.isEnabled()) { if ((_firstInput.text().isEmpty() && _lastInput.text().isEmpty()) || _phoneInput.isHidden() || !_phoneInput.isEnabled()) {
_firstInput.setFocus(); _firstInput.setFocus();
} else { } else {
_phoneInput.setFocus(); _phoneInput.setFocus();
@ -238,7 +238,7 @@ void AddContactBox::onSend() {
_addRequest = MTP::send(MTPaccount_UpdateProfile(MTP_string(firstName), MTP_string(lastName)), rpcDone(&AddContactBox::onSaveSelfDone), rpcFail(&AddContactBox::onSaveSelfFail)); _addRequest = MTP::send(MTPaccount_UpdateProfile(MTP_string(firstName), MTP_string(lastName)), rpcDone(&AddContactBox::onSaveSelfDone), rpcFail(&AddContactBox::onSaveSelfFail));
} else if (_peer) { } else if (_peer) {
if (_peer->chat) { if (_peer->chat) {
_addRequest = MTP::send(MTPmessages_EditChatTitle(MTP_int(int32(_peer->id & 0xFFFFFFFF)), MTP_string(firstName)), rpcDone(&AddContactBox::onSaveChatDone), rpcFail(&AddContactBox::onSaveFail)); _addRequest = MTP::send(MTPmessages_EditChatTitle(MTP_int(App::chatFromPeer(_peer->id)), MTP_string(firstName)), rpcDone(&AddContactBox::onSaveChatDone), rpcFail(&AddContactBox::onSaveFail));
} else { } else {
_contactId = MTP::nonce<uint64>(); _contactId = MTP::nonce<uint64>();
QVector<MTPInputContact> v(1, MTP_inputPhoneContact(MTP_long(_contactId), MTP_string(_peer->asUser()->phone), MTP_string(firstName), MTP_string(lastName))); QVector<MTPInputContact> v(1, MTP_inputPhoneContact(MTP_long(_contactId), MTP_string(_peer->asUser()->phone), MTP_string(firstName), MTP_string(lastName)));

View file

@ -22,8 +22,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include "mainwidget.h" #include "mainwidget.h"
#include "window.h" #include "window.h"
AddParticipantInner::AddParticipantInner(ChatData *chat) : _chat(chat), _selCount(0), AddParticipantInner::AddParticipantInner(ChatData *chat) : _chat(chat),
_contacts(&App::main()->contactsList()), _sel(0), _filteredSel(-1), _mouseSel(false) { _contacts(&App::main()->contactsList()), _sel(0), _filteredSel(-1), _mouseSel(false), _selCount(0) {
_filter = qsl("a"); _filter = qsl("a");
updateFilter(); updateFilter();
@ -151,7 +151,7 @@ void AddParticipantInner::paintDialog(QPainter &p, DialogRow *row, bool sel) {
data->name.drawElided(p, left + st::profileListPhotoSize + st::profileListPadding.width(), st::profileListNameTop, width() - st::participantDelta - st::profileListPadding.width() * 2 - st::profileListPhotoSize - st::profileListPadding.width() * 2); data->name.drawElided(p, left + st::profileListPhotoSize + st::profileListPadding.width(), st::profileListNameTop, width() - st::participantDelta - st::profileListPadding.width() * 2 - st::profileListPhotoSize - st::profileListPadding.width() * 2);
if (sel || data->check) { if (sel || data->check) {
p.drawPixmap(QPoint(width() - st::profileCheckRect.width() - st::profileCheckDeltaX, st::profileListPadding.height() + (st::profileListPhotoSize - st::profileCheckRect.height()) / 2 - st::profileCheckDeltaY), App::sprite(), (data->check ? st::profileCheckActiveRect : st::profileCheckRect)); p.drawPixmap(QPoint(width() - st::profileCheckRect.pxWidth() - st::profileCheckDeltaX, st::profileListPadding.height() + (st::profileListPhotoSize - st::profileCheckRect.pxHeight()) / 2 - st::profileCheckDeltaY), App::sprite(), (data->check ? st::profileCheckActiveRect : st::profileCheckRect));
} }
p.setFont(st::profileSubFont->f); p.setFont(st::profileSubFont->f);
@ -507,12 +507,12 @@ void AddParticipantInner::selectSkipPage(int32 h, int32 dir) {
selectSkip(points * dir); selectSkip(points * dir);
} }
AddParticipantBox::AddParticipantBox(ChatData *chat) : _inner(chat), _hiding(false), AddParticipantBox::AddParticipantBox(ChatData *chat) :
_scroll(this, st::newGroupScroll), _scroll(this, st::newGroupScroll), _inner(chat),
_filter(this, st::contactsFilter, lang(lng_participant_filter)), _filter(this, st::contactsFilter, lang(lng_participant_filter)),
_invite(this, lang(lng_participant_invite), st::btnSelectDone), _invite(this, lang(lng_participant_invite), st::btnSelectDone),
_cancel(this, lang(lng_cancel), st::btnSelectCancel), _cancel(this, lang(lng_cancel), st::btnSelectCancel),
a_opacity(0, 1), af_opacity(anim::linear) { _hiding(false), a_opacity(0, 1), af_opacity(anim::linear) {
_width = st::participantWidth; _width = st::participantWidth;
_height = App::wnd()->height() - st::boxPadding.top() - st::boxPadding.bottom(); _height = App::wnd()->height() - st::boxPadding.top() - st::boxPadding.bottom();

View file

@ -22,10 +22,10 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include "mainwidget.h" #include "mainwidget.h"
#include "window.h" #include "window.h"
ConfirmBox::ConfirmBox(QString text, QString doneText, QString cancelText) : _hiding(false), _text(100), ConfirmBox::ConfirmBox(QString text, QString doneText, QString cancelText) :
_confirm(this, doneText.isEmpty() ? lang(lng_continue) : doneText, st::btnSelectDone), _confirm(this, doneText.isEmpty() ? lang(lng_continue) : doneText, st::btnSelectDone),
_cancel(this, cancelText.isEmpty() ? lang(lng_cancel) : cancelText, st::btnSelectCancel), _cancel(this, cancelText.isEmpty() ? lang(lng_cancel) : cancelText, st::btnSelectCancel),
a_opacity(0, 1), af_opacity(anim::linear) { _text(100), _hiding(false), a_opacity(0, 1), af_opacity(anim::linear) {
_text.setText(st::boxFont, text, _textPlainOptions); _text.setText(st::boxFont, text, _textPlainOptions);

View file

@ -22,17 +22,17 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include "mainwidget.h" #include "mainwidget.h"
#include "window.h" #include "window.h"
ConnectionBox::ConnectionBox() : _hiding(false), ConnectionBox::ConnectionBox() :
_saveButton(this, lang(lng_connection_save), st::btnSelectDone),
_cancelButton(this, lang(lng_cancel), st::btnSelectCancel),
_hostInput(this, st::inpConnectionHost, lang(lng_connection_host_ph), cConnectionProxy().host), _hostInput(this, st::inpConnectionHost, lang(lng_connection_host_ph), cConnectionProxy().host),
_portInput(this, st::inpConnectionPort, lang(lng_connection_port_ph), QString::number(cConnectionProxy().port)), _portInput(this, st::inpConnectionPort, lang(lng_connection_port_ph), QString::number(cConnectionProxy().port)),
_userInput(this, st::inpConnectionUser, lang(lng_connection_user_ph), cConnectionProxy().user), _userInput(this, st::inpConnectionUser, lang(lng_connection_user_ph), cConnectionProxy().user),
_passwordInput(this, st::inpConnectionPassword, lang(lng_connection_password_ph), cConnectionProxy().password), _passwordInput(this, st::inpConnectionPassword, lang(lng_connection_password_ph), cConnectionProxy().password),
_saveButton(this, lang(lng_connection_save), st::btnSelectDone),
_cancelButton(this, lang(lng_cancel), st::btnSelectCancel),
_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)),
a_opacity(0, 1) { a_opacity(0, 1), _hiding(false) {
_width = st::addContactWidth; _width = st::addContactWidth;

View file

@ -120,10 +120,10 @@ void ContactsInner::paintDialog(QPainter &p, DialogRow *row, bool sel) {
p.drawPixmap(left, st::profileListPadding.height(), user->photo->pix(st::profileListPhotoSize)); p.drawPixmap(left, st::profileListPadding.height(), user->photo->pix(st::profileListPhotoSize));
p.setPen(st::profileListNameColor->p); p.setPen(st::profileListNameColor->p);
data->name.drawElided(p, left + st::profileListPhotoSize + st::participantDelta, st::profileListNameTop, width() - st::profileListPadding.width() - st::profileListPhotoSize - st::profileListPadding.width() - st::participantDelta - st::scrollDef.width - st::contactsImg.width()); data->name.drawElided(p, left + st::profileListPhotoSize + st::participantDelta, st::profileListNameTop, width() - st::profileListPadding.width() - st::profileListPhotoSize - st::profileListPadding.width() - st::participantDelta - st::scrollDef.width - st::contactsImg.pxWidth());
if (sel) { if (sel) {
p.drawPixmap(QPoint(width() - st::contactsImg.width() - st::profileCheckDeltaX, st::profileListPadding.height() + (st::profileListPhotoSize - st::contactsImg.height()) / 2 - st::profileCheckDeltaY), App::sprite(), st::contactsImg); p.drawPixmap(QPoint(width() - st::contactsImg.pxWidth() - st::profileCheckDeltaX, st::profileListPadding.height() + (st::profileListPhotoSize - st::contactsImg.pxHeight()) / 2 - st::profileCheckDeltaY), App::sprite(), st::contactsImg);
} }
p.setFont(st::profileSubFont->f); p.setFont(st::profileSubFont->f);
@ -394,11 +394,11 @@ void ContactsInner::selectSkipPage(int32 h, int32 dir) {
selectSkip(points * dir); selectSkip(points * dir);
} }
ContactsBox::ContactsBox() : _inner(), _hiding(false), _scroll(this, st::newGroupScroll), ContactsBox::ContactsBox() : _scroll(this, st::newGroupScroll), _inner(),
_addContact(this, lang(lng_add_contact_button), st::contactsAdd), _addContact(this, lang(lng_add_contact_button), st::contactsAdd),
_filter(this, st::contactsFilter, lang(lng_participant_filter)), _filter(this, st::contactsFilter, lang(lng_participant_filter)),
_close(this, lang(lng_contacts_done), st::contactsClose), _close(this, lang(lng_contacts_done), st::contactsClose),
a_opacity(0, 1) { _hiding(false), a_opacity(0, 1) {
_width = st::participantWidth; _width = st::participantWidth;
_height = App::wnd()->height() - st::boxPadding.top() - st::boxPadding.bottom(); _height = App::wnd()->height() - st::boxPadding.top() - st::boxPadding.bottom();

View file

@ -21,14 +21,14 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include "downloadpathbox.h" #include "downloadpathbox.h"
#include "gui/filedialog.h" #include "gui/filedialog.h"
DownloadPathBox::DownloadPathBox() : _hiding(false), DownloadPathBox::DownloadPathBox() :
_path(cDownloadPath()), _path(cDownloadPath()),
_tempRadio(this, qsl("dir_type"), 0, lang(lng_download_path_temp_radio), _path.isEmpty()), _tempRadio(this, qsl("dir_type"), 0, lang(lng_download_path_temp_radio), _path.isEmpty()),
_dirRadio(this, qsl("dir_type"), 1, lang(lng_download_path_dir_radio), !_path.isEmpty()), _dirRadio(this, qsl("dir_type"), 1, lang(lng_download_path_dir_radio), !_path.isEmpty()),
_dirInput(this, st::inpDownloadDir, QString(), QDir::toNativeSeparators(_path)), _dirInput(this, st::inpDownloadDir, QString(), QDir::toNativeSeparators(_path)),
_saveButton(this, lang(lng_connection_save), st::btnSelectDone), _saveButton(this, lang(lng_connection_save), st::btnSelectDone),
_cancelButton(this, lang(lng_cancel), st::btnSelectCancel), _cancelButton(this, lang(lng_cancel), st::btnSelectCancel),
a_opacity(0, 1) { a_opacity(0, 1), _hiding(false) {
_width = st::addContactWidth; _width = st::addContactWidth;

View file

@ -65,9 +65,8 @@ namespace {
const uint32 replacesCount = sizeof(replaces) / sizeof(EmojiReplace), replacesInRow = 8; const uint32 replacesCount = sizeof(replaces) / sizeof(EmojiReplace), replacesInRow = 8;
} }
EmojiBox::EmojiBox() : _hiding(false), EmojiBox::EmojiBox() : _done(this, lang(lng_about_done), st::aboutCloseButton),
_done(this, lang(lng_about_done), st::aboutCloseButton), _hiding(false), a_opacity(0, 1) {
a_opacity(0, 1) {
fillBlocks(); fillBlocks();
@ -96,7 +95,7 @@ EmojiBox::EmojiBox() : _hiding(false),
void EmojiBox::fillBlocks() { void EmojiBox::fillBlocks() {
BlockRow currentRow; BlockRow currentRow;
currentRow.reserve(replacesInRow); currentRow.reserve(replacesInRow);
for (int32 i = 0; i < replacesCount; ++i) { for (uint32 i = 0; i < replacesCount; ++i) {
Block block(getEmoji(replaces[i].code), QString::fromUtf8(replaces[i].replace)); Block block(getEmoji(replaces[i].code), QString::fromUtf8(replaces[i].replace));
currentRow.push_back(block); currentRow.push_back(block);
if (currentRow.size() == replacesInRow) { if (currentRow.size() == replacesInRow) {
@ -150,7 +149,7 @@ void EmojiBox::paintEvent(QPaintEvent *e) {
for (BlockRow::const_iterator j = i->cbegin(), en = i->cend(); j != en; ++j) { for (BlockRow::const_iterator j = i->cbegin(), en = i->cend(); j != en; ++j) {
if (j->emoji) { if (j->emoji) {
QPoint pos(left + (st::emojiReplaceWidth - st::emojiSize) / 2, top + (st::emojiReplaceHeight - _blockHeight) / 2); QPoint pos(left + (st::emojiReplaceWidth - st::emojiSize) / 2, top + (st::emojiReplaceHeight - _blockHeight) / 2);
p.drawPixmap(pos, App::emojis(), QRect(j->emoji->x, j->emoji->y, st::emojiSize, st::emojiSize)); p.drawPixmap(pos, App::emojis(), QRect(j->emoji->x, j->emoji->y, st::emojiImgSize, st::emojiImgSize));
} }
QRect trect(left, top + (st::emojiReplaceHeight + _blockHeight) / 2 - st::emojiTextFont->height, st::emojiReplaceWidth, st::emojiTextFont->height); QRect trect(left, top + (st::emojiReplaceHeight + _blockHeight) / 2 - st::emojiTextFont->height, st::emojiReplaceWidth, st::emojiTextFont->height);
p.drawText(trect, j->text, QTextOption(Qt::AlignHCenter | Qt::AlignTop)); p.drawText(trect, j->text, QTextOption(Qt::AlignHCenter | Qt::AlignTop));

View file

@ -129,10 +129,10 @@ void NewGroupInner::paintDialog(QPainter &p, DialogRow *row, bool sel) {
} else { } else {
p.setPen(st::profileListNameColor->p); p.setPen(st::profileListNameColor->p);
} }
data->name.drawElided(p, left + st::profileListPhotoSize + st::participantDelta, st::profileListNameTop, width() - st::profileListPadding.width() - st::profileListPhotoSize - st::profileListPadding.width() - st::participantDelta - st::scrollDef.width - st::profileCheckRect.width()); data->name.drawElided(p, left + st::profileListPhotoSize + st::participantDelta, st::profileListNameTop, width() - st::profileListPadding.width() - st::profileListPhotoSize - st::profileListPadding.width() - st::participantDelta - st::scrollDef.width - st::profileCheckRect.pxWidth());
if (sel || data->check) { if (sel || data->check) {
p.drawPixmap(QPoint(width() - st::profileCheckRect.width() - st::profileCheckDeltaX, st::profileListPadding.height() + (st::profileListPhotoSize - st::profileCheckRect.height()) / 2 - st::profileCheckDeltaY), App::sprite(), (data->check ? st::profileCheckActiveRect : st::profileCheckRect)); p.drawPixmap(QPoint(width() - st::profileCheckRect.pxWidth() - st::profileCheckDeltaX, st::profileListPadding.height() + (st::profileListPhotoSize - st::profileCheckRect.pxHeight()) / 2 - st::profileCheckDeltaY), App::sprite(), (data->check ? st::profileCheckActiveRect : st::profileCheckRect));
} }
p.setFont(st::profileSubFont->f); p.setFont(st::profileSubFont->f);
@ -438,11 +438,11 @@ QVector<MTPInputUser> NewGroupInner::selectedInputs() {
return result; return result;
} }
NewGroupBox::NewGroupBox() : _inner(), _hiding(false), _scroll(this, st::newGroupScroll), NewGroupBox::NewGroupBox() : _scroll(this, st::newGroupScroll), _inner(),
_filter(this, st::contactsFilter, lang(lng_participant_filter)), _filter(this, st::contactsFilter, lang(lng_participant_filter)),
_next(this, lang(lng_create_group_next), st::btnSelectDone), _next(this, lang(lng_create_group_next), st::btnSelectDone),
_cancel(this, lang(lng_cancel), st::btnSelectCancel), _cancel(this, lang(lng_cancel), st::btnSelectCancel),
a_opacity(0, 1) { _hiding(false), a_opacity(0, 1) {
_width = st::participantWidth; _width = st::participantWidth;
_height = App::wnd()->height() - st::boxPadding.top() - st::boxPadding.bottom(); _height = App::wnd()->height() - st::boxPadding.top() - st::boxPadding.bottom();
@ -596,11 +596,11 @@ NewGroupBox::~NewGroupBox() {
} }
CreateGroupBox::CreateGroupBox(const MTPVector<MTPInputUser> &users) : _users(users), CreateGroupBox::CreateGroupBox(const MTPVector<MTPInputUser> &users) : _users(users),
_hiding(false), _createRequestId(0), _createRequestId(0),
_name(this, st::newGroupName, lang(lng_dlg_new_group_name)), _name(this, st::newGroupName, lang(lng_dlg_new_group_name)),
_create(this, lang(lng_dlg_create_group), st::btnSelectDone), _create(this, lang(lng_dlg_create_group), st::btnSelectDone),
_cancel(this, lang(lng_cancel), st::btnSelectCancel), _cancel(this, lang(lng_cancel), st::btnSelectCancel),
a_opacity(0, 1) { _hiding(false), a_opacity(0, 1) {
_width = st::addContactWidth; _width = st::addContactWidth;
_height = st::addContactTitleHeight + st::addContactPadding.top() + _name.height() + st::addContactPadding.bottom() + _create.height(); _height = st::addContactTitleHeight + st::addContactPadding.top() + _name.height() + st::addContactPadding.bottom() + _create.height();

View file

@ -25,10 +25,10 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include "photocropbox.h" #include "photocropbox.h"
#include "fileuploader.h" #include "fileuploader.h"
PhotoCropBox::PhotoCropBox(const QImage &img, const PeerId &peer) : _img(img), _downState(0), _peerId(peer), PhotoCropBox::PhotoCropBox(const QImage &img, const PeerId &peer) : _downState(0),
_sendButton(this, lang(lng_settings_save), st::btnSelectDone), _sendButton(this, lang(lng_settings_save), st::btnSelectDone),
_cancelButton(this, lang(lng_cancel), st::btnSelectCancel), _cancelButton(this, lang(lng_cancel), st::btnSelectCancel),
a_opacity(0, 1) { _img(img), _peerId(peer), a_opacity(0, 1) {
connect(&_sendButton, SIGNAL(clicked()), this, SLOT(onSend())); connect(&_sendButton, SIGNAL(clicked()), this, SLOT(onSend()));
connect(&_cancelButton, SIGNAL(clicked()), this, SLOT(onCancel())); connect(&_cancelButton, SIGNAL(clicked()), this, SLOT(onCancel()));

View file

@ -17,9 +17,13 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
*/ */
#pragma once #pragma once
static const int32 AppVersion = 5004; static const int32 AppVersion = 5005;
static const wchar_t *AppVersionStr = L"0.5.4"; static const wchar_t *AppVersionStr = L"0.5.5";
#ifdef Q_OS_WIN
static const wchar_t *AppName = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Win (Unofficial)";
#else
static const wchar_t *AppName = L"Telegram Desktop";
#endif
static const wchar_t *AppId = L"{53F49750-6209-4FBF-9CA8-7A333C87D1ED}"; static const wchar_t *AppId = L"{53F49750-6209-4FBF-9CA8-7A333C87D1ED}";
#include "settings.h" #include "settings.h"

View file

@ -76,7 +76,7 @@ void DialogsListWidget::paintEvent(QPaintEvent *e) {
} }
void DialogsListWidget::activate() { void DialogsListWidget::activate() {
if (filter.isEmpty() && !sel || !filter.isEmpty() && (filteredSel < 0 || filteredSel >= filtered.size())) { if ((filter.isEmpty() && !sel) || (!filter.isEmpty() && (filteredSel < 0 || filteredSel >= filtered.size()))) {
selectSkip(1); selectSkip(1);
} }
} }
@ -90,7 +90,7 @@ void DialogsListWidget::mouseMoveEvent(QMouseEvent *e) {
void DialogsListWidget::onUpdateSelected(bool force) { void DialogsListWidget::onUpdateSelected(bool force) {
QPoint mouse(mapFromGlobal(lastMousePos)); QPoint mouse(mapFromGlobal(lastMousePos));
if (!force && !rect().contains(mouse) || !selByMouse) return; if ((!force && !rect().contains(mouse)) || !selByMouse) return;
int w = width(), mouseY = mouse.y(); int w = width(), mouseY = mouse.y();
if (filter.isEmpty()) { if (filter.isEmpty()) {
@ -704,9 +704,19 @@ DialogsIndexed &DialogsListWidget::dialogsList() {
return dialogs; return dialogs;
} }
DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent), _configLoaded(false), _drawShadow(true), DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent)
scroll(this, st::dlgScroll), list(&scroll, parent), _filter(this, st::dlgFilter, lang(lng_dlg_filter)), dlgOffset(0), dlgCount(-1), dlgPreloading(0), contactsRequest(0), , _configLoaded(false)
_newGroup(this, st::btnNewGroup), _addContact(this, st::btnAddContact) { , _drawShadow(true)
, dlgOffset(0)
, dlgCount(-1)
, dlgPreloading(0)
, contactsRequest(0)
, _filter(this, st::dlgFilter, lang(lng_dlg_filter))
, _newGroup(this, st::btnNewGroup)
, _addContact(this, st::btnAddContact)
, scroll(this, st::dlgScroll)
, list(&scroll, parent)
{
scroll.setWidget(&list); scroll.setWidget(&list);
scroll.setFocusPolicy(Qt::NoFocus); scroll.setFocusPolicy(Qt::NoFocus);
connect(&list, SIGNAL(mustScrollTo(int, int)), &scroll, SLOT(scrollToY(int, int))); connect(&list, SIGNAL(mustScrollTo(int, int)), &scroll, SLOT(scrollToY(int, int)));
@ -726,6 +736,7 @@ _newGroup(this, st::btnNewGroup), _addContact(this, st::btnAddContact) {
_filter.show(); _filter.show();
_filter.move(st::dlgPaddingHor, st::dlgFilterPadding); _filter.move(st::dlgPaddingHor, st::dlgFilterPadding);
_filter.setFocusPolicy(Qt::StrongFocus); _filter.setFocusPolicy(Qt::StrongFocus);
_filter.customUpDown(true);
_addContact.hide(); _addContact.hide();
_newGroup.show(); _newGroup.show();
_newGroup.move(width() - _newGroup.width() - st::dlgPaddingHor, 0); _newGroup.move(width() - _newGroup.width() - st::dlgPaddingHor, 0);

View file

@ -23,7 +23,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include "lang.h" #include "lang.h"
Dropdown::Dropdown(QWidget *parent) : TWidget(parent), Dropdown::Dropdown(QWidget *parent) : TWidget(parent),
_shadow(st::dropdownShadow), a_opacity(0), _hiding(false) { _hiding(false), a_opacity(0), _shadow(st::dropdownShadow) {
_width = st::dropdownPadding.left() + st::dropdownPadding.right(); _width = st::dropdownPadding.left() + st::dropdownPadding.right();
_height = st::dropdownPadding.top() + st::dropdownPadding.bottom(); _height = st::dropdownPadding.top() + st::dropdownPadding.bottom();
resize(_width, _height); resize(_width, _height);
@ -173,7 +173,7 @@ bool Dropdown::eventFilter(QObject *obj, QEvent *e) {
} }
DragArea::DragArea(QWidget *parent) : TWidget(parent), DragArea::DragArea(QWidget *parent) : TWidget(parent),
_shadow(st::boxShadow), a_opacity(0), a_color(st::dragColor->c), _hiding(false), _in(false) { _hiding(false), _in(false), a_opacity(0), a_color(st::dragColor->c), _shadow(st::boxShadow) {
setMouseTracking(true); setMouseTracking(true);
setAcceptDrops(true); setAcceptDrops(true);
} }
@ -311,7 +311,7 @@ bool DragArea::animStep(float64 ms) {
static const int emojiPerRow = 7, emojiRowsPerPage = 6; static const int emojiPerRow = 7, emojiRowsPerPage = 6;
EmojiPanInner::EmojiPanInner(QWidget *parent) : QWidget(parent), _selected(-1), _pressedSel(-1), _tab(cEmojiTab()) { EmojiPanInner::EmojiPanInner(QWidget *parent) : QWidget(parent), _tab(cEmojiTab()), _selected(-1), _pressedSel(-1) {
resize(emojiPerRow * st::emojiPanSize.width(), emojiRowsPerPage * st::emojiPanSize.height() - st::emojiPanSub); resize(emojiPerRow * st::emojiPanSize.width(), emojiRowsPerPage * st::emojiPanSize.height() - st::emojiPanSub);
setMouseTracking(true); setMouseTracking(true);
setFocusPolicy(Qt::NoFocus); setFocusPolicy(Qt::NoFocus);
@ -348,7 +348,7 @@ void EmojiPanInner::paintEvent(QPaintEvent *e) {
p.drawRoundedRect(QRect(w, st::emojiPanSize), st::emojiPanRound, st::emojiPanRound); p.drawRoundedRect(QRect(w, st::emojiPanSize), st::emojiPanRound, st::emojiPanRound);
p.setOpacity(1); p.setOpacity(1);
} }
QRect r(_emojis[index]->x, _emojis[index]->y, st::emojiSize, st::emojiSize); QRect r(_emojis[index]->x, _emojis[index]->y, st::emojiImgSize, st::emojiImgSize);
p.drawPixmap(w + QPoint((st::emojiPanSize.width() - st::emojiSize) / 2, (st::emojiPanSize.height() - st::emojiSize) / 2), App::emojis(), r); p.drawPixmap(w + QPoint((st::emojiPanSize.width() - st::emojiSize) / 2, (st::emojiPanSize.height() - st::emojiSize) / 2), App::emojis(), r);
} }
} }
@ -481,13 +481,14 @@ void EmojiPanInner::showEmojiPack(DBIEmojiTab packIndex) {
} }
EmojiPan::EmojiPan(QWidget *parent) : TWidget(parent), EmojiPan::EmojiPan(QWidget *parent) : TWidget(parent),
_hiding(false), a_opacity(0), _shadow(st::dropdownShadow),
_recent (this, qsl("emoji_group"), dbietRecent , QString(), cEmojiTab() == dbietRecent , st::rbEmojiRecent), _recent (this, qsl("emoji_group"), dbietRecent , QString(), cEmojiTab() == dbietRecent , st::rbEmojiRecent),
_people (this, qsl("emoji_group"), dbietPeople , QString(), cEmojiTab() == dbietPeople , st::rbEmojiPeople), _people (this, qsl("emoji_group"), dbietPeople , QString(), cEmojiTab() == dbietPeople , st::rbEmojiPeople),
_nature (this, qsl("emoji_group"), dbietNature , QString(), cEmojiTab() == dbietNature , st::rbEmojiNature), _nature (this, qsl("emoji_group"), dbietNature , QString(), cEmojiTab() == dbietNature , st::rbEmojiNature),
_objects(this, qsl("emoji_group"), dbietObjects, QString(), cEmojiTab() == dbietObjects, st::rbEmojiObjects), _objects(this, qsl("emoji_group"), dbietObjects, QString(), cEmojiTab() == dbietObjects, st::rbEmojiObjects),
_places (this, qsl("emoji_group"), dbietPlaces , QString(), cEmojiTab() == dbietPlaces , st::rbEmojiPlaces), _places (this, qsl("emoji_group"), dbietPlaces , QString(), cEmojiTab() == dbietPlaces , st::rbEmojiPlaces),
_symbols(this, qsl("emoji_group"), dbietSymbols, QString(), cEmojiTab() == dbietSymbols, st::rbEmojiSymbols), _symbols(this, qsl("emoji_group"), dbietSymbols, QString(), cEmojiTab() == dbietSymbols, st::rbEmojiSymbols),
_shadow(st::dropdownShadow), a_opacity(0), _hiding(false), _scroll(this, st::emojiScroll), _inner() { _scroll(this, st::emojiScroll), _inner() {
setFocusPolicy(Qt::NoFocus); setFocusPolicy(Qt::NoFocus);
_scroll.setFocusPolicy(Qt::NoFocus); _scroll.setFocusPolicy(Qt::NoFocus);
_scroll.viewport()->setFocusPolicy(Qt::NoFocus); _scroll.viewport()->setFocusPolicy(Qt::NoFocus);
@ -666,9 +667,8 @@ void EmojiPan::hideAll() {
} }
void EmojiPan::onTabChange() { void EmojiPan::onTabChange() {
DBIEmojiTab newTab; DBIEmojiTab newTab = dbietRecent;
if (_recent.checked()) newTab = dbietRecent; if (_people.checked()) newTab = dbietPeople;
else if (_people.checked()) newTab = dbietPeople;
else if (_nature.checked()) newTab = dbietNature; else if (_nature.checked()) newTab = dbietNature;
else if (_objects.checked()) newTab = dbietObjects; else if (_objects.checked()) newTab = dbietObjects;
else if (_places.checked()) newTab = dbietPlaces; else if (_places.checked()) newTab = dbietPlaces;

View file

@ -18,7 +18,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include "stdafx.h" #include "stdafx.h"
#include "fileuploader.h" #include "fileuploader.h"
FileUploader::FileUploader() : uploading(0), sentSize(0) { FileUploader::FileUploader() : sentSize(0), uploading(0) {
nextTimer.setSingleShot(true); nextTimer.setSingleShot(true);
connect(&nextTimer, SIGNAL(timeout()), this, SLOT(sendNext())); connect(&nextTimer, SIGNAL(timeout()), this, SLOT(sendNext()));
} }
@ -116,7 +116,7 @@ void FileUploader::sendNext() {
} else { } else {
toSend = i->media.data.mid(i->docSentParts * i->docPartSize, i->docPartSize); toSend = i->media.data.mid(i->docSentParts * i->docPartSize, i->docPartSize);
} }
if (toSend.size() > i->docPartSize || toSend.size() < i->docPartSize && i->docSentParts + 1 != i->docPartsCount) { if (toSend.size() > i->docPartSize || (toSend.size() < i->docPartSize && i->docSentParts + 1 != i->docPartsCount)) {
currentFailed(); currentFailed();
return; return;
} }

View file

@ -19,7 +19,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include "boxshadow.h" #include "boxshadow.h"
BoxShadow::BoxShadow(const style::rect &topLeft) : _size(topLeft.width()) { BoxShadow::BoxShadow(const style::rect &topLeft) : _size(topLeft.width() / cIntRetinaFactor()) {
QImage cornersImage(_size * 2, _size * 2, QImage::Format_ARGB32_Premultiplied); QImage cornersImage(_size * 2, _size * 2, QImage::Format_ARGB32_Premultiplied);
{ {
QPainter p(&cornersImage); QPainter p(&cornersImage);

View file

@ -61,7 +61,7 @@ namespace {
CountriesByISO2::const_iterator already = countriesByISO2.constFind(info->iso2); CountriesByISO2::const_iterator already = countriesByISO2.constFind(info->iso2);
if (already != countriesByISO2.cend()) { if (already != countriesByISO2.cend()) {
QString badISO = info->iso2; QString badISO = info->iso2;
badISO; (void)badISO;
} }
countriesByISO2.insert(info->iso2, info); countriesByISO2.insert(info->iso2, info);
} }
@ -82,7 +82,7 @@ QString findValidCode(QString fullCode) {
return ""; return "";
} }
CountryInput::CountryInput(QWidget *parent, const style::countryInput &st) : QWidget(parent), _st(st), _active(false), _select(0), _text(lang(lng_country_code)) { CountryInput::CountryInput(QWidget *parent, const style::countryInput &st) : QWidget(parent), _st(st), _active(false), _text(lang(lng_country_code)), _select(0) {
initCountries(); initCountries();
resize(_st.width, _st.height + _st.ptrSize.height()); resize(_st.width, _st.height + _st.ptrSize.height());
@ -204,8 +204,8 @@ CountryInput::~CountryInput() {
delete _select; delete _select;
} }
CountryList::CountryList(QWidget *parent, const style::countryList &st) : QWidget(parent), _sel(0), _mouseSel(false), CountryList::CountryList(QWidget *parent, const style::countryList &st) : QWidget(parent), _sel(0),
_st(st) { _st(st), _mouseSel(false) {
CountriesByISO2::const_iterator l = countriesByISO2.constFind(lastValidISO); CountriesByISO2::const_iterator l = countriesByISO2.constFind(lastValidISO);
bool seenLastValid = false; bool seenLastValid = false;
int already = countriesAll.size(); int already = countriesAll.size();
@ -338,7 +338,7 @@ void CountryList::mouseMoveEvent(QMouseEvent *e) {
void CountryList::onUpdateSelected(bool force) { void CountryList::onUpdateSelected(bool force) {
QPoint p(mapFromGlobal(_mousePos)); QPoint p(mapFromGlobal(_mousePos));
if (!force && !rect().contains(p) || !_mouseSel) return; if ((!force && !rect().contains(p)) || !_mouseSel) return;
int newSelected = p.y(); int newSelected = p.y();
newSelected = (newSelected > _st.verticalMargin) ? (newSelected - _st.verticalMargin) / _st.rowHeight : 0; newSelected = (newSelected > _st.verticalMargin) ? (newSelected - _st.verticalMargin) / _st.rowHeight : 0;
@ -413,11 +413,11 @@ QString CountryList::getSelectedCountry() const {
} }
CountrySelect::CountrySelect() : QWidget(App::wnd()), CountrySelect::CountrySelect() : QWidget(App::wnd()),
_scroll(this, st::scrollCountries), _list(&_scroll), _result("none"),
_filter(this, st::inpCountry, lang(lng_country_ph)), _filter(this, st::inpCountry, lang(lng_country_ph)), _scroll(this, st::scrollCountries), _list(&_scroll),
_doneButton(this, lang(lng_country_done), st::btnSelectDone), _doneButton(this, lang(lng_country_done), st::btnSelectDone),
_cancelButton(this, lang(lng_cancel), st::btnSelectCancel), _cancelButton(this, lang(lng_cancel), st::btnSelectCancel),
_innerLeft(0), _innerTop(0), _innerWidth(0), _innerHeight(0), _result("none"), _innerLeft(0), _innerTop(0), _innerWidth(0), _innerHeight(0),
a_alpha(0), a_bgAlpha(0), a_coord(st::countriesSlideShift), _shadow(st::boxShadow) { a_alpha(0), a_bgAlpha(0), a_coord(st::countriesSlideShift), _shadow(st::boxShadow) {
setGeometry(App::wnd()->rect()); setGeometry(App::wnd()->rect());

View file

@ -1,4 +1,8 @@
/* /*
Created from emoji config by '/MetaEmoji' project
WARNING! All changes made in this file will be lost!
This file is part of Telegram Desktop, This file is part of Telegram Desktop,
an unofficial desktop messaging app, see https://telegram.org an unofficial desktop messaging app, see https://telegram.org
@ -26,7 +30,9 @@ namespace {
void initEmoji() { void initEmoji() {
EmojiData *toFill = emojis = (EmojiData*)emojisData; EmojiData *toFill = emojis = (EmojiData*)emojisData;
switch (cScale()) { DBIScale emojiForScale = cRetina() ? dbisTwo : cScale();
switch (emojiForScale) {
case dbisOne: case dbisOne:
new (toFill++) EmojiData(176, 0, 169, 0, 1); new (toFill++) EmojiData(176, 0, 169, 0, 1);
@ -3556,7 +3562,7 @@ const EmojiData *getEmoji(uint32 code) {
return 0; return 0;
} }
if (highCode == 35 || highCode >= 48 && highCode < 58) { if (highCode == 35 || (highCode >= 48 && highCode < 58)) {
if ((code & 0xFFFF) != 0x20E3) return 0; if ((code & 0xFFFF) != 0x20E3) return 0;
switch (code) { switch (code) {

View file

@ -19,9 +19,9 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include "gui/flatbutton.h" #include "gui/flatbutton.h"
FlatButton::FlatButton(QWidget *parent, const QString &text, const style::flatButton &st) : Button(parent), FlatButton::FlatButton(QWidget *parent, const QString &text, const style::flatButton &st) : Button(parent),
_text(text), _opacity(1), _text(text),
_st(st), _st(st),
a_bg(st.bgColor->c), a_text(st.color->c) { a_bg(st.bgColor->c), a_text(st.color->c), _opacity(1) {
if (_st.width < 0) { if (_st.width < 0) {
_st.width = _st.font->m.width(text) - _st.width; _st.width = _st.font->m.width(text) - _st.width;
} else if (!_st.width) { } else if (!_st.width) {
@ -133,8 +133,8 @@ void LinkButton::onStateChange(int oldState, ButtonStateChangeSource source) {
LinkButton::~LinkButton() { LinkButton::~LinkButton() {
} }
IconedButton::IconedButton(QWidget *parent, const style::iconedButton &st, const QString &text) : Button(parent), _opacity(1), IconedButton::IconedButton(QWidget *parent, const style::iconedButton &st, const QString &text) : Button(parent),
_text(text), _st(st), a_opacity(_st.opacity), a_bg(_st.bgColor->c) { _text(text), _st(st), a_opacity(_st.opacity), a_bg(_st.bgColor->c), _opacity(1) {
if (_st.width < 0) { if (_st.width < 0) {
_st.width = _st.font->m.width(text) - _st.width; _st.width = _st.font->m.width(text) - _st.width;

View file

@ -22,13 +22,13 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include "flatcheckbox.h" #include "flatcheckbox.h"
FlatCheckbox::FlatCheckbox(QWidget *parent, const QString &text, bool checked, const style::flatCheckbox &st) : Button(parent), FlatCheckbox::FlatCheckbox(QWidget *parent, const QString &text, bool checked, const style::flatCheckbox &st) : Button(parent),
_text(text), _checked(checked), _st(st), _opacity(1), a_over(0, 0) { _st(st), a_over(0, 0), _text(text), _opacity(1), _checked(checked) {
connect(this, SIGNAL(clicked()), this, SLOT(onClicked())); connect(this, SIGNAL(clicked()), this, SLOT(onClicked()));
connect(this, SIGNAL(stateChanged(int, ButtonStateChangeSource)), this, SLOT(onStateChange(int, ButtonStateChangeSource))); connect(this, SIGNAL(stateChanged(int, ButtonStateChangeSource)), this, SLOT(onStateChange(int, ButtonStateChangeSource)));
setCursor(_st.cursor); setCursor(_st.cursor);
int32 w = _st.width, h = _st.height; int32 w = _st.width, h = _st.height;
if (w <= 0) w = _st.textLeft + _st.font->m.width(_text) + 1; if (w <= 0) w = _st.textLeft + _st.font->m.width(_text) + 1;
if (h <= 0) h = qMax(_st.font->height, _st.imageRect.height()); if (h <= 0) h = qMax(_st.font->height, _st.imageRect.pxHeight());
resize(QSize(w, h)); resize(QSize(w, h));
} }
@ -92,7 +92,7 @@ void FlatCheckbox::paintEvent(QPaintEvent *e) {
if (_state & StateDisabled) { if (_state & StateDisabled) {
QRect sRect(_checked ? _st.chkDisImageRect : _st.disImageRect); QRect sRect(_checked ? _st.chkDisImageRect : _st.disImageRect);
p.drawPixmap(_st.imagePos, App::sprite(), sRect); p.drawPixmap(_st.imagePos, App::sprite(), sRect);
} else if (_checked && _st.chkImageRect == _st.chkOverImageRect || !_checked && _st.imageRect == _st.overImageRect) { } else if ((_checked && _st.chkImageRect == _st.chkOverImageRect) || (!_checked && _st.imageRect == _st.overImageRect)) {
p.setOpacity(_opacity); p.setOpacity(_opacity);
QRect sRect(_checked ? _st.chkImageRect : _st.imageRect); QRect sRect(_checked ? _st.chkImageRect : _st.imageRect);
p.drawPixmap(_st.imagePos, App::sprite(), sRect); p.drawPixmap(_st.imagePos, App::sprite(), sRect);
@ -185,7 +185,7 @@ void RadiobuttonsGroup::remove(FlatRadiobutton * const &radio) {
} }
FlatRadiobutton::FlatRadiobutton(QWidget *parent, const QString &group, int32 value, const QString &text, bool checked, const style::flatCheckbox &st) : FlatRadiobutton::FlatRadiobutton(QWidget *parent, const QString &group, int32 value, const QString &text, bool checked, const style::flatCheckbox &st) :
FlatCheckbox(parent, text, checked, st), _value(value), _group(radioButtons.reg(group)) { FlatCheckbox(parent, text, checked, st), _group(radioButtons.reg(group)), _value(value) {
_group->insert(this); _group->insert(this);
connect(this, SIGNAL(changed()), this, SLOT(onChanged())); connect(this, SIGNAL(changed()), this, SLOT(onChanged()));
if (this->checked()) onChanged(); if (this->checked()) onChanged();

View file

@ -41,9 +41,9 @@ namespace {
FlatInputStyle _flatInputStyle; FlatInputStyle _flatInputStyle;
} }
FlatInput::FlatInput(QWidget *parent, const style::flatInput &st, const QString &pholder, const QString &v) : QLineEdit(v, parent), _oldtext(v), FlatInput::FlatInput(QWidget *parent, const style::flatInput &st, const QString &pholder, const QString &v) : QLineEdit(v, parent), _oldtext(v), _kev(0), _customUpDown(false), _phVisible(!v.length()),
_st(st), _phVisible(!v.length()), _kev(0), a_borderColor(st.borderColor->c), a_bgColor(st.bgColor->c), _notingBene(0), 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) {
resize(_st.width, _st.height); resize(_st.width, _st.height);
setFont(_st.font->f); setFont(_st.font->f);
@ -67,6 +67,10 @@ FlatInput::FlatInput(QWidget *parent, const style::flatInput &st, const QString
connect(&_touchTimer, SIGNAL(timeout()), this, SLOT(onTouchTimer())); connect(&_touchTimer, SIGNAL(timeout()), this, SLOT(onTouchTimer()));
} }
void FlatInput::customUpDown(bool custom) {
_customUpDown = custom;
}
void FlatInput::onTouchTimer() { void FlatInput::onTouchTimer() {
_touchRightButton = true; _touchRightButton = true;
} }
@ -134,7 +138,7 @@ void FlatInput::paintEvent(QPaintEvent *e) {
p.drawRect(i, i, width() - 2 * i - 1, height() - 2 * i - 1); p.drawRect(i, i, width() - 2 * i - 1, height() - 2 * i - 1);
} }
} }
if (_st.imgRect.width()) { if (_st.imgRect.pxWidth()) {
p.drawPixmap(_st.imgPos, App::sprite(), _st.imgRect); p.drawPixmap(_st.imgPos, App::sprite(), _st.imgRect);
} }
@ -231,7 +235,12 @@ void FlatInput::correctValue(QKeyEvent *e, const QString &was) {
void FlatInput::keyPressEvent(QKeyEvent *e) { void FlatInput::keyPressEvent(QKeyEvent *e) {
QString was(text()); QString was(text());
_kev = e; _kev = e;
if (_customUpDown && (e->key() == Qt::Key_Up || e->key() == Qt::Key_Down)) {
e->ignore();
} else {
QLineEdit::keyPressEvent(e); QLineEdit::keyPressEvent(e);
}
if (was == text()) { // call correct manually if (was == text()) { // call correct manually
correctValue(_kev, was); correctValue(_kev, was);
_oldtext = text(); _oldtext = text();

View file

@ -47,6 +47,8 @@ public:
QSize sizeHint() const; QSize sizeHint() const;
QSize minimumSizeHint() const; QSize minimumSizeHint() const;
void customUpDown(bool isCustom);
public slots: public slots:
void onTextChange(const QString &text); void onTextChange(const QString &text);
@ -71,6 +73,8 @@ private:
QString _ph, _oldtext; QString _ph, _oldtext;
QKeyEvent *_kev; QKeyEvent *_kev;
bool _customUpDown;
bool _phVisible; bool _phVisible;
anim::ivalue a_phLeft; anim::ivalue a_phLeft;
anim::fvalue a_phAlpha; anim::fvalue a_phAlpha;

View file

@ -29,7 +29,7 @@ namespace {
} }
FlatLabel::FlatLabel(QWidget *parent, const QString &text, const style::flatLabel &st, const style::textStyle &tst) : TWidget(parent), FlatLabel::FlatLabel(QWidget *parent, const QString &text, const style::flatLabel &st, const style::textStyle &tst) : TWidget(parent),
_st(st), _tst(tst), _text(_st.width ? _st.width : QFIXED_MAX), _opacity(1) { _text(st.width ? st.width : QFIXED_MAX), _st(st), _tst(tst), _opacity(1) {
setRichText(text); setRichText(text);
} }

View file

@ -20,9 +20,10 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include "flattextarea.h" #include "flattextarea.h"
FlatTextarea::FlatTextarea(QWidget *parent, const style::flatTextarea &st, const QString &pholder, const QString &v) : QTextEdit(v, parent), _oldtext(v), FlatTextarea::FlatTextarea(QWidget *parent, const style::flatTextarea &st, const QString &pholder, const QString &v) : QTextEdit(v, parent),
_st(st), _phVisible(!v.length()), _ph(pholder), _fakeMargin(0), _ph(pholder), _oldtext(v), _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),
_st(st), _fakeMargin(0),
_touchPress(false), _touchRightButton(false), _touchMove(false), _replacingEmojis(false) { _touchPress(false), _touchRightButton(false), _touchMove(false), _replacingEmojis(false) {
setAcceptRichText(false); setAcceptRichText(false);
resize(_st.width, _st.font->height); resize(_st.width, _st.font->height);
@ -270,8 +271,8 @@ void FlatTextarea::insertEmoji(EmojiPtr emoji, QTextCursor c) {
QString url = qsl("emoji://") + QString::number(emoji->code, 16); QString url = qsl("emoji://") + QString::number(emoji->code, 16);
document()->addResource(QTextDocument::ImageResource, QUrl(url), QVariant(img)); document()->addResource(QTextDocument::ImageResource, QUrl(url), QVariant(img));
QTextImageFormat imageFormat; QTextImageFormat imageFormat;
imageFormat.setWidth(img.width()); imageFormat.setWidth(img.width() / cIntRetinaFactor());
imageFormat.setHeight(img.height()); imageFormat.setHeight(img.height() / cIntRetinaFactor());
imageFormat.setName(url); imageFormat.setName(url);
imageFormat.setVerticalAlignment(QTextCharFormat::AlignBaseline); imageFormat.setVerticalAlignment(QTextCharFormat::AlignBaseline);
c.insertImage(imageFormat); c.insertImage(imageFormat);
@ -300,10 +301,10 @@ void FlatTextarea::processDocumentContentsChange(int position, int charsAdded) {
QString t(fragment.text()); QString t(fragment.text());
for (const QChar *ch = t.constData(), *e = ch + t.size(); ch != e; ++ch) { for (const QChar *ch = t.constData(), *e = ch + t.size(); ch != e; ++ch) {
if (ch + 1 < e && (ch->isHighSurrogate() || (ch->unicode() >= 48 && ch->unicode() < 58 || ch->unicode() == 35) && (ch + 1)->unicode() == 0x20E3)) { if (ch + 1 < e && (ch->isHighSurrogate() || (((ch->unicode() >= 48 && ch->unicode() < 58) || ch->unicode() == 35) && (ch + 1)->unicode() == 0x20E3))) {
emoji = getEmoji((ch->unicode() << 16) | (ch + 1)->unicode()); emoji = getEmoji((ch->unicode() << 16) | (ch + 1)->unicode());
if (emoji) { if (emoji) {
if (emoji->len == 4 && (ch + 3 >= e || (((ch + 2)->unicode() << 16) | (ch + 3)->unicode()) != emoji->code2)) { if (emoji->len == 4 && (ch + 3 >= e || ((uint32((ch + 2)->unicode()) << 16) | uint32((ch + 3)->unicode())) != emoji->code2)) {
emoji = 0; emoji = 0;
} else { } else {
emojiPosition = p + (ch - t.constData()); emojiPosition = p + (ch - t.constData());
@ -438,7 +439,7 @@ QMimeData *FlatTextarea::createMimeDataFromSelection() const {
void FlatTextarea::keyPressEvent(QKeyEvent *e) { void FlatTextarea::keyPressEvent(QKeyEvent *e) {
bool shift = e->modifiers().testFlag(Qt::ShiftModifier); bool shift = e->modifiers().testFlag(Qt::ShiftModifier);
bool ctrl = e->modifiers().testFlag(Qt::ControlModifier), ctrlGood = ctrl && cCtrlEnter() || !ctrl && !shift && !cCtrlEnter(); bool ctrl = e->modifiers().testFlag(Qt::ControlModifier), ctrlGood = (ctrl && cCtrlEnter()) || (!ctrl && !shift && !cCtrlEnter());
bool enter = (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return); bool enter = (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return);
if (enter && ctrlGood) { if (enter && ctrlGood) {

View file

@ -60,18 +60,16 @@ const QPixmap &Image::pix(int32 w, int32 h) const {
checkload(); checkload();
if (w <= 0 || !width() || !height()) { if (w <= 0 || !width() || !height()) {
w = width() * cRetinaFactor(); w = width() * cIntRetinaFactor();
} else if (cRetina()) { } else if (cRetina()) {
w *= cRetinaFactor(); w *= cIntRetinaFactor();
h *= cRetinaFactor(); h *= cIntRetinaFactor();
} }
uint64 k = (uint64(w) << 32) | uint64(h); uint64 k = (uint64(w) << 32) | uint64(h);
Sizes::const_iterator i = _sizesCache.constFind(k); Sizes::const_iterator i = _sizesCache.constFind(k);
if (i == _sizesCache.cend()) { if (i == _sizesCache.cend()) {
QPixmap p(pixNoCache(w, h, true)); QPixmap p(pixNoCache(w, h, true));
if (cRetina()) { if (cRetina()) p.setDevicePixelRatio(cRetinaFactor());
p.setDevicePixelRatio(cRetinaFactor());
}
i = _sizesCache.insert(k, p); i = _sizesCache.insert(k, p);
if (!p.isNull()) { if (!p.isNull()) {
globalAquiredSize += int64(p.width()) * p.height() * 4; globalAquiredSize += int64(p.width()) * p.height() * 4;
@ -192,10 +190,10 @@ int64 imageCacheSize() {
return globalAquiredSize; return globalAquiredSize;
} }
StorageImage::StorageImage(int32 width, int32 height, int32 dc, const int64 &volume, int32 local, const int64 &secret) : loader(new mtpFileLoader(dc, volume, local, secret)), w(width), h(height) { StorageImage::StorageImage(int32 width, int32 height, int32 dc, const int64 &volume, int32 local, const int64 &secret) : w(width), h(height), loader(new mtpFileLoader(dc, volume, local, secret)) {
} }
StorageImage::StorageImage(int32 width, int32 height, int32 dc, const int64 &volume, int32 local, const int64 &secret, QByteArray &bytes) : loader(0), w(width), h(height) { StorageImage::StorageImage(int32 width, int32 height, int32 dc, const int64 &volume, int32 local, const int64 &secret, QByteArray &bytes) : w(width), h(height), loader(0) {
setData(bytes); setData(bytes);
} }

View file

@ -36,10 +36,12 @@ void ScrollShadow::changeVisibility(bool shown) {
} }
ScrollBar::ScrollBar(ScrollArea *parent, bool vert, const style::flatScroll *st) : QWidget(parent), ScrollBar::ScrollBar(ScrollArea *parent, bool vert, const style::flatScroll *st) : QWidget(parent),
_st(st), _area(parent), _vertical(vert), _hideIn(-1), _area(parent), _st(st), _vertical(vert),
_over(false), _overbar(false), _moving(false), _topSh(false), _bottomSh(false), _over(false), _overbar(false), _moving(false), _topSh(false), _bottomSh(false),
a_bg((_st->hiding ? st::transparent : _st->bgColor)->c), a_bar((_st->hiding ? st::transparent : _st->barColor)->c), _connected(vert ? parent->verticalScrollBar() : parent->horizontalScrollBar()),
_connected(vert ? parent->verticalScrollBar() : parent->horizontalScrollBar()), _scrollMax(_connected->maximum()) { _scrollMax(_connected->maximum()), _hideIn(-1),
a_bg((_st->hiding ? st::transparent : _st->bgColor)->c),
a_bar((_st->hiding ? st::transparent : _st->barColor)->c) {
recountSize(); recountSize();
_hideTimer.setSingleShot(true); _hideTimer.setSingleShot(true);
@ -249,10 +251,12 @@ void ScrollBar::resizeEvent(QResizeEvent *e) {
updateBar(); updateBar();
} }
ScrollArea::ScrollArea(QWidget *parent, const style::flatScroll &st, bool handleTouch) : QScrollArea(parent), _st(st), _touchEnabled(handleTouch), ScrollArea::ScrollArea(QWidget *parent, const style::flatScroll &st, bool handleTouch) : QScrollArea(parent),
_st(st),
hor(this, false, &_st), vert(this, true, &_st), topSh(this, &_st), bottomSh(this, &_st), hor(this, false, &_st), vert(this, true, &_st), topSh(this, &_st), bottomSh(this, &_st),
_touchScroll(false), _touchPress(false), _touchRightButton(false), _widgetAcceptsTouch(false), _touchEnabled(handleTouch), _touchScroll(false), _touchPress(false), _touchRightButton(false),
_touchScrollState(TouchScrollManual), _touchPrevPosValid(false), _touchWaitingAcceleration(false), _touchSpeedTime(0), _touchAccelerationTime(0), _touchTime(0) { _touchScrollState(TouchScrollManual), _touchPrevPosValid(false), _touchWaitingAcceleration(false),
_touchSpeedTime(0), _touchAccelerationTime(0), _touchTime(0), _widgetAcceptsTouch(false) {
connect(horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SIGNAL(scrolled())); connect(horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SIGNAL(scrolled()));
connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SIGNAL(scrolled())); connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SIGNAL(scrolled()));
connect(&vert, SIGNAL(topShadowVisibility(bool)), &topSh, SLOT(changeVisibility(bool))); connect(&vert, SIGNAL(topShadowVisibility(bool)), &topSh, SLOT(changeVisibility(bool)));
@ -365,8 +369,8 @@ void ScrollArea::touchUpdateSpeed() {
if (_touchScrollState == TouchScrollAuto) { if (_touchScrollState == TouchScrollAuto) {
const int oldSpeedY = _touchSpeed.y(); const int oldSpeedY = _touchSpeed.y();
const int oldSpeedX = _touchSpeed.x(); const int oldSpeedX = _touchSpeed.x();
if ((oldSpeedY <= 0 && newSpeedY <= 0) || (oldSpeedY >= 0 && newSpeedY >= 0) if ((oldSpeedY <= 0 && newSpeedY <= 0) || ((oldSpeedY >= 0 && newSpeedY >= 0)
&& (oldSpeedX <= 0 && newSpeedX <= 0) || (oldSpeedX >= 0 && newSpeedX >= 0)) { && (oldSpeedX <= 0 && newSpeedX <= 0)) || (oldSpeedX >= 0 && newSpeedX >= 0)) {
_touchSpeed.setY(snap((oldSpeedY + (newSpeedY / 4)), -MaxScrollAccelerated, +MaxScrollAccelerated)); _touchSpeed.setY(snap((oldSpeedY + (newSpeedY / 4)), -MaxScrollAccelerated, +MaxScrollAccelerated));
_touchSpeed.setX(snap((oldSpeedX + (newSpeedX / 4)), -MaxScrollAccelerated, +MaxScrollAccelerated)); _touchSpeed.setX(snap((oldSpeedX + (newSpeedX / 4)), -MaxScrollAccelerated, +MaxScrollAccelerated));
} else { } else {

View file

@ -23,7 +23,7 @@ namespace {
} }
namespace style { namespace style {
FontData::FontData(uint32 size, uint32 flags, uint32 family, Font *other) : _size(size), _flags(flags), _family(family), f(_fontFamilies[family]), m(f) { FontData::FontData(uint32 size, uint32 flags, uint32 family, Font *other) : f(_fontFamilies[family]), m(f), _size(size), _flags(flags), _family(family) {
if (other) { if (other) {
memcpy(modified, other, sizeof(modified)); memcpy(modified, other, sizeof(modified));
} else { } else {

View file

@ -200,6 +200,32 @@ inline bool operator!=(const Font &a, const Font &b) {
typedef float64 number; typedef float64 number;
typedef QString string; typedef QString string;
typedef QRect rect; typedef QRect rect;
class sprite : public rect {
public:
sprite() {
}
sprite(int left, int top, int width, int height) : rect(left, top, width, height) {
}
inline int pxWidth() const {
return rect::width() / cIntRetinaFactor();
}
inline int pxHeight() const {
return rect::height() / cIntRetinaFactor();
}
inline QSize pxSize() const {
return rect::size() / cIntRetinaFactor();
}
private:
inline int width() const {
return rect::width();
}
inline int height() const {
return rect::height();
}
inline QSize size() const {
return rect::size();
}
};
typedef QPoint point; typedef QPoint point;
typedef QSize size; typedef QSize size;
typedef anim::transition transition; typedef anim::transition transition;

View file

@ -372,7 +372,7 @@ public:
} else if (ch == ')' || ch == ']' || ch == '}' || ch == '>') { } else if (ch == ')' || ch == ']' || ch == '}' || ch == '>') {
if (parenth.isEmpty()) break; if (parenth.isEmpty()) break;
const QChar *q = parenth.pop(), open(*q); const QChar *q = parenth.pop(), open(*q);
if (ch == ')' && open != '(' || ch == ']' && open != '[' || ch == '}' && open != '{' || ch == '>' && open != '<') { if ((ch == ')' && open != '(') || (ch == ']' && open != '[') || (ch == '}' && open != '{') || (ch == '>' && open != '<')) {
p = q; p = q;
break; break;
} }
@ -623,7 +623,7 @@ public:
ch = *ptr; ch = *ptr;
chInt = (chInt << 16) | ch.unicode(); chInt = (chInt << 16) | ch.unicode();
} }
} else if (ch >= 48 && ch < 58 || ch == 35) { // check for digit emoji } else if ((ch >= 48 && ch < 58) || ch == 35) { // check for digit emoji
if (ptr + 1 < end && (ptr + 1)->unicode() == 0x20E3) { if (ptr + 1 < end && (ptr + 1)->unicode() == 0x20E3) {
_t->_text.push_back(ch); _t->_text.push_back(ch);
skipBack = -1; skipBack = -1;
@ -657,7 +657,7 @@ public:
if (!e) return; if (!e) return;
if (e->len > 2) { if (e->len > 2) {
if (ptr + 2 >= end || e->code2 != (((ptr + 1)->unicode() << 16) | (ptr + 2)->unicode())) { if (ptr + 2 >= end || e->code2 != ((uint32((ptr + 1)->unicode()) << 16) | uint32((ptr + 2)->unicode()))) {
return; return;
} else { } else {
_t->_text.push_back(*++ptr); _t->_text.push_back(*++ptr);
@ -669,8 +669,8 @@ public:
emoji = e; emoji = e;
} }
TextParser(Text *t, const QString &text, const TextParseOptions &options) : _t(t), src(text), stopAfterWidth(QFIXED_MAX), TextParser(Text *t, const QString &text, const TextParseOptions &options) : _t(t), src(text),
rich(options.flags & TextParseRichText), multiline(options.flags & TextParseMultiline), flags(0), lnkIndex(0), maxLnkIndex(0) { rich(options.flags & TextParseRichText), multiline(options.flags & TextParseMultiline), maxLnkIndex(0), flags(0), lnkIndex(0), stopAfterWidth(QFIXED_MAX) {
int flags = options.flags; int flags = options.flags;
if (options.maxw > 0 && options.maxh > 0) { if (options.maxw > 0 && options.maxh > 0) {
stopAfterWidth = ((options.maxh / _t->_font->height) + 1) * options.maxw; stopAfterWidth = ((options.maxh / _t->_font->height) + 1) * options.maxw;
@ -884,7 +884,7 @@ public:
return _blockEnd(t, i, e) - (*i)->from(); return _blockEnd(t, i, e) - (*i)->from();
} }
TextPainter(QPainter *p, const Text *t) : _p(p), _t(t), _elideLast(false), _elideSavedBlock(0), _lnkResult(0), _inTextFlag(0), _getSymbol(0), _getSymbolAfter(0), _getSymbolUpon(0), _str(0) { TextPainter(QPainter *p, const Text *t) : _p(p), _t(t), _elideLast(false), _str(0), _elideSavedBlock(0), _lnkResult(0), _inTextFlag(0), _getSymbol(0), _getSymbolAfter(0), _getSymbolUpon(0) {
} }
void initNextParagraph(Text::TextBlocks::const_iterator i) { void initNextParagraph(Text::TextBlocks::const_iterator i) {
@ -1228,12 +1228,12 @@ public:
bool selectFromStart = (_selectedTo > _lineStart) && (_lineStart > 0) && (_selectedFrom <= _lineStart); bool selectFromStart = (_selectedTo > _lineStart) && (_lineStart > 0) && (_selectedFrom <= _lineStart);
bool selectTillEnd = (_selectedTo >= _lineEnd) && (_lineEnd < _t->_text.size()) && (_selectedFrom < _lineEnd) && (!_endBlock || _endBlock->type() != TextBlockSkip); bool selectTillEnd = (_selectedTo >= _lineEnd) && (_lineEnd < _t->_text.size()) && (_selectedFrom < _lineEnd) && (!_endBlock || _endBlock->type() != TextBlockSkip);
if (selectFromStart && _parDirection == Qt::LeftToRight || selectTillEnd && _parDirection == Qt::RightToLeft) { if ((selectFromStart && _parDirection == Qt::LeftToRight) || (selectTillEnd && _parDirection == Qt::RightToLeft)) {
if (x > _x) { if (x > _x) {
_p->fillRect(QRectF(_x.toReal(), _y + _yDelta, (x - _x).toReal(), _fontHeight), _textStyle->selectBG->b); _p->fillRect(QRectF(_x.toReal(), _y + _yDelta, (x - _x).toReal(), _fontHeight), _textStyle->selectBG->b);
} }
} }
if (selectTillEnd && _parDirection == Qt::LeftToRight || selectFromStart && _parDirection == Qt::RightToLeft) { if ((selectTillEnd && _parDirection == Qt::LeftToRight) || (selectFromStart && _parDirection == Qt::RightToLeft)) {
if (x < _x + _wLeft) { if (x < _x + _wLeft) {
_p->fillRect(QRectF((x + _w - _wLeft).toReal(), _y + _yDelta, (_x + _wLeft - x).toReal(), _fontHeight), _textStyle->selectBG->b); _p->fillRect(QRectF((x + _w - _wLeft).toReal(), _y + _yDelta, (_x + _wLeft - x).toReal(), _fontHeight), _textStyle->selectBG->b);
} }
@ -1405,7 +1405,7 @@ public:
} }
} }
} }
_p->drawPixmap(QPoint((glyphX + int(st::emojiPadding)).toInt(), _y + _yDelta + emojiY), App::emojis(), QRect(static_cast<EmojiBlock*>(currentBlock)->emoji->x, static_cast<EmojiBlock*>(currentBlock)->emoji->y, st::emojiSize, st::emojiSize)); _p->drawPixmap(QPoint((glyphX + int(st::emojiPadding)).toInt(), _y + _yDelta + emojiY), App::emojis(), QRect(static_cast<EmojiBlock*>(currentBlock)->emoji->x, static_cast<EmojiBlock*>(currentBlock)->emoji->y, st::emojiImgSize, st::emojiImgSize));
// } else if (_p && currentBlock->type() == TextBlockSkip) { // debug // } else if (_p && currentBlock->type() == TextBlockSkip) { // debug
// _p->fillRect(QRect(x.toInt(), _y, currentBlock->width(), static_cast<SkipBlock*>(currentBlock)->height()), QColor(0, 0, 0, 32)); // _p->fillRect(QRect(x.toInt(), _y, currentBlock->width(), static_cast<SkipBlock*>(currentBlock)->height()), QColor(0, 0, 0, 32));
} }
@ -1452,11 +1452,11 @@ public:
for (int charsCount = (ch2 - ch); ch < ch2; ++ch) { for (int charsCount = (ch2 - ch); ch < ch2; ++ch) {
QFixed shift1 = QFixed(2 * (charsCount - (ch2 - ch)) + 2) * gwidth / QFixed(2 * charsCount), QFixed shift1 = QFixed(2 * (charsCount - (ch2 - ch)) + 2) * gwidth / QFixed(2 * charsCount),
shift2 = QFixed(2 * (charsCount - (ch2 - ch)) + 1) * gwidth / QFixed(2 * charsCount); shift2 = QFixed(2 * (charsCount - (ch2 - ch)) + 1) * gwidth / QFixed(2 * charsCount);
if (rtl && _lnkX >= tmpx - shift1 || if ((rtl && _lnkX >= tmpx - shift1) ||
!rtl && _lnkX < tmpx + shift1) { (!rtl && _lnkX < tmpx + shift1)) {
*_getSymbol = _localFrom + itemStart + ch; *_getSymbol = _localFrom + itemStart + ch;
if (rtl && _lnkX >= tmpx - shift2 || if ((rtl && _lnkX >= tmpx - shift2) ||
!rtl && _lnkX < tmpx + shift2) { (!rtl && _lnkX < tmpx + shift2)) {
*_getSymbolAfter = false; *_getSymbolAfter = false;
} else { } else {
*_getSymbolAfter = true; *_getSymbolAfter = true;
@ -2807,7 +2807,7 @@ namespace {
class BlockParser { class BlockParser {
public: public:
BlockParser(QTextEngine *e, TextBlock *b, QFixed minResizeWidth, int32 blockFrom) : eng(e), block(b) { BlockParser(QTextEngine *e, TextBlock *b, QFixed minResizeWidth, int32 blockFrom) : block(b), eng(e) {
parseWords(minResizeWidth, blockFrom); parseWords(minResizeWidth, blockFrom);
} }

View file

@ -18,7 +18,6 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#pragma once #pragma once
#include "gui/emoji_config.h" #include "gui/emoji_config.h"
#include "gui/style_core.h"
#include "../../../QtStatic/qtbase/src/gui/text/qfontengine_p.h" #include "../../../QtStatic/qtbase/src/gui/text/qfontengine_p.h"
@ -126,8 +125,8 @@ private:
struct TextWord { struct TextWord {
TextWord() { TextWord() {
} }
TextWord(uint16 from, QFixed width, QFixed rbearing, QFixed rpadding = 0) : from(from), width(width), TextWord(uint16 from, QFixed width, QFixed rbearing, QFixed rpadding = 0) : from(from),
_rbearing(rbearing.value() > 0x7FFF ? 0x7FFF : (rbearing.value() < -0x7FFF ? -0x7FFF : rbearing.value())), rpadding(rpadding) { _rbearing(rbearing.value() > 0x7FFF ? 0x7FFF : (rbearing.value() < -0x7FFF ? -0x7FFF : rbearing.value())), width(width), rpadding(rpadding) {
} }
QFixed f_rbearing() const { QFixed f_rbearing() const {
return QFixed::fromFixed(_rbearing); return QFixed::fromFixed(_rbearing);
@ -358,7 +357,7 @@ public:
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(uint32 dots, int32 maxdots = 3) { // hack for typing animation bool lastDots(int32 dots, int32 maxdots = 3) { // hack for typing animation
if (_text.size() < maxdots) return false; if (_text.size() < maxdots) return false;
int32 nowDots = 0, from = _text.size() - maxdots, to = _text.size(); int32 nowDots = 0, from = _text.size() - maxdots, to = _text.size();

View file

@ -31,7 +31,7 @@ public:
return dynamic_cast<const TWidget*>(parentWidget()); return dynamic_cast<const TWidget*>(parentWidget());
} }
virtual void leaveToChildEvent(QEvent */*e*/) { // e -- from enterEvent() of child TWidget virtual void leaveToChildEvent(QEvent *e) { // e -- from enterEvent() of child TWidget
} }
protected: protected:

View file

@ -120,8 +120,16 @@ void historyInit() {
NotifySettings globalNotifyAll, globalNotifyUsers, globalNotifyChats; NotifySettings globalNotifyAll, globalNotifyUsers, globalNotifyChats;
NotifySettingsPtr globalNotifyAllPtr = UnknownNotifySettings, globalNotifyUsersPtr = UnknownNotifySettings, globalNotifyChatsPtr = UnknownNotifySettings; NotifySettingsPtr globalNotifyAllPtr = UnknownNotifySettings, globalNotifyUsersPtr = UnknownNotifySettings, globalNotifyChatsPtr = UnknownNotifySettings;
PeerData::PeerData(const PeerId &id) : id(id), access(0), chat(App::isChat(id)), loaded(false), notify(UnknownNotifySettings), PeerData::PeerData(const PeerId &id) : id(id)
colorIndex(peerColorIndex(id)), color(peerColor(colorIndex)), photo(chat ? chatDefPhoto(colorIndex) : userDefPhoto(colorIndex)), nameVersion(0) { , loaded(false)
, chat(App::isChat(id))
, access(0)
, colorIndex(peerColorIndex(id))
, color(peerColor(colorIndex))
, photo(chat ? chatDefPhoto(colorIndex) : userDefPhoto(colorIndex))
, nameVersion(0)
, notify(UnknownNotifySettings)
{
} }
UserData *PeerData::asUser() { UserData *PeerData::asUser() {
@ -259,11 +267,11 @@ QString saveFileName(const QString &title, const QString &filter, const QString
void VideoOpenLink::onClick(Qt::MouseButton button) const { void VideoOpenLink::onClick(Qt::MouseButton button) const {
VideoData *data = video(); VideoData *data = video();
if (!data->user && !data->date || button != Qt::LeftButton) return; if ((!data->user && !data->date) || button != Qt::LeftButton) return;
QString already = data->already(true); QString already = data->already(true);
if (!already.isEmpty()) { if (!already.isEmpty()) {
QDesktopServices::openUrl(QUrl::fromLocalFile(already)); psOpenFile(already);
return; return;
} }
@ -304,7 +312,7 @@ void VideoSaveLink::onClick(Qt::MouseButton button) const {
void VideoCancelLink::onClick(Qt::MouseButton button) const { void VideoCancelLink::onClick(Qt::MouseButton button) const {
VideoData *data = video(); VideoData *data = video();
if (!data->user && !data->date || button != Qt::LeftButton) return; if ((!data->user && !data->date) || button != Qt::LeftButton) return;
data->cancel(); data->cancel();
} }
@ -319,11 +327,11 @@ void VideoData::save(const QString &toFile) {
void AudioOpenLink::onClick(Qt::MouseButton button) const { void AudioOpenLink::onClick(Qt::MouseButton button) const {
AudioData *data = audio(); AudioData *data = audio();
if (!data->user && !data->date || button != Qt::LeftButton) return; if ((!data->user && !data->date) || button != Qt::LeftButton) return;
QString already = data->already(true); QString already = data->already(true);
if (!already.isEmpty()) { if (!already.isEmpty()) {
QDesktopServices::openUrl(QUrl::fromLocalFile(already)); psOpenFile(already);
return; return;
} }
@ -364,7 +372,7 @@ void AudioSaveLink::onClick(Qt::MouseButton button) const {
void AudioCancelLink::onClick(Qt::MouseButton button) const { void AudioCancelLink::onClick(Qt::MouseButton button) const {
AudioData *data = audio(); AudioData *data = audio();
if (!data->user && !data->date || button != Qt::LeftButton) return; if ((!data->user && !data->date) || button != Qt::LeftButton) return;
data->cancel(); data->cancel();
} }
@ -379,11 +387,11 @@ void AudioData::save(const QString &toFile) {
void DocumentOpenLink::onClick(Qt::MouseButton button) const { void DocumentOpenLink::onClick(Qt::MouseButton button) const {
DocumentData *data = document(); DocumentData *data = document();
if (!data->user && !data->date || button != Qt::LeftButton) return; if ((!data->user && !data->date) || button != Qt::LeftButton) return;
QString already = data->already(true); QString already = data->already(true);
if (!already.isEmpty()) { if (!already.isEmpty()) {
QDesktopServices::openUrl(QUrl::fromLocalFile(already)); psOpenFile(already);
return; return;
} }
@ -451,7 +459,7 @@ void DocumentSaveLink::onClick(Qt::MouseButton button) const {
void DocumentCancelLink::onClick(Qt::MouseButton button) const { void DocumentCancelLink::onClick(Qt::MouseButton button) const {
DocumentData *data = document(); DocumentData *data = document();
if (!data->user && !data->date || button != Qt::LeftButton) return; if ((!data->user && !data->date) || button != Qt::LeftButton) return;
data->cancel(); data->cancel();
} }
@ -520,7 +528,7 @@ void DialogRow::paint(QPainter &p, int32 w, bool act, bool sel) const {
// draw check // draw check
if (last->out() && last->needCheck()) { if (last->out() && last->needCheck()) {
const QRect *check; const style::sprite *check;
if (last->id > 0) { if (last->id > 0) {
if (last->unread()) { if (last->unread()) {
check = act ? &st::dlgActiveCheckImg : &st::dlgCheckImg; check = act ? &st::dlgActiveCheckImg : &st::dlgCheckImg;
@ -530,7 +538,7 @@ void DialogRow::paint(QPainter &p, int32 w, bool act, bool sel) const {
} else { } else {
check = act ? &st::dlgActiveSendImg : &st::dlgSendImg; check = act ? &st::dlgActiveSendImg : &st::dlgSendImg;
} }
rectForName.setWidth(rectForName.width() - check->width() - st::dlgCheckSkip); rectForName.setWidth(rectForName.width() - check->pxWidth() - st::dlgCheckSkip);
p.drawPixmap(QPoint(rectForName.left() + rectForName.width() + st::dlgCheckLeft, rectForName.top() + st::dlgCheckTop), App::sprite(), *check); p.drawPixmap(QPoint(rectForName.left() + rectForName.width() + st::dlgCheckLeft, rectForName.top() + st::dlgCheckTop), App::sprite(), *check);
} }
@ -563,9 +571,26 @@ void DialogRow::paint(QPainter &p, int32 w, bool act, bool sel) const {
history->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); history->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width());
} }
History::History(const PeerId &peerId) : width(0), height(0), myTyping(0), showFrom(0), unreadLoaded(true), unreadBar(0), notifyFrom(0), History::History(const PeerId &peerId) : width(0), height(0)
msgCount(0), offset(0), peer(App::peer(peerId)), posInDialogs(0), unreadCount(0), inboxReadTill(0), outboxReadTill(0), lastWidth(0), lastScrollTop(History::ScrollMax), , msgCount(0)
lastItemTextCache(st::dlgRichMinWidth), textCachedFor(0), typingText(st::dlgRichMinWidth), mute(isNotifyMuted(peer->notify)) { , offset(0)
, unreadCount(0)
, inboxReadTill(0)
, outboxReadTill(0)
, showFrom(0)
, notifyFrom(0)
, unreadBar(0)
, unreadLoaded(true)
, peer(App::peer(peerId))
, lastWidth(0)
, lastScrollTop(History::ScrollMax)
, mute(isNotifyMuted(peer->notify))
, textCachedFor(0)
, lastItemTextCache(st::dlgRichMinWidth)
, posInDialogs(0)
, typingText(st::dlgRichMinWidth)
, myTyping(0)
{
} }
void History::updateNameText() { void History::updateNameText() {
@ -1360,7 +1385,7 @@ void HistoryBlock::removeItem(HistoryItem *item) {
} }
} else if (myIndex > 0) { } else if (myIndex > 0) {
HistoryBlock *prevBlock = (*history)[myIndex - 1]; HistoryBlock *prevBlock = (*history)[myIndex - 1];
if (prevBlock->isEmpty() || (myIndex == 1) && (prevBlock->size() != 1 || (*prevBlock->cbegin())->itemType() != HistoryItem::DateType)) { if (prevBlock->isEmpty() || ((myIndex == 1) && (prevBlock->size() != 1 || (*prevBlock->cbegin())->itemType() != HistoryItem::DateType))) {
LOG(("App Error: Found bad history, with no first date block: %1").arg((*history)[0]->size())); LOG(("App Error: Found bad history, with no first date block: %1").arg((*history)[0]->size()));
} else if ((*prevBlock)[prevBlock->size() - 1]->itemType() == HistoryItem::DateType) { } else if ((*prevBlock)[prevBlock->size() - 1]->itemType() == HistoryItem::DateType) {
(*prevBlock)[prevBlock->size() - 1]->destroy(); (*prevBlock)[prevBlock->size() - 1]->destroy();
@ -1411,8 +1436,16 @@ void HistoryBlock::removeItem(HistoryItem *item) {
} }
} }
HistoryItem::HistoryItem(History *history, HistoryBlock *block, MsgId msgId, bool out, bool unread, QDateTime msgDate, int32 from) : HistoryItem::HistoryItem(History *history, HistoryBlock *block, MsgId msgId, bool out, bool unread, QDateTime msgDate, int32 from) : y(0)
y(0), id(msgId), _history(history), _block(block), _out(out), _unread(unread), date(msgDate), _from(App::user(from)), _fromVersion(_from->nameVersion) { , id(msgId)
, date(msgDate)
, _from(App::user(from))
, _fromVersion(_from->nameVersion)
, _history(history)
, _block(block)
, _out(out)
, _unread(unread)
{
} }
void HistoryItem::markRead() { void HistoryItem::markRead() {
@ -1442,7 +1475,10 @@ HistoryItem *regItem(HistoryItem *item) {
return 0; return 0;
} }
HistoryPhoto::HistoryPhoto(const MTPDphoto &photo, int32 width) : data(App::feedPhoto(photo)), w(width), openl(new PhotoLink(data)) { HistoryPhoto::HistoryPhoto(const MTPDphoto &photo, int32 width) : data(App::feedPhoto(photo))
, openl(new PhotoLink(data))
, w(width)
{
int32 tw = data->full->width(), th = data->full->height(); int32 tw = data->full->width(), th = data->full->height();
if (!tw || !th) { if (!tw || !th) {
tw = th = 1; tw = th = 1;
@ -1522,7 +1558,7 @@ void HistoryPhoto::draw(QPainter &p, const HistoryItem *parent, const QString &t
int32 dateX = _maxw - timeWidth - st::msgDateImgDelta - 2 * st::msgDateImgPadding.x(); int32 dateX = _maxw - timeWidth - st::msgDateImgDelta - 2 * st::msgDateImgPadding.x();
int32 dateY = _height - st::msgDateFont->height - 2 * st::msgDateImgPadding.y() - st::msgDateImgDelta; int32 dateY = _height - st::msgDateFont->height - 2 * st::msgDateImgPadding.y() - st::msgDateImgDelta;
if (parent->out()) { if (parent->out()) {
dateX -= st::msgCheckRect.width() + st::msgDateImgCheckSpace; dateX -= st::msgCheckRect.pxWidth() + st::msgDateImgCheckSpace;
} }
int32 dateW = _maxw - dateX - st::msgDateImgDelta; int32 dateW = _maxw - dateX - st::msgDateImgDelta;
int32 dateH = _height - dateY - st::msgDateImgDelta; int32 dateH = _height - dateY - st::msgDateImgDelta;
@ -1532,7 +1568,7 @@ void HistoryPhoto::draw(QPainter &p, const HistoryItem *parent, const QString &t
p.setPen(st::msgDateImgColor->p); p.setPen(st::msgDateImgColor->p);
p.drawText(dateX + st::msgDateImgPadding.x(), dateY + st::msgDateImgPadding.y() + st::msgDateFont->ascent, time); p.drawText(dateX + st::msgDateImgPadding.x(), dateY + st::msgDateImgPadding.y() + st::msgDateFont->ascent, time);
if (out) { if (out) {
QPoint iconPos(dateX - 2 + dateW - st::msgDateImgCheckSpace - st::msgCheckRect.width(), dateY + (dateH - st::msgCheckRect.height()) / 2); QPoint iconPos(dateX - 2 + dateW - st::msgDateImgCheckSpace - st::msgCheckRect.pxWidth(), dateY + (dateH - st::msgCheckRect.pxHeight()) / 2);
const QRect *iconRect; const QRect *iconRect;
if (parent->id > 0) { if (parent->id > 0) {
if (parent->unread()) { if (parent->unread()) {
@ -1583,7 +1619,14 @@ QString formatDurationAndSizeText(qint64 duration, qint64 size) {
int32 _downloadWidth = 0, _openWithWidth = 0, _cancelWidth = 0, _buttonWidth = 0; int32 _downloadWidth = 0, _openWithWidth = 0, _cancelWidth = 0, _buttonWidth = 0;
HistoryVideo::HistoryVideo(const MTPDvideo &video, int32 width) : data(App::feedVideo(video)), w(width), _openl(new VideoOpenLink(data)), _savel(new VideoSaveLink(data)), _cancell(new VideoCancelLink(data)), _dldDone(0), _uplDone(0) { HistoryVideo::HistoryVideo(const MTPDvideo &video, int32 width) : data(App::feedVideo(video))
, _openl(new VideoOpenLink(data))
, _savel(new VideoSaveLink(data))
, _cancell(new VideoCancelLink(data))
, w(width)
, _dldDone(0)
, _uplDone(0)
{
_maxw = st::mediaMaxWidth; _maxw = st::mediaMaxWidth;
_size = formatDurationAndSizeText(data->duration, data->size); _size = formatDurationAndSizeText(data->duration, data->size);
@ -1725,7 +1768,8 @@ void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, const QString &t
p.fillRect(0, _height, width, st::msgShadow, shadow->b); p.fillRect(0, _height, width, st::msgShadow, shadow->b);
if (_thumbw) { if (_thumbw) {
p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), data->thumb->pix(_thumbw), QRect(_thumbx, _thumby, st::mediaThumbSize, st::mediaThumbSize)); int32 rf(cIntRetinaFactor());
p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), data->thumb->pix(_thumbw), QRect(_thumbx * rf, _thumby * rf, st::mediaThumbSize * rf, st::mediaThumbSize * rf));
} else { } else {
p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), App::sprite(), (out ? st::mediaDocOutImg : st::mediaDocInImg)); p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), App::sprite(), (out ? st::mediaDocOutImg : st::mediaDocInImg));
} }
@ -1735,7 +1779,7 @@ void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, const QString &t
int32 tleft = st::mediaPadding.left() + st::mediaThumbSize + st::mediaPadding.right(); int32 tleft = st::mediaPadding.left() + st::mediaThumbSize + st::mediaPadding.right();
int32 twidth = width - tleft - st::mediaPadding.right(); int32 twidth = width - tleft - st::mediaPadding.right();
int32 fullTimeWidth = timeWidth + st::msgDateSpace + (out ? st::msgDateCheckSpace + st::msgCheckRect.width() : 0) + st::msgPadding.right() - st::msgDateDelta.x(); int32 fullTimeWidth = timeWidth + st::msgDateSpace + (out ? st::msgDateCheckSpace + st::msgCheckRect.pxWidth() : 0) + st::msgPadding.right() - st::msgDateDelta.x();
int32 secondwidth = width - tleft - fullTimeWidth; int32 secondwidth = width - tleft - fullTimeWidth;
p.setFont(st::mediaFont->f); p.setFont(st::mediaFont->f);
@ -1775,7 +1819,7 @@ void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, const QString &t
p.drawText(width + st::msgDateDelta.x() - fullTimeWidth + st::msgDateSpace, _height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->descent, time); p.drawText(width + st::msgDateDelta.x() - fullTimeWidth + st::msgDateSpace, _height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->descent, time);
if (out) { if (out) {
QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.width(), _height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.height()); QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.pxWidth(), _height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.pxHeight());
const QRect *iconRect; const QRect *iconRect;
if (parent->id > 0) { if (parent->id > 0) {
if (parent->unread()) { if (parent->unread()) {
@ -1790,7 +1834,14 @@ void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, const QString &t
} }
} }
HistoryAudio::HistoryAudio(const MTPDaudio &audio, int32 width) : data(App::feedAudio(audio)), w(width), _openl(new AudioOpenLink(data)), _savel(new AudioSaveLink(data)), _cancell(new AudioCancelLink(data)), _dldDone(0), _uplDone(0) { HistoryAudio::HistoryAudio(const MTPDaudio &audio, int32 width) : data(App::feedAudio(audio))
, _openl(new AudioOpenLink(data))
, _savel(new AudioSaveLink(data))
, _cancell(new AudioCancelLink(data))
, w(width)
, _dldDone(0)
, _uplDone(0)
{
_maxw = st::mediaMaxWidth; _maxw = st::mediaMaxWidth;
_size = formatDurationAndSizeText(data->duration, data->size); _size = formatDurationAndSizeText(data->duration, data->size);
@ -1857,7 +1908,7 @@ void HistoryAudio::draw(QPainter &p, const HistoryItem *parent, const QString &t
int32 tleft = st::mediaPadding.left() + st::mediaThumbSize + st::mediaPadding.right(); int32 tleft = st::mediaPadding.left() + st::mediaThumbSize + st::mediaPadding.right();
int32 twidth = width - tleft - st::mediaPadding.right(); int32 twidth = width - tleft - st::mediaPadding.right();
int32 fullTimeWidth = timeWidth + st::msgDateSpace + (out ? st::msgDateCheckSpace + st::msgCheckRect.width() : 0) + st::msgPadding.right() - st::msgDateDelta.x(); int32 fullTimeWidth = timeWidth + st::msgDateSpace + (out ? st::msgDateCheckSpace + st::msgCheckRect.pxWidth() : 0) + st::msgPadding.right() - st::msgDateDelta.x();
int32 secondwidth = width - tleft - fullTimeWidth; int32 secondwidth = width - tleft - fullTimeWidth;
p.setFont(st::mediaFont->f); p.setFont(st::mediaFont->f);
@ -1897,7 +1948,7 @@ void HistoryAudio::draw(QPainter &p, const HistoryItem *parent, const QString &t
p.drawText(width + st::msgDateDelta.x() - fullTimeWidth + st::msgDateSpace, _height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->descent, time); p.drawText(width + st::msgDateDelta.x() - fullTimeWidth + st::msgDateSpace, _height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->descent, time);
if (out) { if (out) {
QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.width(), _height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.height()); QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.pxWidth(), _height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.pxHeight());
const QRect *iconRect; const QRect *iconRect;
if (parent->id > 0) { if (parent->id > 0) {
if (parent->unread()) { if (parent->unread()) {
@ -1966,7 +2017,15 @@ HistoryMedia *HistoryAudio::clone() const {
return n; return n;
} }
HistoryDocument::HistoryDocument(const MTPDdocument &document, int32 width) : data(App::feedDocument(document)), w(width), _openl(new DocumentOpenLink(data)), _savel(new DocumentSaveLink(data)), _cancell(new DocumentCancelLink(data)), _name(data->name), _dldDone(0), _uplDone(0) { HistoryDocument::HistoryDocument(const MTPDdocument &document, int32 width) : data(App::feedDocument(document))
, _openl(new DocumentOpenLink(data))
, _savel(new DocumentSaveLink(data))
, _cancell(new DocumentCancelLink(data))
, w(width)
, _name(data->name)
, _dldDone(0)
, _uplDone(0)
{
_maxw = st::mediaMaxWidth; _maxw = st::mediaMaxWidth;
_namew = st::mediaFont->m.width(_name.isEmpty() ? qsl("Document") : _name); _namew = st::mediaFont->m.width(_name.isEmpty() ? qsl("Document") : _name);
@ -2048,7 +2107,8 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, const QString
p.fillRect(0, _height, width, st::msgShadow, shadow->b); p.fillRect(0, _height, width, st::msgShadow, shadow->b);
if (_thumbw) { if (_thumbw) {
p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), data->thumb->pix(_thumbw), QRect(_thumbx, _thumby, st::mediaThumbSize, st::mediaThumbSize)); int32 rf(cIntRetinaFactor());
p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), data->thumb->pix(_thumbw), QRect(_thumbx * rf, _thumby * rf, st::mediaThumbSize * rf, st::mediaThumbSize * rf));
} else { } else {
p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), App::sprite(), (out ? st::mediaDocOutImg : st::mediaDocInImg)); p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), App::sprite(), (out ? st::mediaDocOutImg : st::mediaDocInImg));
} }
@ -2058,7 +2118,7 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, const QString
int32 tleft = st::mediaPadding.left() + st::mediaThumbSize + st::mediaPadding.right(); int32 tleft = st::mediaPadding.left() + st::mediaThumbSize + st::mediaPadding.right();
int32 twidth = width - tleft - st::mediaPadding.right(); int32 twidth = width - tleft - st::mediaPadding.right();
int32 fullTimeWidth = timeWidth + st::msgDateSpace + (out ? st::msgDateCheckSpace + st::msgCheckRect.width() : 0) + st::msgPadding.right() - st::msgDateDelta.x(); int32 fullTimeWidth = timeWidth + st::msgDateSpace + (out ? st::msgDateCheckSpace + st::msgCheckRect.pxWidth() : 0) + st::msgPadding.right() - st::msgDateDelta.x();
int32 secondwidth = width - tleft - fullTimeWidth; int32 secondwidth = width - tleft - fullTimeWidth;
p.setFont(st::mediaFont->f); p.setFont(st::mediaFont->f);
@ -2102,7 +2162,7 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, const QString
p.drawText(width + st::msgDateDelta.x() - fullTimeWidth + st::msgDateSpace, _height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->descent, time); p.drawText(width + st::msgDateDelta.x() - fullTimeWidth + st::msgDateSpace, _height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->descent, time);
if (out) { if (out) {
QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.width(), _height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.height()); QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.pxWidth(), _height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.pxHeight());
const QRect *iconRect; const QRect *iconRect;
if (parent->id > 0) { if (parent->id > 0) {
if (parent->unread()) { if (parent->unread()) {
@ -2177,7 +2237,11 @@ HistoryMedia *HistoryDocument::clone() const {
return n; return n;
} }
HistoryContact::HistoryContact(int32 userId, const QString &first, const QString &last, const QString &phone) : userId(userId), phone(App::formatPhone(phone)), contact(App::userLoaded(userId)), w(0) { HistoryContact::HistoryContact(int32 userId, const QString &first, const QString &last, const QString &phone) : userId(userId)
, w(0)
, phone(App::formatPhone(phone))
, contact(App::userLoaded(userId))
{
_maxw = st::mediaMaxWidth; _maxw = st::mediaMaxWidth;
name.setText(st::mediaFont, (first + ' ' + last).trimmed(), _textNameOptions); name.setText(st::mediaFont, (first + ' ' + last).trimmed(), _textNameOptions);
@ -2197,7 +2261,7 @@ HistoryContact::HistoryContact(int32 userId, const QString &first, const QString
void HistoryContact::initDimensions(const HistoryItem *parent, int32 timeWidth) { void HistoryContact::initDimensions(const HistoryItem *parent, int32 timeWidth) {
int32 tleft = st::mediaPadding.left() + st::mediaThumbSize + st::mediaPadding.right(); int32 tleft = st::mediaPadding.left() + st::mediaThumbSize + st::mediaPadding.right();
int32 fullTimeWidth = timeWidth + st::msgDateSpace + (parent->out() ? st::msgDateCheckSpace + st::msgCheckRect.width() : 0) + st::msgPadding.right() - st::msgDateDelta.x(); int32 fullTimeWidth = timeWidth + st::msgDateSpace + (parent->out() ? st::msgDateCheckSpace + st::msgCheckRect.pxWidth() : 0) + st::msgPadding.right() - st::msgDateDelta.x();
if (name.maxWidth() + tleft + fullTimeWidth > _maxw) { if (name.maxWidth() + tleft + fullTimeWidth > _maxw) {
_maxw = name.maxWidth() + tleft + fullTimeWidth; _maxw = name.maxWidth() + tleft + fullTimeWidth;
} }
@ -2256,7 +2320,7 @@ void HistoryContact::draw(QPainter &p, const HistoryItem *parent, const QString
int32 tleft = st::mediaPadding.left() + st::mediaThumbSize + st::mediaPadding.right(); int32 tleft = st::mediaPadding.left() + st::mediaThumbSize + st::mediaPadding.right();
int32 twidth = width - tleft - st::mediaPadding.right(); int32 twidth = width - tleft - st::mediaPadding.right();
int32 fullTimeWidth = timeWidth + st::msgDateSpace + (out ? st::msgDateCheckSpace + st::msgCheckRect.width() : 0) + st::msgPadding.right() - st::msgDateDelta.x(); int32 fullTimeWidth = timeWidth + st::msgDateSpace + (out ? st::msgDateCheckSpace + st::msgCheckRect.pxWidth() : 0) + st::msgPadding.right() - st::msgDateDelta.x();
int32 secondwidth = width - tleft - fullTimeWidth; int32 secondwidth = width - tleft - fullTimeWidth;
p.setFont(st::mediaFont->f); p.setFont(st::mediaFont->f);
@ -2279,7 +2343,7 @@ void HistoryContact::draw(QPainter &p, const HistoryItem *parent, const QString
p.drawText(width + st::msgDateDelta.x() - fullTimeWidth + st::msgDateSpace, _height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->descent, time); p.drawText(width + st::msgDateDelta.x() - fullTimeWidth + st::msgDateSpace, _height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->descent, time);
if (out) { if (out) {
QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.width(), _height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.height()); QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.pxWidth(), _height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.pxHeight());
const QRect *iconRect; const QRect *iconRect;
if (parent->id > 0) { if (parent->id > 0) {
if (parent->unread()) { if (parent->unread()) {
@ -2295,7 +2359,12 @@ void HistoryContact::draw(QPainter &p, const HistoryItem *parent, const QString
} }
HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, const MTPDmessage &msg) : HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, const MTPDmessage &msg) :
HistoryItem(history, block, msg.vid.v, msg.vout.v, msg.vunread.v, ::date(msg.vdate), msg.vfrom_id.v), media(0), _text(st::msgMinWidth), _textWidth(0), _textHeight(0) { HistoryItem(history, block, msg.vid.v, msg.vout.v, msg.vunread.v, ::date(msg.vdate), msg.vfrom_id.v)
, _text(st::msgMinWidth)
, _textWidth(0)
, _textHeight(0)
, media(0)
{
QString text(textClean(qs(msg.vmessage))); QString text(textClean(qs(msg.vmessage)));
initMedia(msg.vmedia, text); initMedia(msg.vmedia, text);
initDimensions(text); initDimensions(text);
@ -2314,14 +2383,24 @@ HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, const MTPD
//} //}
HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, bool out, bool unread, QDateTime date, int32 from, const QString &msg, const MTPMessageMedia &media) : HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, bool out, bool unread, QDateTime date, int32 from, const QString &msg, const MTPMessageMedia &media) :
HistoryItem(history, block, msgId, out, unread, date, from), media(0), _text(st::msgMinWidth), _textWidth(0), _textHeight(0) { HistoryItem(history, block, msgId, out, unread, date, from)
, _text(st::msgMinWidth)
, _textWidth(0)
, _textHeight(0)
, media(0)
{
QString text(msg); QString text(msg);
initMedia(media, text); initMedia(media, text);
initDimensions(text); initDimensions(text);
} }
HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, bool out, bool unread, QDateTime date, int32 from, const QString &msg, HistoryMedia *fromMedia) : HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, bool out, bool unread, QDateTime date, int32 from, const QString &msg, HistoryMedia *fromMedia) :
HistoryItem(history, block, msgId, out, unread, date, from), media(0), _text(st::msgMinWidth), _textWidth(0), _textHeight(0) { HistoryItem(history, block, msgId, out, unread, date, from)
, _text(st::msgMinWidth)
, _textWidth(0)
, _textHeight(0)
, media(0)
{
QString text(msg); QString text(msg);
if (fromMedia) { if (fromMedia) {
media = fromMedia->clone(); media = fromMedia->clone();
@ -2383,7 +2462,7 @@ void HistoryMessage::initDimensions(const QString &text) {
_maxw = media->maxWidth(); _maxw = media->maxWidth();
_minh = media->height(); _minh = media->height();
} else { } else {
timeWidth += st::msgDateSpace + (out() ? st::msgDateCheckSpace + st::msgCheckRect.width() : 0) - st::msgDateDelta.x(); timeWidth += st::msgDateSpace + (out() ? st::msgDateCheckSpace + st::msgCheckRect.pxWidth() : 0) - st::msgDateDelta.x();
_text.setText(st::msgFont, text + textcmdSkipBlock(timeWidth, st::msgDateFont->height - st::msgDateDelta.y()), _historyTextOptions); _text.setText(st::msgFont, text + textcmdSkipBlock(timeWidth, st::msgDateFont->height - st::msgDateDelta.y()), _historyTextOptions);
_maxw = _text.maxWidth(); _maxw = _text.maxWidth();
_minh = _text.minHeight(); _minh = _text.minHeight();
@ -2470,7 +2549,7 @@ void HistoryMessage::draw(QPainter &p, uint32 selection) const {
p.drawText(r.right() - st::msgPadding.right() + st::msgDateDelta.x() - timeWidth + st::msgDateSpace, r.bottom() - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->descent, time); p.drawText(r.right() - st::msgPadding.right() + st::msgDateDelta.x() - timeWidth + st::msgDateSpace, r.bottom() - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->descent, time);
if (_out) { if (_out) {
QPoint iconPos(r.right() + 5 - st::msgPadding.right() - st::msgCheckRect.width(), r.bottom() + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.height()); QPoint iconPos(r.right() + 5 - st::msgPadding.right() - st::msgCheckRect.pxWidth(), r.bottom() + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.pxHeight());
const QRect *iconRect; const QRect *iconRect;
if (id > 0) { if (id > 0) {
if (unread()) { if (unread()) {
@ -2712,17 +2791,23 @@ HistoryMessage::~HistoryMessage() {
delete media; delete media;
} }
HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, const MTPDmessageForwarded &msg) : HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, const MTPDmessageForwarded &msg) : HistoryMessage(history, block, msg.vid.v, msg.vout.v, msg.vunread.v, ::date(msg.vdate), msg.vfrom_id.v, textClean(qs(msg.vmessage)), msg.vmedia)
HistoryMessage(history, block, msg.vid.v, msg.vout.v, msg.vunread.v, ::date(msg.vdate), msg.vfrom_id.v, textClean(qs(msg.vmessage)), msg.vmedia), , fwdDate(::date(msg.vfwd_date))
fwdFrom(App::user(msg.vfwd_from_id.v)), fwdFromVersion(fwdFrom->nameVersion), fwdDate(::date(msg.vfwd_date)), fromWidth(st::msgServiceFont->m.width(lang(lng_forwarded_from))), fwdFromName(4096) { , fwdFrom(App::user(msg.vfwd_from_id.v))
, fwdFromName(4096)
, fwdFromVersion(fwdFrom->nameVersion)
, fromWidth(st::msgServiceFont->m.width(lang(lng_forwarded_from)))
{
fwdNameUpdated(); fwdNameUpdated();
} }
HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, MsgId id, HistoryMessage *msg) : HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, MsgId id, HistoryMessage *msg) : HistoryMessage(history, block, id, true, true, ::date(unixtime()), MTP::authedId(), msg->HistoryMessage::selectedText(FullItemSel), msg->getMedia())
HistoryMessage(history, block, id, true, true, ::date(unixtime()), MTP::authedId(), msg->HistoryMessage::selectedText(FullItemSel), msg->getMedia()), , fwdDate(dynamic_cast<HistoryForwarded*>(msg) ? dynamic_cast<HistoryForwarded*>(msg)->dateForwarded() : msg->date)
fwdFrom(dynamic_cast<HistoryForwarded*>(msg) ? dynamic_cast<HistoryForwarded*>(msg)->fromForwarded() : msg->from()), fwdFromVersion(fwdFrom->nameVersion), , fwdFrom(dynamic_cast<HistoryForwarded*>(msg) ? dynamic_cast<HistoryForwarded*>(msg)->fromForwarded() : msg->from())
fwdDate(dynamic_cast<HistoryForwarded*>(msg) ? dynamic_cast<HistoryForwarded*>(msg)->dateForwarded() : msg->date), , fwdFromName(4096)
fromWidth(st::msgServiceFont->m.width(lang(lng_forwarded_from))), fwdFromName(4096) { , fwdFromVersion(fwdFrom->nameVersion)
, fromWidth(st::msgServiceFont->m.width(lang(lng_forwarded_from)))
{
fwdNameUpdated(); fwdNameUpdated();
} }
@ -2945,7 +3030,10 @@ QString HistoryServiceMsg::messageByAction(const MTPmessageAction &action, TextL
} }
HistoryServiceMsg::HistoryServiceMsg(History *history, HistoryBlock *block, const MTPDmessageService &msg) : HistoryServiceMsg::HistoryServiceMsg(History *history, HistoryBlock *block, const MTPDmessageService &msg) :
HistoryItem(history, block, msg.vid.v, msg.vout.v, msg.vunread.v, ::date(msg.vdate), msg.vfrom_id.v), media(0), _text(st::msgMinWidth) { HistoryItem(history, block, msg.vid.v, msg.vout.v, msg.vunread.v, ::date(msg.vdate), msg.vfrom_id.v)
, _text(st::msgMinWidth)
, media(0)
{
TextLinkPtr second; TextLinkPtr second;
QString text(messageByAction(msg.vaction, second)); QString text(messageByAction(msg.vaction, second));
@ -2975,7 +3063,10 @@ HistoryServiceMsg::HistoryServiceMsg(History *history, HistoryBlock *block, cons
} }
/**/ /**/
HistoryServiceMsg::HistoryServiceMsg(History *history, HistoryBlock *block, MsgId msgId, QDateTime date, const QString &msg, bool out, bool unread, HistoryMedia *media) : HistoryServiceMsg::HistoryServiceMsg(History *history, HistoryBlock *block, MsgId msgId, QDateTime date, const QString &msg, bool out, bool unread, HistoryMedia *media) :
HistoryItem(history, block, msgId, out, unread, date, 0), media(media), _text(st::msgServiceFont, msg, _historySrvOptions, st::dlgMinWidth) { HistoryItem(history, block, msgId, out, unread, date, 0)
, _text(st::msgServiceFont, msg, _historySrvOptions, st::dlgMinWidth)
, media(media)
{
_maxw = _text.maxWidth() + st::msgServicePadding.left() + st::msgServicePadding.right(); _maxw = _text.maxWidth() + st::msgServicePadding.left() + st::msgServicePadding.right();
_minh = _text.minHeight(); _minh = _text.minHeight();
} }

View file

@ -57,7 +57,7 @@ struct ChatData;
struct UserData; struct UserData;
struct PeerData { struct PeerData {
PeerData(const PeerId &id); PeerData(const PeerId &id);
~PeerData() { virtual ~PeerData() {
if (notify != UnknownNotifySettings && notify != EmptyNotifySettings) { if (notify != UnknownNotifySettings && notify != EmptyNotifySettings) {
delete notify; delete notify;
notify = UnknownNotifySettings; notify = UnknownNotifySettings;
@ -212,7 +212,7 @@ enum FileStatus {
struct VideoData { struct VideoData {
VideoData(const VideoId &id, 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) : VideoData(const VideoId &id, 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) :
id(id), access(access), user(user), date(date), duration(duration), w(w), h(h), thumb(thumb), dc(dc), size(size), openOnSave(0), loader(0), fileType(0), status(FileReady), uploadOffset(0) { id(id), access(access), user(user), date(date), duration(duration), w(w), h(h), thumb(thumb), dc(dc), size(size), status(FileReady), uploadOffset(0), fileType(0), openOnSave(0), loader(0) {
memset(md5, 0, sizeof(md5)); memset(md5, 0, sizeof(md5));
} }
void forget() { void forget() {
@ -314,7 +314,7 @@ public:
struct AudioData { struct AudioData {
AudioData(const AudioId &id, const uint64 &access = 0, int32 user = 0, int32 date = 0, int32 duration = 0, int32 dc = 0, int32 size = 0) : AudioData(const AudioId &id, const uint64 &access = 0, int32 user = 0, int32 date = 0, int32 duration = 0, int32 dc = 0, int32 size = 0) :
id(id), access(access), user(user), date(date), dc(dc), duration(duration), size(size), openOnSave(0), loader(0), status(FileReady), uploadOffset(0) { id(id), access(access), user(user), date(date), duration(duration), dc(dc), size(size), status(FileReady), uploadOffset(0), openOnSave(0), loader(0) {
memset(md5, 0, sizeof(md5)); memset(md5, 0, sizeof(md5));
} }
void forget() { void forget() {
@ -412,7 +412,7 @@ public:
struct DocumentData { struct DocumentData {
DocumentData(const DocumentId &id, const uint64 &access = 0, int32 user = 0, int32 date = 0, const QString &name = QString(), const QString &mime = QString(), const ImagePtr &thumb = ImagePtr(), int32 dc = 0, int32 size = 0) : DocumentData(const DocumentId &id, const uint64 &access = 0, int32 user = 0, int32 date = 0, const QString &name = QString(), const QString &mime = QString(), const ImagePtr &thumb = ImagePtr(), int32 dc = 0, int32 size = 0) :
id(id), access(access), user(user), date(date), name(name), mime(mime), thumb(thumb), dc(dc), size(size), openOnSave(0), loader(0), status(FileReady), uploadOffset(0) { id(id), access(access), user(user), date(date), name(name), mime(mime), thumb(thumb), dc(dc), size(size), status(FileReady), uploadOffset(0), openOnSave(0), loader(0) {
memset(md5, 0, sizeof(md5)); memset(md5, 0, sizeof(md5));
} }
void forget() { void forget() {
@ -628,7 +628,7 @@ struct History : public QList<HistoryBlock*> {
}; };
struct DialogsList { struct DialogsList {
DialogsList(bool sortByName) : end(&last), begin(&last), current(&last), byName(sortByName), count(0) { DialogsList(bool sortByName) : begin(&last), end(&last), byName(sortByName), count(0), current(&last) {
} }
void adjustCurrent(int32 y, int32 h) const { void adjustCurrent(int32 y, int32 h) const {
@ -985,7 +985,7 @@ public:
return _out; return _out;
} }
bool unread() const { bool unread() const {
if (_out && (id > 0 && id < _history->outboxReadTill) || !_out && id > 0 && id < _history->inboxReadTill) return false; if ((_out && (id > 0 && id < _history->outboxReadTill)) || (!_out && id > 0 && id < _history->inboxReadTill)) return false;
return _unread; return _unread;
} }
virtual bool needCheck() const { virtual bool needCheck() const {

View file

@ -30,13 +30,30 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
// flick scroll taken from http://qt-project.org/doc/qt-4.8/demos-embedded-anomaly-src-flickcharm-cpp.html // flick scroll taken from http://qt-project.org/doc/qt-4.8/demos-embedded-anomaly-src-flickcharm-cpp.html
HistoryList::HistoryList(HistoryWidget *historyWidget, ScrollArea *scroll, History *history) : QWidget(0), HistoryList::HistoryList(HistoryWidget *historyWidget, ScrollArea *scroll, History *history) : QWidget(0)
historyWidget(historyWidget), scrollArea(scroll), hist(history), currentBlock(0), currentItem(0), _menu(0), , hist(history)
_dragAction(NoDrag), _dragItem(0), _dragSelFrom(0), _dragSelTo(0), _dragSelecting(false), , historyWidget(historyWidget)
_dragSelType(TextSelectLetters), _dragWasInactive(false), , scrollArea(scroll)
_touchScroll(false), _touchSelect(false), _touchInProgress(false), , currentBlock(0)
_touchScrollState(TouchScrollManual), _touchPrevPosValid(false), _touchWaitingAcceleration(false), _touchSpeedTime(0), _touchAccelerationTime(0), _touchTime(0), , currentItem(0)
_cursor(style::cur_default) { , _cursor(style::cur_default)
, _dragAction(NoDrag)
, _dragSelType(TextSelectLetters)
, _dragItem(0)
, _dragWasInactive(false)
, _dragSelFrom(0)
, _dragSelTo(0)
, _dragSelecting(false)
, _touchScroll(false)
, _touchSelect(false)
, _touchInProgress(false)
, _touchScrollState(TouchScrollManual)
, _touchPrevPosValid(false)
, _touchWaitingAcceleration(false)
, _touchSpeedTime(0)
, _touchAccelerationTime(0)
, _touchTime(0)
, _menu(0) {
linkTipTimer.setSingleShot(true); linkTipTimer.setSingleShot(true);
connect(&linkTipTimer, SIGNAL(timeout()), this, SLOT(showLinkTip())); connect(&linkTipTimer, SIGNAL(timeout()), this, SLOT(showLinkTip()));
@ -72,7 +89,7 @@ void HistoryList::paintEvent(QPaintEvent *e) {
} }
if (hist->isEmpty()) { if (hist->isEmpty()) {
QPoint dogPos((width() - st::msgDogImg.width()) / 2, ((height() - st::msgDogImg.height()) * 4) / 9); QPoint dogPos((width() - st::msgDogImg.pxWidth()) / 2, ((height() - st::msgDogImg.pxHeight()) * 4) / 9);
p.drawPixmap(dogPos, App::sprite(), st::msgDogImg); p.drawPixmap(dogPos, App::sprite(), st::msgDogImg);
} else { } else {
adjustCurrent(r.top()); adjustCurrent(r.top());
@ -167,8 +184,8 @@ void HistoryList::touchUpdateSpeed() {
if (_touchScrollState == TouchScrollAuto) { if (_touchScrollState == TouchScrollAuto) {
const int oldSpeedY = _touchSpeed.y(); const int oldSpeedY = _touchSpeed.y();
const int oldSpeedX = _touchSpeed.x(); const int oldSpeedX = _touchSpeed.x();
if ((oldSpeedY <= 0 && newSpeedY <= 0) || (oldSpeedY >= 0 && newSpeedY >= 0) if ((oldSpeedY <= 0 && newSpeedY <= 0) || ((oldSpeedY >= 0 && newSpeedY >= 0)
&& (oldSpeedX <= 0 && newSpeedX <= 0) || (oldSpeedX >= 0 && newSpeedX >= 0)) { && (oldSpeedX <= 0 && newSpeedX <= 0)) || (oldSpeedX >= 0 && newSpeedX >= 0)) {
_touchSpeed.setY(snap((oldSpeedY + (newSpeedY / 4)), -MaxScrollAccelerated, +MaxScrollAccelerated)); _touchSpeed.setY(snap((oldSpeedY + (newSpeedY / 4)), -MaxScrollAccelerated, +MaxScrollAccelerated));
_touchSpeed.setX(snap((oldSpeedX + (newSpeedX / 4)), -MaxScrollAccelerated, +MaxScrollAccelerated)); _touchSpeed.setX(snap((oldSpeedX + (newSpeedX / 4)), -MaxScrollAccelerated, +MaxScrollAccelerated));
} else { } else {
@ -615,11 +632,11 @@ void HistoryList::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
_menu->addAction(lang(lng_context_save_image), this, SLOT(saveContextImage()))->setEnabled(true); _menu->addAction(lang(lng_context_save_image), this, SLOT(saveContextImage()))->setEnabled(true);
_menu->addAction(lang(lng_context_copy_image), this, SLOT(copyContextImage()))->setEnabled(true); _menu->addAction(lang(lng_context_copy_image), this, SLOT(copyContextImage()))->setEnabled(true);
} else { } else {
if (lnkVideo && lnkVideo->video()->loader || lnkAudio && lnkAudio->audio()->loader || lnkDocument && lnkDocument->document()->loader) { if ((lnkVideo && lnkVideo->video()->loader) || (lnkAudio && lnkAudio->audio()->loader) || (lnkDocument && lnkDocument->document()->loader)) {
_menu->addAction(lang(lng_context_cancel_download), this, SLOT(cancelContextDownload()))->setEnabled(true); _menu->addAction(lang(lng_context_cancel_download), this, SLOT(cancelContextDownload()))->setEnabled(true);
} else { } else {
if (lnkVideo && !lnkVideo->video()->already(true).isEmpty() || lnkAudio && !lnkAudio->audio()->already(true).isEmpty() || lnkDocument && !lnkDocument->document()->already(true).isEmpty()) { if ((lnkVideo && !lnkVideo->video()->already(true).isEmpty()) || (lnkAudio && !lnkAudio->audio()->already(true).isEmpty()) || (lnkDocument && !lnkDocument->document()->already(true).isEmpty())) {
_menu->addAction(lang(lng_context_show_in_folder), this, SLOT(showContextInFolder()))->setEnabled(true); _menu->addAction(lang(cPlatform() == dbipMac ? lng_context_show_in_finder : lng_context_show_in_folder), this, SLOT(showContextInFolder()))->setEnabled(true);
} }
_menu->addAction(lang(lnkVideo ? lng_context_open_video : (lnkAudio ? lng_context_open_audio : lng_context_open_document)), this, SLOT(openContextFile()))->setEnabled(true); _menu->addAction(lang(lnkVideo ? lng_context_open_video : (lnkAudio ? lng_context_open_audio : lng_context_open_document)), this, SLOT(openContextFile()))->setEnabled(true);
_menu->addAction(lang(lnkVideo ? lng_context_save_video : (lnkAudio ? lng_context_save_audio : lng_context_save_document)), this, SLOT(saveContextFile()))->setEnabled(true); _menu->addAction(lang(lnkVideo ? lng_context_save_video : (lnkAudio ? lng_context_save_audio : lng_context_save_document)), this, SLOT(saveContextFile()))->setEnabled(true);
@ -961,7 +978,7 @@ void HistoryList::fillSelectedItems(HistoryItemSet &sel, bool forDelete) {
for (SelectedItems::const_iterator i = _selected.cbegin(), e = _selected.cend(); i != e; ++i) { for (SelectedItems::const_iterator i = _selected.cbegin(), e = _selected.cend(); i != e; ++i) {
HistoryItem *item = i.key(); HistoryItem *item = i.key();
if (item->itemType() == HistoryItem::MsgType && (item->id > 0 && !item->serviceMsg() || forDelete)) { if (item->itemType() == HistoryItem::MsgType && ((item->id > 0 && !item->serviceMsg()) || forDelete)) {
sel.insert(item->y + item->block()->y, item); sel.insert(item->y + item->block()->y, item);
} }
} }
@ -1031,15 +1048,15 @@ void HistoryList::onUpdateSelected(bool force) {
_selected[_dragItem] = _dragItem->adjustSelection(qMin(second, _dragSymbol), qMax(second, _dragSymbol), _dragSelType); _selected[_dragItem] = _dragItem->adjustSelection(qMin(second, _dragSymbol), qMax(second, _dragSymbol), _dragSelType);
updateDragSelection(0, 0, false); updateDragSelection(0, 0, false);
} else { } else {
bool selectingDown = (_dragItem->block()->y < item->block()->y) || (_dragItem->block() == item->block()) && (_dragItem->y < item->y || _dragItem == item && _dragStartPos.y() < m.y()); bool selectingDown = (_dragItem->block()->y < item->block()->y) || ((_dragItem->block() == item->block()) && (_dragItem->y < item->y || (_dragItem == item && _dragStartPos.y() < m.y())));
HistoryItem *dragSelFrom = _dragItem, *dragSelTo = item; HistoryItem *dragSelFrom = _dragItem, *dragSelTo = item;
if (!dragSelFrom->hasPoint(_dragStartPos.x(), _dragStartPos.y())) { // maybe exclude dragSelFrom if (!dragSelFrom->hasPoint(_dragStartPos.x(), _dragStartPos.y())) { // maybe exclude dragSelFrom
if (selectingDown) { if (selectingDown) {
if (_dragStartPos.y() >= dragSelFrom->height() - st::msgMargin.bottom() || (item == dragSelFrom) && (m.y() < _dragStartPos.y() + QApplication::startDragDistance())) { if (_dragStartPos.y() >= dragSelFrom->height() - st::msgMargin.bottom() || ((item == dragSelFrom) && (m.y() < _dragStartPos.y() + QApplication::startDragDistance()))) {
dragSelFrom = (dragSelFrom == dragSelTo) ? 0 : nextItem(dragSelFrom); dragSelFrom = (dragSelFrom == dragSelTo) ? 0 : nextItem(dragSelFrom);
} }
} else { } else {
if (_dragStartPos.y() < st::msgMargin.top() || (item == dragSelFrom) && (m.y() >= _dragStartPos.y() - QApplication::startDragDistance())) { if (_dragStartPos.y() < st::msgMargin.top() || ((item == dragSelFrom) && (m.y() >= _dragStartPos.y() - QApplication::startDragDistance()))) {
dragSelFrom = (dragSelFrom == dragSelTo) ? 0 : prevItem(dragSelFrom); dragSelFrom = (dragSelFrom == dragSelTo) ? 0 : prevItem(dragSelFrom);
} }
} }
@ -1218,11 +1235,19 @@ void MessageField::focusInEvent(QFocusEvent *e) {
emit focused(); emit focused();
} }
HistoryHider::HistoryHider(MainWidget *parent, bool forwardSelected) : QWidget(parent), HistoryHider::HistoryHider(MainWidget *parent, bool forwardSelected) : QWidget(parent)
aOpacity(0, 1), aOpacityFunc(anim::easeOutCirc), hiding(false), offered(0), _forwardRequest(0), , sharedContact(0)
toTextWidth(0), _forwardSelected(forwardSelected), sharedContact(0), shadow(st::boxShadow), , _forwardSelected(forwardSelected)
forwardButton(this, lang(lng_forward), st::btnSelectDone), , forwardButton(this, lang(lng_forward), st::btnSelectDone)
cancelButton(this, lang(lng_cancel), st::btnSelectCancel) { , cancelButton(this, lang(lng_cancel), st::btnSelectCancel)
, offered(0)
, aOpacity(0, 1)
, aOpacityFunc(anim::easeOutCirc)
, hiding(false)
, _forwardRequest(0)
, toTextWidth(0)
, shadow(st::boxShadow)
{
connect(&forwardButton, SIGNAL(clicked()), this, SLOT(forward())); connect(&forwardButton, SIGNAL(clicked()), this, SLOT(forward()));
connect(&cancelButton, SIGNAL(clicked()), this, SLOT(startHide())); connect(&cancelButton, SIGNAL(clicked()), this, SLOT(startHide()));
@ -1234,11 +1259,19 @@ HistoryHider::HistoryHider(MainWidget *parent, bool forwardSelected) : QWidget(p
anim::start(this); anim::start(this);
} }
HistoryHider::HistoryHider(MainWidget *parent, UserData *sharedContact) : QWidget(parent), HistoryHider::HistoryHider(MainWidget *parent, UserData *sharedContact) : QWidget(parent)
aOpacity(0, 1), aOpacityFunc(anim::easeOutCirc), hiding(false), offered(0), _forwardRequest(0), , sharedContact(sharedContact)
toTextWidth(0), _forwardSelected(false), sharedContact(sharedContact), shadow(st::boxShadow), , _forwardSelected(false)
forwardButton(this, lang(lng_forward), st::btnSelectDone), , forwardButton(this, lang(lng_forward), st::btnSelectDone)
cancelButton(this, lang(lng_cancel), st::btnSelectCancel) { , cancelButton(this, lang(lng_cancel), st::btnSelectCancel)
, offered(0)
, aOpacity(0, 1)
, aOpacityFunc(anim::easeOutCirc)
, hiding(false)
, _forwardRequest(0)
, toTextWidth(0)
, shadow(st::boxShadow)
{
connect(&forwardButton, SIGNAL(clicked()), this, SLOT(forward())); connect(&forwardButton, SIGNAL(clicked()), this, SLOT(forward()));
connect(&cancelButton, SIGNAL(clicked()), this, SLOT(startHide())); connect(&cancelButton, SIGNAL(clicked()), this, SLOT(startHide()));
@ -1382,7 +1415,7 @@ void HistoryHider::resizeEvent(QResizeEvent *e) {
void HistoryHider::offerPeer(PeerId peer) { void HistoryHider::offerPeer(PeerId peer) {
offered = App::peer(peer); offered = App::peer(peer);
toText.setText(st::boxFont, lang(sharedContact ? lng_forward_share_contact : lng_forward_confirm).replace(qsl("{recipient}"), offered->chat ? '«' + offered->name + '»' : offered->name), _textNameOptions); toText.setText(st::boxFont, lang(sharedContact ? lng_forward_share_contact : lng_forward_confirm).replace(qsl("{recipient}"), offered->chat ? '\xAB' + offered->name + '\xBB' : offered->name), _textNameOptions);
toTextWidth = toText.maxWidth(); toTextWidth = toText.maxWidth();
if (toTextWidth > box.width() - st::boxPadding.left() - st::boxPadding.right()) { if (toTextWidth > box.width() - st::boxPadding.left() - st::boxPadding.right()) {
toTextWidth = box.width() - st::boxPadding.left() - st::boxPadding.right(); toTextWidth = box.width() - st::boxPadding.left() - st::boxPadding.right();
@ -1402,14 +1435,38 @@ HistoryHider::~HistoryHider() {
parent()->noHider(this); parent()->noHider(this);
} }
HistoryWidget::HistoryWidget(QWidget *parent) : QWidget(parent), noTypingUpdate(false), serviceImageCacheSize(0), HistoryWidget::HistoryWidget(QWidget *parent) : QWidget(parent)
_scroll(this, st::historyScroll, false), _list(0), histPeer(0), _activePeer(0), histOffset(0), histCount(-1), , histOffset(0)
hist(0), histPreloading(0), histReadRequestId(0), hiderOffered(false), _histInited(false), , histCount(-1)
_send(this, lang(lng_send_button), st::btnSend), histRequestsCount(0), , histReadRequestId(0)
_attachDocument(this, st::btnAttachDocument), _attachPhoto(this, st::btnAttachPhoto), _attachEmoji(this, st::btnAttachEmoji), , histRequestsCount(0)
confirmImageId(0), loadingChatId(0), loadingRequestId(0), titlePeerTextWidth(0), , histPeer(0)
_field(this, st::taMsgField, lang(lng_message_ph)), bg(st::msgBG), imageLoader(this), , _activePeer(0)
_attachType(this), _emojiPan(this), _attachDrag(DragStateNone), _attachDragDocument(this), _attachDragPhoto(this), _scrollDelta(0) { , histPreloading(0)
, _scroll(this, st::historyScroll, false)
, _list(0)
, hist(0)
, _histInited(false)
, _send(this, lang(lng_send_button), st::btnSend)
, _attachDocument(this, st::btnAttachDocument)
, _attachPhoto(this, st::btnAttachPhoto)
, _attachEmoji(this, st::btnAttachEmoji)
, _field(this, st::taMsgField, lang(lng_message_ph))
, _attachType(this)
, _emojiPan(this)
, _attachDrag(DragStateNone)
, _attachDragDocument(this)
, _attachDragPhoto(this)
, imageLoader(this)
, noTypingUpdate(false)
, loadingChatId(0)
, loadingRequestId(0)
, serviceImageCacheSize(0)
, confirmImageId(0)
, titlePeerTextWidth(0)
, bg(st::msgBG)
, hiderOffered(false)
, _scrollDelta(0) {
_scroll.setFocusPolicy(Qt::NoFocus); _scroll.setFocusPolicy(Qt::NoFocus);
setAcceptDrops(true); setAcceptDrops(true);
@ -1462,7 +1519,7 @@ void HistoryWidget::onTextChange() {
void HistoryWidget::updateTyping(bool typing) { void HistoryWidget::updateTyping(bool typing) {
uint64 ms = getms() + 10000; uint64 ms = getms() + 10000;
if (noTypingUpdate || !hist || typing && (hist->myTyping + 5000 > ms) || !typing && (hist->myTyping + 5000 <= ms)) return; if (noTypingUpdate || !hist || (typing && (hist->myTyping + 5000 > ms)) || (!typing && (hist->myTyping + 5000 <= ms))) return;
hist->myTyping = typing ? ms : 0; hist->myTyping = typing ? ms : 0;
if (typing) MTP::send(MTPmessages_SetTyping(histPeer->input, MTP_bool(typing))); if (typing) MTP::send(MTPmessages_SetTyping(histPeer->input, MTP_bool(typing)));
@ -1746,20 +1803,7 @@ void HistoryWidget::historyToDown(History *history) {
} }
void HistoryWidget::historyWasRead(bool force) { void HistoryWidget::historyWasRead(bool force) {
if (histReadRequestId || !hist || !force && (!hist->unreadCount || !hist->unreadLoaded)) return; App::main()->readServerHistory(hist, force);
hist->inboxRead(true);
histReadRequestId = MTP::send(MTPmessages_ReadHistory(histPeer->input, MTP_int(0), MTP_int(0)), rpcDone(&HistoryWidget::partWasRead, histPeer));
}
void HistoryWidget::partWasRead(PeerData *peer, const MTPmessages_AffectedHistory &result) {
const MTPDmessages_affectedHistory &d(result.c_messages_affectedHistory());
App::main()->updUpdated(d.vpts.v, 0, 0, d.vseq.v);
histReadRequestId = 0;
int32 offset = d.voffset.v;
if (!MTP::authedId() || offset <= 0) return;
histReadRequestId = MTP::send(MTPmessages_ReadHistory(peer->input, MTP_int(0), MTP_int(offset)), rpcDone(&HistoryWidget::partWasRead, peer));
} }
bool HistoryWidget::messagesFailed(const RPCError &e, mtpRequestId requestId) { bool HistoryWidget::messagesFailed(const RPCError &e, mtpRequestId requestId) {
@ -1890,7 +1934,7 @@ void HistoryWidget::loadMessages() {
void HistoryWidget::onListScroll() { void HistoryWidget::onListScroll() {
App::checkImageCacheSize(); App::checkImageCacheSize();
if (histPreloading || !hist || (_list->isHidden() || _scroll.isHidden() || !App::wnd()->windowHandle()->isVisible()) && hist->unreadLoaded) { if (histPreloading || !hist || ((_list->isHidden() || _scroll.isHidden() || !App::wnd()->windowHandle()->isVisible()) && hist->unreadLoaded)) {
checkUnreadLoaded(true); checkUnreadLoaded(true);
return; return;
} }
@ -1906,9 +1950,7 @@ void HistoryWidget::onVisibleChanged() {
QTimer::singleShot(0, this, SLOT(onListScroll())); QTimer::singleShot(0, this, SLOT(onListScroll()));
} }
QString HistoryWidget::prepareMessage() { QString HistoryWidget::prepareMessage(QString result) {
QString result = _field.getText();
result = result.replace('\t', qsl(" ")); result = result.replace('\t', qsl(" "));
result = result.replace(" --", QString::fromUtf8(" \xe2\x80\x94")); result = result.replace(" --", QString::fromUtf8(" \xe2\x80\x94"));
@ -1922,7 +1964,7 @@ QString HistoryWidget::prepareMessage() {
void HistoryWidget::onSend() { void HistoryWidget::onSend() {
if (!hist) return; if (!hist) return;
QString text = prepareMessage(); QString text = prepareMessage(_field.getText());
if (!text.isEmpty()) { if (!text.isEmpty()) {
MsgId newId = clientMsgId(); MsgId newId = clientMsgId();
uint64 randomId = MTP::nonce<uint64>(); uint64 randomId = MTP::nonce<uint64>();
@ -1937,6 +1979,8 @@ void HistoryWidget::onSend() {
MTP::send(MTPmessages_SendMessage(histInputPeer, msgText, MTP_long(randomId)), App::main()->rpcDone(&MainWidget::sentDataReceived, randomId)); MTP::send(MTPmessages_SendMessage(histInputPeer, msgText, MTP_long(randomId)), App::main()->rpcDone(&MainWidget::sentDataReceived, randomId));
_field.setPlainText(""); _field.setPlainText("");
if (!_attachType.isHidden()) _attachType.hideStart();
if (!_emojiPan.isHidden()) _emojiPan.hideStart();
} }
_field.setFocus(); _field.setFocus();
} }
@ -1966,7 +2010,7 @@ mtpRequestId HistoryWidget::onForward(const PeerId &peer, bool forwardSelected)
newId = clientMsgId(); newId = clientMsgId();
hist->addToBackForwarded(newId, msg); hist->addToBackForwarded(newId, msg);
MTP::send(MTPmessages_ForwardMessage(histPeer->input, MTP_int(item->id), MTP_long(randomId)), App::main()->rpcDone(&MainWidget::sentFullDataReceived, randomId)); MTP::send(MTPmessages_ForwardMessage(histPeer->input, MTP_int(item->id), MTP_long(randomId)), App::main()->rpcDone(&MainWidget::sentFullDataReceived, randomId));
} else if (srv || msg && msg->selectedText(FullItemSel).isEmpty()) { } else if (srv || (msg && msg->selectedText(FullItemSel).isEmpty())) {
// newId = clientMsgId(); // newId = clientMsgId();
// MTP::send(MTPmessages_ForwardMessage(histPeer->input, MTP_int(item->id), MTP_long(randomId)), App::main()->rpcDone(&MainWidget::sentFullDataReceived, randomId)); // MTP::send(MTPmessages_ForwardMessage(histPeer->input, MTP_int(item->id), MTP_long(randomId)), App::main()->rpcDone(&MainWidget::sentFullDataReceived, randomId));
} else if (msg) { } else if (msg) {
@ -2314,7 +2358,7 @@ void HistoryWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth)
if (!decreaseWidth) { if (!decreaseWidth) {
p.setOpacity(st::topBarForwardAlpha + (1 - st::topBarForwardAlpha) * over); p.setOpacity(st::topBarForwardAlpha + (1 - st::topBarForwardAlpha) * over);
p.drawPixmap(QPoint(width() - (st::topBarForwardPadding.right() + st::topBarForwardImg.width()) / 2, (st::topBarHeight - st::topBarForwardImg.height()) / 2), App::sprite(), st::topBarForwardImg); p.drawPixmap(QPoint(width() - (st::topBarForwardPadding.right() + st::topBarForwardImg.pxWidth()) / 2, (st::topBarHeight - st::topBarForwardImg.pxHeight()) / 2), App::sprite(), st::topBarForwardImg);
} }
} }
@ -2424,7 +2468,6 @@ void HistoryWidget::onPhotoReady() {
} }
void HistoryWidget::onPhotoFailed(quint64 id) { void HistoryWidget::onPhotoFailed(quint64 id) {
id = id;
} }
void HistoryWidget::confirmSendImage(const ReadyLocalMedia &img) { void HistoryWidget::confirmSendImage(const ReadyLocalMedia &img) {
@ -2562,7 +2605,7 @@ void HistoryWidget::resizeEvent(QResizeEvent *e) {
} }
void HistoryWidget::updateListSize(int32 addToY, bool initial) { void HistoryWidget::updateListSize(int32 addToY, bool initial) {
if (!hist || !_histInited && !initial) return; if (!hist || (!_histInited && !initial)) return;
if (!App::wnd()->isVisible()) return; // scrollTopMax etc are not working after recountHeight() if (!App::wnd()->isVisible()) return; // scrollTopMax etc are not working after recountHeight()
@ -2792,11 +2835,11 @@ void HistoryWidget::paintEvent(QPaintEvent *e) {
p.fillRect(0, _field.y() - st::sendPadding, width(), _field.height() + 2 * st::sendPadding, st::taMsgField.bgColor->b); p.fillRect(0, _field.y() - st::sendPadding, width(), _field.height() + 2 * st::sendPadding, st::taMsgField.bgColor->b);
} }
} else { } else {
QPoint dogPos((width() - st::msgDogImg.width()) / 2, ((height() - _field.height() - 2 * st::sendPadding - st::msgDogImg.height()) * 4) / 9); QPoint dogPos((width() - st::msgDogImg.pxWidth()) / 2, ((height() - _field.height() - 2 * st::sendPadding - st::msgDogImg.pxHeight()) * 4) / 9);
p.drawPixmap(dogPos, App::sprite(), st::msgDogImg); p.drawPixmap(dogPos, App::sprite(), st::msgDogImg);
int32 pointsCount = 8, w = pointsCount * (st::introPointWidth + 2 * st::introPointDelta), h = st::introPointHeight; int32 pointsCount = 8, w = pointsCount * (st::introPointWidth + 2 * st::introPointDelta), h = st::introPointHeight;
int32 pointsLeft = (width() - w) / 2 + st::introPointDelta - st::introPointLeft, pointsTop = dogPos.y() + (st::msgDogImg.height() * 6) / 5; int32 pointsLeft = (width() - w) / 2 + st::introPointDelta - st::introPointLeft, pointsTop = dogPos.y() + (st::msgDogImg.pxHeight() * 6) / 5;
int32 curPoint = histRequestsCount % pointsCount; int32 curPoint = histRequestsCount % pointsCount;
@ -2805,8 +2848,8 @@ void HistoryWidget::paintEvent(QPaintEvent *e) {
// points // points
p.setOpacity(st::introPointAlpha); p.setOpacity(st::introPointAlpha);
int x = pointsLeft + st::introPointLeft; int32 x = pointsLeft + st::introPointLeft;
for (uint32 i = 0; i < pointsCount; ++i) { for (int32 i = 0; i < pointsCount; ++i) {
p.fillRect(x, pointsTop + st::introPointTop, st::introPointWidth, st::introPointHeight, st::introPointColor->b); p.fillRect(x, pointsTop + st::introPointTop, st::introPointWidth, st::introPointHeight, st::introPointColor->b);
x += (st::introPointWidth + 2 * st::introPointDelta); x += (st::introPointWidth + 2 * st::introPointDelta);
} }

View file

@ -312,6 +312,8 @@ public:
bool touchScroll(const QPoint &delta); bool touchScroll(const QPoint &delta);
QString prepareMessage(QString text);
~HistoryWidget(); ~HistoryWidget();
signals: signals:
@ -365,7 +367,6 @@ public slots:
private: private:
bool messagesFailed(const RPCError &error, mtpRequestId requestId); bool messagesFailed(const RPCError &error, mtpRequestId requestId);
void partWasRead(PeerData *peer, const MTPmessages_AffectedHistory &result);
void updateListSize(int32 addToY = 0, bool initial = false); void updateListSize(int32 addToY = 0, bool initial = false);
void addMessagesToFront(const QVector<MTPMessage> &messages); void addMessagesToFront(const QVector<MTPMessage> &messages);
void chatLoaded(const MTPmessages_ChatFull &res); void chatLoaded(const MTPmessages_ChatFull &res);
@ -375,8 +376,6 @@ private:
void updateDragAreas(); void updateDragAreas();
QString prepareMessage();
int32 histOffset, histCount, histReadRequestId; int32 histOffset, histCount, histReadRequestId;
int32 histRequestsCount; int32 histRequestsCount;
PeerData *histPeer, *_activePeer; PeerData *histPeer, *_activePeer;

View file

@ -45,8 +45,8 @@ namespace {
} }
IntroWidget::IntroWidget(Window *window) : QWidget(window), IntroWidget::IntroWidget(Window *window) : QWidget(window),
wnd(window), cacheForHideInd(0), cacheForShowInd(0), _callTimeout(60), cacheForHideInd(0), cacheForShowInd(0), wnd(window), steps(new IntroSteps(this)),
steps(new IntroSteps(this)), phone(0), code(0), signup(0), current(0), moving(0), visibilityChanging(0) { phone(0), code(0), signup(0), current(0), moving(0), visibilityChanging(0), _callTimeout(60) {
setGeometry(QRect(0, st::titleHeight, wnd->width(), wnd->height() - st::titleHeight)); setGeometry(QRect(0, st::titleHeight, wnd->width(), wnd->height() - st::titleHeight));
countryForReg = psCurrentCountry(); countryForReg = psCurrentCountry();

View file

@ -67,10 +67,10 @@ void CodeInput::correctValue(QKeyEvent *e, const QString &was) {
if (strict) emit codeEntered(); if (strict) emit codeEntered();
} }
IntroCode::IntroCode(IntroWidget *parent) : IntroStage(parent), IntroCode::IntroCode(IntroWidget *parent) : IntroStage(parent), errorAlpha(0),
next(this, lang(lng_intro_next), st::btnIntroNext), next(this, lang(lng_intro_next), st::btnIntroNext),
back(this, lang(lng_intro_back), st::btnIntroBack), back(this, lang(lng_intro_back), st::btnIntroBack),
code(this, st::inpIntroCode, lang(lng_code_ph)), errorAlpha(0), waitTillCall(intro()->getCallTimeout()) { code(this, st::inpIntroCode, lang(lng_code_ph)), waitTillCall(intro()->getCallTimeout()) {
setVisible(false); setVisible(false);
setGeometry(parent->innerRect()); setGeometry(parent->innerRect());

View file

@ -40,10 +40,13 @@ namespace {
}; };
} }
IntroPhone::IntroPhone(IntroWidget *parent) : IntroStage(parent), changed(false), IntroPhone::IntroPhone(IntroWidget *parent) : IntroStage(parent),
errorAlpha(0), changed(false),
next(this, lang(lng_intro_next), st::btnIntroStart), next(this, lang(lng_intro_next), st::btnIntroStart),
country(this, st::introCountry), errorAlpha(0), _signup(this, lang(lng_phone_notreg).replace(qsl("{signup}"), textcmdStartLink(1)).replace(qsl("{/signup}"), textcmdStopLink()), st::introErrLabel), _showSignup(false), country(this, st::introCountry),
phone(this, st::inpIntroPhone, lang(lng_phone_ph)), code(this, st::inpIntroCountryCode) { phone(this, st::inpIntroPhone, lang(lng_phone_ph)), code(this, st::inpIntroCountryCode),
_signup(this, lang(lng_phone_notreg).replace(qsl("{signup}"), textcmdStartLink(1)).replace(qsl("{/signup}"), textcmdStopLink()), st::introErrLabel),
_showSignup(false) {
setVisible(false); setVisible(false);
setGeometry(parent->innerRect()); setGeometry(parent->innerRect());

View file

@ -28,7 +28,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include "intro/intro.h" #include "intro/intro.h"
IntroSignup::IntroSignup(IntroWidget *parent) : IntroStage(parent), IntroSignup::IntroSignup(IntroWidget *parent) : IntroStage(parent),
next(this, lang(lng_intro_finish), st::btnIntroFinish), errorAlpha(0), a_photo(0), errorAlpha(0), a_photo(0),
next(this, lang(lng_intro_finish), st::btnIntroFinish),
first(this, st::inpIntroName, lang(lng_signup_firstname)), first(this, st::inpIntroName, lang(lng_signup_firstname)),
last(this, st::inpIntroName, lang(lng_signup_lastname)) { last(this, st::inpIntroName, lang(lng_signup_lastname)) {
setVisible(false); setVisible(false);
@ -124,7 +125,7 @@ void IntroSignup::paintEvent(QPaintEvent *e) {
void IntroSignup::resizeEvent(QResizeEvent *e) { void IntroSignup::resizeEvent(QResizeEvent *e) {
textRect = QRect((width() - st::introTextSize.width()) / 2, 0, st::introTextSize.width(), st::introTextSize.height()); textRect = QRect((width() - st::introTextSize.width()) / 2, 0, st::introTextSize.width(), st::introTextSize.height());
_phLeft = (width() - st::setPhotoImg.width()) / 2; _phLeft = (width() - st::setPhotoImg.pxWidth()) / 2;
_phTop = st::introHeaderFont->height + st::introFinishSkip; _phTop = st::introHeaderFont->height + st::introFinishSkip;
if (e->oldSize().width() != width()) { if (e->oldSize().width() != width()) {
int sumNext = st::btnIntroNext.width - st::btnIntroBack.width - st::btnIntroSep; int sumNext = st::btnIntroNext.width - st::btnIntroBack.width - st::btnIntroSep;
@ -132,7 +133,7 @@ void IntroSignup::resizeEvent(QResizeEvent *e) {
} }
if (e->oldSize().width() != width()) { if (e->oldSize().width() != width()) {
next.move((width() - next.width()) / 2, st::introSize.height() - st::btnIntroNext.height); next.move((width() - next.width()) / 2, st::introSize.height() - st::btnIntroNext.height);
first.move((width() - first.width()) / 2, _phTop + st::setPhotoImg.height() + st::introFinishSkip); first.move((width() - first.width()) / 2, _phTop + st::setPhotoImg.pxHeight() + st::introFinishSkip);
last.move((width() - last.width()) / 2, first.y() + first.height() + st::introFinishSkip); last.move((width() - last.width()) / 2, first.y() + first.height() + st::introFinishSkip);
} }
} }

View file

@ -66,7 +66,7 @@ namespace {
if (!skipJunk(from, end)) return false; if (!skipJunk(from, end)) return false;
const char *nameStart = from; const char *nameStart = from;
while (from < end && (*from >= 'a' && *from <= 'z' || *from >= 'A' && *from <= 'Z' || *from == '_' || *from >= '0' && *from <= '9')) { while (from < end && ((*from >= 'a' && *from <= 'z') || (*from >= 'A' && *from <= 'Z') || *from == '_' || (*from >= '0' && *from <= '9'))) {
++from; ++from;
} }

View file

@ -126,9 +126,23 @@ BackgroundWidget::~BackgroundWidget() {
if (_hidden) _hidden->deleteLater(); if (_hidden) _hidden->deleteLater();
} }
LayerWidget::LayerWidget(QWidget *parent, PhotoData *photo, HistoryItem *item) : QWidget(parent), photo(photo), video(0), LayerWidget::LayerWidget(QWidget *parent, PhotoData *photo, HistoryItem *item) : QWidget(parent)
aBackground(0), aOver(0), iX(App::wnd()->width() / 2), iY(App::wnd()->height() / 2), iW(0), iCoordFunc(anim::sineInOut), aOverFunc(anim::linear), aBackgroundFunc(anim::easeOutCirc), hiding(false), , photo(photo)
_touchPress(false), _touchMove(false), _touchRightButton(false), _menu(0) { , video(0)
, aBackground(0)
, aOver(0)
, iX(App::wnd()->width() / 2)
, iY(App::wnd()->height() / 2)
, iW(0)
, iCoordFunc(anim::sineInOut)
, aBackgroundFunc(anim::easeOutCirc)
, aOverFunc(anim::linear)
, hiding(false)
, _touchPress(false)
, _touchMove(false)
, _touchRightButton(false)
, _menu(0)
{
int32 x, y, w; int32 x, y, w;
if (App::wnd()->getPhotoCoords(photo, x, y, w)) { if (App::wnd()->getPhotoCoords(photo, x, y, w)) {
iX = anim::ivalue(x); iX = anim::ivalue(x);
@ -149,9 +163,23 @@ LayerWidget::LayerWidget(QWidget *parent, PhotoData *photo, HistoryItem *item) :
connect(&_touchTimer, SIGNAL(timeout()), this, SLOT(onTouchTimer())); connect(&_touchTimer, SIGNAL(timeout()), this, SLOT(onTouchTimer()));
} }
LayerWidget::LayerWidget(QWidget *parent, VideoData *video, HistoryItem *item) : QWidget(parent), photo(0), video(video), LayerWidget::LayerWidget(QWidget *parent, VideoData *video, HistoryItem *item) : QWidget(parent)
aBackground(0), aOver(0), iX(App::wnd()->width() / 2), iY(App::wnd()->height() / 2), iW(0), iCoordFunc(anim::sineInOut), aOverFunc(anim::linear), aBackgroundFunc(anim::easeOutCirc), hiding(false), , photo(0)
_touchPress(false), _touchMove(false), _touchRightButton(false), _menu(0) { , video(video)
, aBackground(0)
, aOver(0)
, iX(App::wnd()->width() / 2)
, iY(App::wnd()->height() / 2)
, iW(0)
, iCoordFunc(anim::sineInOut)
, aBackgroundFunc(anim::easeOutCirc)
, aOverFunc(anim::linear)
, hiding(false)
, _touchPress(false)
, _touchMove(false)
, _touchRightButton(false)
, _menu(0)
{
int32 x, y, w; int32 x, y, w;
if (App::wnd()->getVideoCoords(video, x, y, w)) { if (App::wnd()->getVideoCoords(video, x, y, w)) {
iX = anim::ivalue(x); iX = anim::ivalue(x);
@ -279,7 +307,7 @@ void LayerWidget::keyPressEvent(QKeyEvent *e) {
photo->full->pix().toImage().save(file, "JPG"); photo->full->pix().toImage().save(file, "JPG");
} }
} }
} else if (photo && photo->full->loaded() && (e->key() == Qt::Key_Copy || e->key() == Qt::Key_C && e->modifiers().testFlag(Qt::ControlModifier))) { } else if (photo && photo->full->loaded() && (e->key() == Qt::Key_Copy || (e->key() == Qt::Key_C && e->modifiers().testFlag(Qt::ControlModifier)))) {
QApplication::clipboard()->setPixmap(photo->full->pix()); QApplication::clipboard()->setPixmap(photo->full->pix());
} }
} }
@ -304,7 +332,7 @@ void LayerWidget::contextMenuEvent(QContextMenuEvent *e) {
_menu->addAction(lang(lng_context_forward_image), this, SLOT(forwardMessage()))->setEnabled(true); _menu->addAction(lang(lng_context_forward_image), this, SLOT(forwardMessage()))->setEnabled(true);
} }
_menu->addAction(lang(lng_context_delete_image), this, SLOT(deleteMessage()))->setEnabled(true); _menu->addAction(lang(lng_context_delete_image), this, SLOT(deleteMessage()))->setEnabled(true);
} else if (App::self() && App::self()->photoId == photo->id || photo->chat && photo->chat->photoId == photo->id) { } else if ((App::self() && App::self()->photoId == photo->id) || (photo->chat && photo->chat->photoId == photo->id)) {
_menu->addAction(lang(lng_context_delete_image), this, SLOT(deleteMessage()))->setEnabled(true); _menu->addAction(lang(lng_context_delete_image), this, SLOT(deleteMessage()))->setEnabled(true);
} }
_menu->setAttribute(Qt::WA_DeleteOnClose); _menu->setAttribute(Qt::WA_DeleteOnClose);

View file

@ -19,7 +19,10 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include "localimageloader.h" #include "localimageloader.h"
#include <libexif/exif-data.h> #include <libexif/exif-data.h>
LocalImageLoaderPrivate::LocalImageLoaderPrivate(int32 currentUser, LocalImageLoader *loader, QThread *thread) : QObject(0), user(currentUser), loader(loader) { LocalImageLoaderPrivate::LocalImageLoaderPrivate(int32 currentUser, LocalImageLoader *loader, QThread *thread) : QObject(0)
, loader(loader)
, user(currentUser)
{
moveToThread(thread); moveToThread(thread);
connect(loader, SIGNAL(needToPrepare()), this, SLOT(prepareImages())); connect(loader, SIGNAL(needToPrepare()), this, SLOT(prepareImages()));
connect(this, SIGNAL(imageReady()), loader, SLOT(onImageReady())); connect(this, SIGNAL(imageReady()), loader, SLOT(onImageReady()));
@ -101,7 +104,7 @@ void LocalImageLoaderPrivate::prepareImages() {
filesize = 0; filesize = 0;
} }
if (img.isNull() && (type != ToPrepareDocument || !filesize) || type == ToPrepareAuto || img.isNull() && file.isEmpty() && data.isEmpty()) { // if could not decide what type if ((img.isNull() && (type != ToPrepareDocument || !filesize)) || type == ToPrepareAuto || (img.isNull() && file.isEmpty() && data.isEmpty())) { // if could not decide what type
{ {
QMutexLocker lock(loader->toPrepareMutex()); QMutexLocker lock(loader->toPrepareMutex());
ToPrepareMedias &list(loader->toPrepareMedias()); ToPrepareMedias &list(loader->toPrepareMedias());

View file

@ -25,11 +25,11 @@ enum ToPrepareMediaType {
}; };
struct ToPrepareMedia { struct ToPrepareMedia {
ToPrepareMedia(const QString &file, const PeerId &peer, ToPrepareMediaType t) : file(file), peer(peer), id(MTP::nonce<PhotoId>()), type(t) { ToPrepareMedia(const QString &file, const PeerId &peer, ToPrepareMediaType t) : id(MTP::nonce<PhotoId>()), file(file), peer(peer), type(t) {
} }
ToPrepareMedia(const QImage &img, const PeerId &peer, ToPrepareMediaType t) : img(img), peer(peer), id(MTP::nonce<PhotoId>()), type(t) { ToPrepareMedia(const QImage &img, const PeerId &peer, ToPrepareMediaType t) : id(MTP::nonce<PhotoId>()), img(img), peer(peer), type(t) {
} }
ToPrepareMedia(const QByteArray &data, const PeerId &peer, ToPrepareMediaType t) : data(data), peer(peer), id(MTP::nonce<PhotoId>()), type(t) { ToPrepareMedia(const QByteArray &data, const PeerId &peer, ToPrepareMediaType t) : id(MTP::nonce<PhotoId>()), data(data), peer(peer), type(t) {
} }
PhotoId id; PhotoId id;
QString file; QString file;
@ -43,7 +43,7 @@ typedef QList<ToPrepareMedia> ToPrepareMedias;
typedef QMap<int32, QByteArray> LocalFileParts; typedef QMap<int32, QByteArray> LocalFileParts;
struct ReadyLocalMedia { struct ReadyLocalMedia {
ReadyLocalMedia(ToPrepareMediaType type, const QString &file, const QString &filename, int32 filesize, const QByteArray &data, const uint64 &id, const uint64 &jpeg_id, const PeerId &peer, const MTPPhoto &photo, const PreparedPhotoThumbs &photoThumbs, const MTPDocument &document, const QByteArray &jpeg) : ReadyLocalMedia(ToPrepareMediaType type, const QString &file, const QString &filename, int32 filesize, const QByteArray &data, const uint64 &id, const uint64 &jpeg_id, const PeerId &peer, const MTPPhoto &photo, const PreparedPhotoThumbs &photoThumbs, const MTPDocument &document, const QByteArray &jpeg) :
type(type), file(file), filename(filename), filesize(filesize), data(data), id(id), jpeg_id(jpeg_id), peer(peer), photo(photo), photoThumbs(photoThumbs), document(document) { type(type), file(file), filename(filename), filesize(filesize), data(data), id(id), jpeg_id(jpeg_id), peer(peer), photo(photo), document(document), photoThumbs(photoThumbs) {
if (!jpeg.isEmpty()) { if (!jpeg.isEmpty()) {
int32 size = jpeg.size(); int32 size = jpeg.size();
for (int32 i = 0, part = 0; i < size; i += UploadPartSize, ++part) { for (int32 i = 0, part = 0; i < size; i += UploadPartSize, ++part) {

View file

@ -69,9 +69,8 @@ void debugLogWrite(const char *file, int32 line, const QString &v) {
debugLogStream->flush(); debugLogStream->flush();
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
OutputDebugString(reinterpret_cast<const wchar_t *>(msg.utf16())); OutputDebugString(reinterpret_cast<const wchar_t *>(msg.utf16()));
#endif #elif defined Q_OS_MAC
#ifdef Q_OS_MAC objc_outputDebugString(msg);
_outputDebugString(msg.toUtf8().constData());
#endif #endif
} }
} }
@ -118,9 +117,7 @@ void logsInit() {
if (mainLogStream) return; if (mainLogStream) return;
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
if (QDir(cWorkingDir()).absolutePath() == qsl("/")) { cForceWorkingDir(psAppDataPath());
cSetWorkingDir(cExeDir());
}
#endif #endif
QString oldDir = cWorkingDir(); QString oldDir = cWorkingDir();

View file

@ -45,8 +45,15 @@ int main(int argc, char *argv[]) {
DEBUG_LOG(("Application Info: ideal thread count: %1, using %2 connections per session").arg(QThread::idealThreadCount()).arg(cConnectionsInSession())); DEBUG_LOG(("Application Info: ideal thread count: %1, using %2 connections per session").arg(QThread::idealThreadCount()).arg(cConnectionsInSession()));
int result = 0;
{
Application app(argc, argv); Application app(argc, argv);
int result = App::quiting() ? 0 : app.exec(); if (!App::quiting()) {
result = app.exec();
}
}
psFinish();
DEBUG_LOG(("Application Info: Telegram done, result: %1").arg(result)); DEBUG_LOG(("Application Info: Telegram done, result: %1").arg(result));

View file

@ -260,9 +260,9 @@ MainWidget *TopBarWidget::main() {
return static_cast<MainWidget*>(parentWidget()); return static_cast<MainWidget*>(parentWidget());
} }
MainWidget::MainWidget(Window *window) : QWidget(window), profile(0), _dialogsWidth(st::dlgMinWidth), MainWidget::MainWidget(Window *window) : QWidget(window), failedObjId(0), _dialogsWidth(st::dlgMinWidth),
updPts(0), updDate(0), updQts(0), updSeq(0), updInited(false), failedObjId(0), dialogs(this), history(this), profile(0), _topBar(this), hider(0),
dialogs(this), history(this), onlineRequest(0), hider(0), _topBar(this) { updPts(0), updDate(0), updQts(0), updSeq(0), updInited(false), onlineRequest(0) {
setGeometry(QRect(0, st::titleHeight, App::wnd()->width(), App::wnd()->height() - st::titleHeight)); setGeometry(QRect(0, st::titleHeight, App::wnd()->width(), App::wnd()->height() - st::titleHeight));
connect(window, SIGNAL(resized(const QSize &)), this, SLOT(onParentResize(const QSize &))); connect(window, SIGNAL(resized(const QSize &)), this, SLOT(onParentResize(const QSize &)));
@ -272,7 +272,6 @@ MainWidget::MainWidget(Window *window) : QWidget(window), profile(0), _dialogsWi
connect(this, SIGNAL(peerPhotoChanged(PeerData *)), this, SIGNAL(dialogsUpdated())); connect(this, SIGNAL(peerPhotoChanged(PeerData *)), this, SIGNAL(dialogsUpdated()));
connect(&noUpdatesTimer, SIGNAL(timeout()), this, SLOT(getDifference())); connect(&noUpdatesTimer, SIGNAL(timeout()), this, SLOT(getDifference()));
connect(&onlineTimer, SIGNAL(timeout()), this, SLOT(setOnline())); connect(&onlineTimer, SIGNAL(timeout()), this, SLOT(setOnline()));
connect(window->windowHandle(), SIGNAL(windowStateChanged(Qt::WindowState)), this, SLOT(mainStateChanged(Qt::WindowState)));
connect(&onlineUpdater, SIGNAL(timeout()), this, SLOT(updateOnlineDisplay())); connect(&onlineUpdater, SIGNAL(timeout()), this, SLOT(updateOnlineDisplay()));
connect(this, SIGNAL(peerUpdated(PeerData*)), &history, SLOT(peerUpdated(PeerData*))); connect(this, SIGNAL(peerUpdated(PeerData*)), &history, SLOT(peerUpdated(PeerData*)));
connect(&_topBar, SIGNAL(clicked()), this, SLOT(onTopBarClick())); connect(&_topBar, SIGNAL(clicked()), this, SLOT(onTopBarClick()));
@ -358,7 +357,7 @@ void MainWidget::dialogsActivate() {
bool MainWidget::leaveChatFailed(PeerData *peer, const RPCError &e) { bool MainWidget::leaveChatFailed(PeerData *peer, const RPCError &e) {
if (e.type() == "CHAT_ID_INVALID") { // left this chat already if (e.type() == "CHAT_ID_INVALID") { // left this chat already
if (profile && profile->peer() == peer || profileStack.indexOf(peer) >= 0 || history.peer() == peer) { if ((profile && profile->peer() == peer) || profileStack.indexOf(peer) >= 0 || history.peer() == peer) {
showPeer(0); showPeer(0);
} }
dialogs.removePeer(peer); dialogs.removePeer(peer);
@ -370,7 +369,7 @@ bool MainWidget::leaveChatFailed(PeerData *peer, const RPCError &e) {
void MainWidget::deleteHistory(PeerData *peer, const MTPmessages_StatedMessage &result) { void MainWidget::deleteHistory(PeerData *peer, const MTPmessages_StatedMessage &result) {
sentFullDataReceived(0, result); sentFullDataReceived(0, result);
if (profile && profile->peer() == peer || profileStack.indexOf(peer) >= 0 || history.peer() == peer) { if ((profile && profile->peer() == peer) || profileStack.indexOf(peer) >= 0 || history.peer() == peer) {
showPeer(0); showPeer(0);
} }
dialogs.removePeer(peer); dialogs.removePeer(peer);
@ -398,7 +397,7 @@ void MainWidget::deleteHistoryAndContact(UserData *user, const MTPcontacts_Link
App::feedUsers(MTP_vector<MTPUser>(QVector<MTPUser>(1, d.vuser))); App::feedUsers(MTP_vector<MTPUser>(QVector<MTPUser>(1, d.vuser)));
App::feedUserLink(MTP_int(user->id & 0xFFFFFFFF), d.vmy_link, d.vforeign_link); App::feedUserLink(MTP_int(user->id & 0xFFFFFFFF), d.vmy_link, d.vforeign_link);
if (profile && profile->peer() == user || profileStack.indexOf(user) >= 0 || history.peer() == user) { if ((profile && profile->peer() == user) || profileStack.indexOf(user) >= 0 || history.peer() == user) {
showPeer(0); showPeer(0);
} }
dialogs.removePeer(user); dialogs.removePeer(user);
@ -472,7 +471,7 @@ void MainWidget::checkedHistory(PeerData *peer, const MTPmessages_Messages &resu
if (!v) return; if (!v) return;
if (v->isEmpty()) { if (v->isEmpty()) {
if (profile && profile->peer() == peer || profileStack.indexOf(peer) >= 0 || history.peer() == peer) { if ((profile && profile->peer() == peer) || profileStack.indexOf(peer) >= 0 || history.peer() == peer) {
showPeer(0); showPeer(0);
} }
dialogs.removePeer(peer); dialogs.removePeer(peer);
@ -496,16 +495,52 @@ void MainWidget::clearSelectedItems() {
history.onClearSelected(); history.onClearSelected();
} }
QRect MainWidget::rectForTitleAnim() const {
int w = width();
w -= history.x() + st::sysBtnDelta * 2 + st::sysCls.img.width() + st::sysRes.img.width() + st::sysMin.img.width();
return QRect(history.x(), 0, w, App::wnd()->getTitle()->height());
}
DialogsIndexed &MainWidget::contactsList() { DialogsIndexed &MainWidget::contactsList() {
return dialogs.contactsList(); return dialogs.contactsList();
} }
void MainWidget::sendMessage(History *hist, const QString &text) {
readServerHistory(hist);
QString msg = history.prepareMessage(text);
if (!msg.isEmpty()) {
MsgId newId = clientMsgId();
uint64 randomId = MTP::nonce<uint64>();
App::historyRegRandom(randomId, newId);
MTPstring msgText(MTP_string(msg));
hist->addToBack(MTP_message(MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(hist->peer->id), MTP_bool(true), MTP_bool(true), MTP_int(unixtime()), msgText, MTP_messageMediaEmpty()));
historyToDown(hist);
if (history.peer() == hist->peer) {
history.peerMessagesUpdated();
}
MTP::send(MTPmessages_SendMessage(hist->peer->input, msgText, MTP_long(randomId)), App::main()->rpcDone(&MainWidget::sentDataReceived, randomId));
}
}
void MainWidget::readServerHistory(History *hist, bool force) {
if (!hist || (!force && (!hist->unreadCount || !hist->unreadLoaded))) return;
ReadRequests::const_iterator i = _readRequests.constFind(hist->peer);
if (i == _readRequests.cend()) {
hist->inboxRead(true);
_readRequests.insert(hist->peer, MTP::send(MTPmessages_ReadHistory(hist->peer->input, MTP_int(0), MTP_int(0)), rpcDone(&MainWidget::partWasRead, hist->peer)));
}
}
void MainWidget::partWasRead(PeerData *peer, const MTPmessages_AffectedHistory &result) {
const MTPDmessages_affectedHistory &d(result.c_messages_affectedHistory());
App::main()->updUpdated(d.vpts.v, 0, 0, d.vseq.v);
int32 offset = d.voffset.v;
if (!MTP::authedId() || offset <= 0) {
_readRequests.remove(peer);
} else {
_readRequests[peer] = MTP::send(MTPmessages_ReadHistory(peer->input, MTP_int(0), MTP_int(offset)), rpcDone(&MainWidget::partWasRead, peer));
}
}
void MainWidget::videoLoadProgress(mtpFileLoader *loader) { void MainWidget::videoLoadProgress(mtpFileLoader *loader) {
VideoData *video = App::video(loader->objId()); VideoData *video = App::video(loader->objId());
if (video->loader) { if (video->loader) {
@ -619,7 +654,7 @@ void MainWidget::onParentResize(const QSize &newSize) {
} }
void MainWidget::updateOnlineDisplay() { void MainWidget::updateOnlineDisplay() {
history.updateOnlineDisplay(history.x(), width() - history.x() - st::sysBtnDelta * 2 - st::sysCls.img.width() - st::sysRes.img.width() - st::sysMin.img.width()); history.updateOnlineDisplay(history.x(), width() - history.x() - st::sysBtnDelta * 2 - st::sysCls.img.pxWidth() - st::sysRes.img.pxWidth() - st::sysMin.img.pxWidth());
if (profile) profile->updateOnlineDisplay(); if (profile) profile->updateOnlineDisplay();
if (App::wnd()->settingsWidget()) App::wnd()->settingsWidget()->updateOnlineDisplay(); if (App::wnd()->settingsWidget()) App::wnd()->settingsWidget()->updateOnlineDisplay();
} }
@ -1077,7 +1112,7 @@ void MainWidget::onTopBarClick() {
} }
void MainWidget::onPeerShown(PeerData *peer) { void MainWidget::onPeerShown(PeerData *peer) {
if (profile || peer && peer->id) { if (profile || (peer && peer->id)) {
_topBar.show(); _topBar.show();
} else { } else {
_topBar.hide(); _topBar.hide();

View file

@ -25,7 +25,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include "profilewidget.h" #include "profilewidget.h"
class Window; class Window;
class DialogRow; struct DialogRow;
class MainWidget; class MainWidget;
class TopBarWidget : public QWidget, public Animated { class TopBarWidget : public QWidget, public Animated {
@ -187,10 +187,12 @@ public:
void deleteSelectedItems(); void deleteSelectedItems();
void clearSelectedItems(); void clearSelectedItems();
QRect rectForTitleAnim() const;
DialogsIndexed &contactsList(); DialogsIndexed &contactsList();
void sendMessage(History *history, const QString &text);
void readServerHistory(History *history, bool force = true);
~MainWidget(); ~MainWidget();
signals: signals:
@ -233,6 +235,8 @@ public slots:
private: private:
void partWasRead(PeerData *peer, const MTPmessages_AffectedHistory &result);
uint64 failedObjId; uint64 failedObjId;
QString failedFileName; QString failedFileName;
void loadFailed(mtpFileLoader *loader, bool started, const char *retrySlot); void loadFailed(mtpFileLoader *loader, bool started, const char *retrySlot);
@ -278,4 +282,7 @@ private:
QSet<PeerData*> updateNotifySettingPeers; QSet<PeerData*> updateNotifySettingPeers;
QTimer updateNotifySettingTimer; QTimer updateNotifySettingTimer;
typedef QMap<PeerData*, mtpRequestId> ReadRequests;
ReadRequests _readRequests;
}; };

View file

@ -483,7 +483,7 @@ namespace MTP {
if (!started) return; if (!started) return;
int32 m = mainSession->getDC(); int32 m = mainSession->getDC();
if (!dc || m == dc || m && fromZeroOnly) return; if (!dc || m == dc || (m && fromZeroOnly)) return;
mtpSetDC(dc); mtpSetDC(dc);
mainSession = _mtp_internal::getSession(dc); mainSession = _mtp_internal::getSession(dc);
} }

View file

@ -517,7 +517,7 @@ namespace {
} }
MTPabstractTcpConnection::MTPabstractTcpConnection() : MTPabstractTcpConnection::MTPabstractTcpConnection() :
currentPos((char*)shortBuffer), packetRead(0), packetLeft(0), readingToShort(true), packetNum(0) { packetNum(0), packetRead(0), packetLeft(0), readingToShort(true), currentPos((char*)shortBuffer) {
} }
void MTPabstractTcpConnection::socketRead() { void MTPabstractTcpConnection::socketRead() {
@ -1033,21 +1033,21 @@ void MTProtoConnectionPrivate::createConn() {
MTProtoConnectionPrivate::MTProtoConnectionPrivate(QThread *thread, MTProtoConnection *owner, MTPSessionData *data, uint32 _dc) MTProtoConnectionPrivate::MTProtoConnectionPrivate(QThread *thread, MTProtoConnection *owner, MTPSessionData *data, uint32 _dc)
: QObject(0) : QObject(0)
, _state(MTProtoConnection::Disconnected)
, dc(_dc) , dc(_dc)
, _owner(owner)
, conn(0) , conn(0)
, retryTimeout(1) , retryTimeout(1)
, oldConnection(true)
, receiveDelay(MinReceiveDelay) , receiveDelay(MinReceiveDelay)
, firstSentAt(-1) , firstSentAt(-1)
, oldConnection(true) , ackRequest(MTP_msgs_ack(MTPVector<MTPlong>()))
, _state(MTProtoConnection::Disconnected)
, _owner(owner)
, sessionData(data)
, keyId(0)
, pingId(0) , pingId(0)
, toSendPingId(0) , toSendPingId(0)
, pingMsgId(0) , pingMsgId(0)
, restarted(false) , restarted(false)
, ackRequest(MTP_msgs_ack(MTPVector<MTPlong>())) , keyId(0)
, sessionData(data)
, myKeyLock(false) , myKeyLock(false)
, authKeyData(0) { , authKeyData(0) {
@ -1405,7 +1405,7 @@ void MTProtoConnectionPrivate::onReceivedSome() {
int32 ms = getms() - firstSentAt; int32 ms = getms() - firstSentAt;
DEBUG_LOG(("MTP Info: response in %1ms, receiveDelay: %2ms").arg(ms).arg(receiveDelay)); DEBUG_LOG(("MTP Info: response in %1ms, receiveDelay: %2ms").arg(ms).arg(receiveDelay));
if (ms > 0 && ms * 2 < receiveDelay) receiveDelay = qMax(ms * 2, int32(MinReceiveDelay)); if (ms > 0 && ms * 2 < int32(receiveDelay)) receiveDelay = qMax(ms * 2, int32(MinReceiveDelay));
firstSentAt = -1; firstSentAt = -1;
} }
} }
@ -1502,7 +1502,7 @@ void MTProtoConnectionPrivate::handleReceived() {
uint32 seqNo = *(uint32*)&data[6], msgLen = *(uint32*)&data[7]; uint32 seqNo = *(uint32*)&data[6], msgLen = *(uint32*)&data[7];
bool needAck = (seqNo & 0x01); bool needAck = (seqNo & 0x01);
if (dataBuffer.size() < msgLen + 8 * sizeof(mtpPrime) || (msgLen & 0x03)) { if (uint32(dataBuffer.size()) < msgLen + 8 * sizeof(mtpPrime) || (msgLen & 0x03)) {
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();
@ -1987,7 +1987,7 @@ int32 MTProtoConnectionPrivate::handleOneReceived(const mtpPrime *from, const mt
} }
mtpRequestId requestId = wasSent(reqMsgId.v); mtpRequestId requestId = wasSent(reqMsgId.v);
if (requestId && requestId != 0xFFFFFFFF) { if (requestId && requestId != mtpRequestId(0xFFFFFFFF)) {
QWriteLocker locker(sessionData->haveReceivedMutex()); QWriteLocker locker(sessionData->haveReceivedMutex());
sessionData->haveReceivedMap().insert(requestId, response); // save rpc_result for processing in main mtp thread sessionData->haveReceivedMap().insert(requestId, response); // save rpc_result for processing in main mtp thread
} else { } else {
@ -2899,12 +2899,12 @@ bool MTProtoConnectionPrivate::sendRequest(mtpRequest &request, bool needAnyResp
} }
mtpRequestId MTProtoConnectionPrivate::wasSent(mtpMsgId msgId) const { mtpRequestId MTProtoConnectionPrivate::wasSent(mtpMsgId msgId) const {
if (msgId == pingMsgId) return 0xFFFFFFFF; if (msgId == pingMsgId) return mtpRequestId(0xFFFFFFFF);
{ {
QReadLocker locker(sessionData->haveSentMutex()); QReadLocker locker(sessionData->haveSentMutex());
const mtpRequestMap &haveSent(sessionData->haveSentMap()); const mtpRequestMap &haveSent(sessionData->haveSentMap());
mtpRequestMap::const_iterator i = haveSent.constFind(msgId); mtpRequestMap::const_iterator i = haveSent.constFind(msgId);
if (i != haveSent.cend()) return i.value()->requestId || 0xFFFFFFFF; if (i != haveSent.cend()) return i.value()->requestId ? i.value()->requestId : mtpRequestId(0xFFFFFFFF);
} }
{ {
QReadLocker locker(sessionData->toResendMutex()); QReadLocker locker(sessionData->toResendMutex());

View file

@ -84,7 +84,7 @@ namespace {
continue; continue;
} }
uint32 dataLen = *(const uint32*)decrypted.constData(); uint32 dataLen = *(const uint32*)decrypted.constData();
if (dataLen > decrypted.size() || dataLen <= fullDataLen - 16 || dataLen < 4) { if (dataLen > uint32(decrypted.size()) || dataLen <= fullDataLen - 16 || dataLen < 4) {
LOG(("MTP Error: bad decrypted part size: %1, fullDataLen: %2, decrypted size: %3").arg(dataLen).arg(fullDataLen).arg(decrypted.size())); LOG(("MTP Error: bad decrypted part size: %1, fullDataLen: %2, decrypted size: %3").arg(dataLen).arg(fullDataLen).arg(decrypted.size()));
continue; continue;
} }
@ -200,7 +200,7 @@ namespace {
DEBUG_LOG(("MTP Info: keys file opened for reading")); DEBUG_LOG(("MTP Info: keys file opened for reading"));
int32 oldFound = readAuthKeys(keysFile); int32 oldFound = readAuthKeys(keysFile);
if (gDCOptions.isEmpty() || mainDC && gDCOptions.find(mainDC) == gDCOptions.cend()) { // load first dc info if (gDCOptions.isEmpty() || (mainDC && gDCOptions.find(mainDC) == gDCOptions.cend())) { // load first dc info
gDCOptions.insert(1, mtpDcOption(1, "", cFirstDCIp(), cFirstDCPort())); gDCOptions.insert(1, mtpDcOption(1, "", cFirstDCIp(), cFirstDCPort()));
userId = 0; userId = 0;
mainDC = 0; mainDC = 0;

View file

@ -34,8 +34,10 @@ namespace {
LoaderQueues queues; LoaderQueues queues;
} }
mtpFileLoader::mtpFileLoader(int32 dc, const int64 &volume, int32 local, const int64 &secret) : next(0), prev(0), inQueue(false), complete(false), requestId(0), priority(0), initialSize(0), mtpFileLoader::mtpFileLoader(int32 dc, const int64 &volume, int32 local, const int64 &secret) : prev(0), next(0),
dc(dc), volume(volume), local(local), secret(secret), size(0), type(MTP_storage_fileUnknown()), locationType(0), id(0), access(0) { priority(0), inQueue(false), complete(false), requestId(0),
dc(dc), locationType(0), volume(volume), local(local), secret(secret),
id(0), access(0), initialSize(0), size(0), type(MTP_storage_fileUnknown()) {
LoaderQueues::iterator i = queues.find(dc); LoaderQueues::iterator i = queues.find(dc);
if (i == queues.cend()) { if (i == queues.cend()) {
i = queues.insert(dc, mtpFileLoaderQueue()); i = queues.insert(dc, mtpFileLoaderQueue());
@ -43,8 +45,10 @@ mtpFileLoader::mtpFileLoader(int32 dc, const int64 &volume, int32 local, const i
queue = &i.value(); queue = &i.value();
} }
mtpFileLoader::mtpFileLoader(int32 dc, const uint64 &id, const uint64 &access, mtpTypeId locType, const QString &to, int32 size) : next(0), prev(0), inQueue(false), complete(false), requestId(0), priority(0), mtpFileLoader::mtpFileLoader(int32 dc, const uint64 &id, const uint64 &access, mtpTypeId locType, const QString &to, int32 size) : prev(0), next(0),
dc(dc), id(id), access(access), type(MTP_storage_fileUnknown()), locationType(locType), file(to), initialSize(size) { priority(0), inQueue(false), complete(false), requestId(0),
dc(dc), locationType(locType),
id(id), access(access), file(to), initialSize(size), type(MTP_storage_fileUnknown()) {
LoaderQueues::iterator i = queues.find(MTP::dld + dc); LoaderQueues::iterator i = queues.find(MTP::dld + dc);
if (i == queues.cend()) { if (i == queues.cend()) {
i = queues.insert(MTP::dld + dc, mtpFileLoaderQueue()); i = queues.insert(MTP::dld + dc, mtpFileLoaderQueue());
@ -145,7 +149,7 @@ void mtpFileLoader::partLoaded(int32 offset, const MTPupload_File &result) {
const string &bytes(d.vbytes.c_string().v); const string &bytes(d.vbytes.c_string().v);
if (bytes.size()) { if (bytes.size()) {
if (file.isOpen()) { if (file.isOpen()) {
if (file.write(bytes.data(), bytes.size()) != bytes.size()) { if (file.write(bytes.data(), bytes.size()) != qint64(bytes.size())) {
return finishFail(); return finishFail();
} }
} else { } else {
@ -318,7 +322,7 @@ bool mtpFileLoader::loading() const {
} }
void mtpFileLoader::started(bool loadFirst, bool prior) { void mtpFileLoader::started(bool loadFirst, bool prior) {
if (queue->queries >= MaxFileQueries && (!loadFirst || !prior) || complete) return; if ((queue->queries >= MaxFileQueries && (!loadFirst || !prior)) || complete) return;
loadPart(); loadPart();
} }

View file

@ -457,7 +457,7 @@ class RPCBindedDoneHandlerOwned : public RPCOwnedDoneHandler { // done(b, result
typedef TReturn (TReceiver::*CallbackType)(T, const TResponse &); typedef TReturn (TReceiver::*CallbackType)(T, const TResponse &);
public: public:
RPCBindedDoneHandlerOwned(T b, TReceiver *receiver, CallbackType onDone) : RPCOwnedDoneHandler(receiver), _b(b), _onDone(onDone) { RPCBindedDoneHandlerOwned(T b, TReceiver *receiver, CallbackType onDone) : RPCOwnedDoneHandler(receiver), _onDone(onDone), _b(b) {
} }
virtual void operator()(mtpRequestId requestId, const mtpPrime *from, const mtpPrime *end) const { virtual void operator()(mtpRequestId requestId, const mtpPrime *from, const mtpPrime *end) const {
if (_owner) (static_cast<TReceiver*>(_owner)->*_onDone)(_b, TResponse(from, end)); if (_owner) (static_cast<TReceiver*>(_owner)->*_onDone)(_b, TResponse(from, end));
@ -589,7 +589,7 @@ class RPCBindedFailHandlerOwned : public RPCOwnedFailHandler { // fail(b, error)
typedef bool (TReceiver::*CallbackType)(T, const RPCError &); typedef bool (TReceiver::*CallbackType)(T, const RPCError &);
public: public:
RPCBindedFailHandlerOwned(T b, TReceiver *receiver, CallbackType onFail) : RPCOwnedFailHandler(receiver), _b(b), _onFail(onFail) { RPCBindedFailHandlerOwned(T b, TReceiver *receiver, CallbackType onFail) : RPCOwnedFailHandler(receiver), _onFail(onFail), _b(b) {
} }
virtual bool operator()(mtpRequestId requestId, const RPCError &e) const { virtual bool operator()(mtpRequestId requestId, const RPCError &e) const {
return _owner ? (static_cast<TReceiver*>(_owner)->*_onFail)(_b, e) : true; return _owner ? (static_cast<TReceiver*>(_owner)->*_onFail)(_b, e) : true;
@ -623,7 +623,7 @@ class RPCBindedFailHandlerOwnedNo : public RPCOwnedFailHandler { // fail(b)
typedef bool (TReceiver::*CallbackType)(T); typedef bool (TReceiver::*CallbackType)(T);
public: public:
RPCBindedFailHandlerOwnedNo(T b, TReceiver *receiver, CallbackType onFail) : RPCOwnedFailHandler(receiver), _b(b), _onFail(onFail) { RPCBindedFailHandlerOwnedNo(T b, TReceiver *receiver, CallbackType onFail) : RPCOwnedFailHandler(receiver), _onFail(onFail), _b(b) {
} }
virtual bool operator()(mtpRequestId requestId, const RPCError &e) const { virtual bool operator()(mtpRequestId requestId, const RPCError &e) const {
return _owner ? (static_cast<TReceiver*>(_owner)->*_onFail)(_b) : true; return _owner ? (static_cast<TReceiver*>(_owner)->*_onFail)(_b) : true;
@ -640,7 +640,7 @@ class RPCBindedFailHandlerOwnedNoReq : public RPCOwnedFailHandler { // fail(b, r
typedef bool (TReceiver::*CallbackType)(T, mtpRequestId); typedef bool (TReceiver::*CallbackType)(T, mtpRequestId);
public: public:
RPCBindedFailHandlerOwnedNoReq(T b, TReceiver *receiver, CallbackType onFail) : RPCOwnedFailHandler(receiver), _b(b), _onFail(onFail) { RPCBindedFailHandlerOwnedNoReq(T b, TReceiver *receiver, CallbackType onFail) : RPCOwnedFailHandler(receiver), _onFail(onFail), _b(b) {
} }
virtual bool operator()(mtpRequestId requestId, const RPCError &e) const { virtual bool operator()(mtpRequestId requestId, const RPCError &e) const {
return _owner ? (static_cast<TReceiver*>(_owner)->*_onFail)(_b, requestId) : true; return _owner ? (static_cast<TReceiver*>(_owner)->*_onFail)(_b, requestId) : true;

View file

@ -63,7 +63,7 @@ void MTPSessionData::clear() {
} }
MTProtoSession::MTProtoSession() : data(this), dc(0), dcId(0), msSendCall(0), msWait(0) { MTProtoSession::MTProtoSession() : data(this), dcId(0), dc(0), msSendCall(0), msWait(0) {
} }
void MTProtoSession::start(int32 dcenter, uint32 connects) { void MTProtoSession::start(int32 dcenter, uint32 connects) {
@ -158,7 +158,7 @@ void MTProtoSession::checkRequestsByTimer() {
stateRequestIds.push_back(MTP_long(i.key())); stateRequestIds.push_back(MTP_long(i.key()));
} }
} }
} else if (unixtime() > (uint32)(i.key() >> 32) + MTPContainerLives) { } else if (unixtime() > (int32)(i.key() >> 32) + MTPContainerLives) {
removingIds.reserve(haveSentCount); removingIds.reserve(haveSentCount);
removingIds.push_back(i.key()); removingIds.push_back(i.key());
} }
@ -216,7 +216,7 @@ int32 MTProtoSession::requestState(mtpRequestId requestId) const {
result = MTP::RequestConnecting; result = MTP::RequestConnecting;
} }
} else if (s < 0) { } else if (s < 0) {
if (result < 0 && s > result || result == MTP::RequestSent) { if ((result < 0 && s > result) || result == MTP::RequestSent) {
result = s; result = s;
} }
} }

View file

@ -27,9 +27,9 @@ class MTPSessionData {
public: public:
MTPSessionData(MTProtoSession *creator) MTPSessionData(MTProtoSession *creator)
: _session(0), _salt(0), fakeRequestId(-2000000000) : _session(0), _salt(0)
, _messagesSent(0), keyChecked(false) , _messagesSent(0), fakeRequestId(-2000000000)
, _owner(creator) { , _owner(creator), keyChecked(false) {
} }
void setSession(uint64 session) { void setSession(uint64 session) {

View file

@ -619,7 +619,7 @@ bool ProfileInner::animStep(float64 ms) {
} }
bool ProfileInner::getPhotoCoords(PhotoData *photo, int32 &x, int32 &y, int32 &w) const { bool ProfileInner::getPhotoCoords(PhotoData *photo, int32 &x, int32 &y, int32 &w) const {
if (_peerUser && photo->id == _peerUser->photoId || _peerChat && photo->id == _peerChat->photoId) { if ((_peerUser && photo->id == _peerUser->photoId) || (_peerChat && photo->id == _peerChat->photoId)) {
x = _left; x = _left;
y = st::profilePadding.top(); y = st::profilePadding.top();
w = st::setPhotoSize; w = st::setPhotoSize;
@ -704,8 +704,11 @@ void ProfileInner::showAll() {
resize(width(), h); resize(width(), h);
} }
ProfileWidget::ProfileWidget(QWidget *parent, const PeerData *peer) : QWidget(parent), ProfileWidget::ProfileWidget(QWidget *parent, const PeerData *peer) : QWidget(parent)
_inner(this, &_scroll, peer), _scroll(this, st::setScroll), _showing(false) { , _scroll(this, st::setScroll)
, _inner(this, &_scroll, peer)
, _showing(false)
{
_scroll.setWidget(&_inner); _scroll.setWidget(&_inner);
_scroll.move(0, 0); _scroll.move(0, 0);
_inner.move(0, 0); _inner.move(0, 0);
@ -761,10 +764,10 @@ void ProfileWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth)
p.drawPixmap(a_coord.current(), 0, _animTopBarCache); p.drawPixmap(a_coord.current(), 0, _animTopBarCache);
} else { } else {
p.setOpacity(st::topBarBackAlpha + (1 - st::topBarBackAlpha) * over); p.setOpacity(st::topBarBackAlpha + (1 - st::topBarBackAlpha) * over);
p.drawPixmap(QPoint(st::topBarBackPadding.left(), (st::topBarHeight - st::topBarBackImg.height()) / 2), App::sprite(), st::topBarBackImg); p.drawPixmap(QPoint(st::topBarBackPadding.left(), (st::topBarHeight - st::topBarBackImg.pxHeight()) / 2), App::sprite(), st::topBarBackImg);
p.setFont(st::topBarBackFont->f); p.setFont(st::topBarBackFont->f);
p.setPen(st::topBarBackColor->p); p.setPen(st::topBarBackColor->p);
p.drawText(st::topBarBackPadding.left() + st::topBarBackImg.width() + st::topBarBackPadding.right(), (st::topBarHeight - st::titleFont->height) / 2 + st::titleFont->ascent, lang(peer()->chat ? lng_profile_group_info : lng_profile_info)); p.drawText(st::topBarBackPadding.left() + st::topBarBackImg.pxWidth() + st::topBarBackPadding.right(), (st::topBarHeight - st::titleFont->height) / 2 + st::titleFont->ascent, lang(peer()->chat ? lng_profile_group_info : lng_profile_info));
} }
} }

File diff suppressed because it is too large Load diff

View file

@ -151,10 +151,12 @@ public slots:
protected: protected:
void psNotIdle() const;
bool posInited; bool posInited;
QSystemTrayIcon *trayIcon; QSystemTrayIcon *trayIcon;
QMenu *trayIconMenu; QMenu *trayIconMenu;
QImage icon16, icon32, icon256; QImage icon256;
virtual void setupTrayIcon() { virtual void setupTrayIcon() {
} }
@ -265,3 +267,4 @@ void psExecTelegram();
void psPostprocessFile(const QString &name); void psPostprocessFile(const QString &name);
void psOpenFile(const QString &name, bool openWith = false); void psOpenFile(const QString &name, bool openWith = false);
void psShowInFolder(const QString &name); void psShowInFolder(const QString &name);
void psFinish();

View file

@ -24,14 +24,16 @@ public:
PsMacWindowPrivate(); PsMacWindowPrivate();
void setWindowBadge(const char *utf8str); void setWindowBadge(const QString &str);
void startBounce(); void startBounce();
void holdOnTop(WId winId); void holdOnTop(WId winId);
void showOverAll(WId winId); void showOverAll(WId winId);
void activateWnd(WId winId); void activateWnd(WId winId);
void showNotify(unsigned long long peer, const char *utf8title, const char *subtitle, const char *utf8msg); void showNotify(uint64 peer, const QString &title, const QString &subtitle, const QString &msg);
void clearNotifies(unsigned long long peer = 0); void clearNotifies(uint64 peer = 0);
void enableShadow(WId winId);
virtual void activeSpaceChanged() { virtual void activeSpaceChanged() {
} }
@ -46,6 +48,20 @@ public:
}; };
void _debugShowAlert(const char *utf8str); void objc_debugShowAlert(const QString &str);
void _outputDebugString(const char *utf8str); void objc_outputDebugString(const QString &str);
int64 _idleTime(); int64 objc_idleTime();
void objc_showInFinder(const QString &file, const QString &path);
void objc_openFile(const QString &file, bool openwith);
void objc_finish();
bool objc_execUpdater();
void objc_execTelegram();
void objc_activateProgram();
bool objc_moveFile(const QString &from, const QString &to);
void objc_deleteDir(const QString &dir);
QString objc_appDataPath();
QString objc_currentCountry();
QString objc_currentLang();

View file

@ -18,9 +18,33 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include "stdafx.h" #include "stdafx.h"
#include "pspecific_mac_p.h" #include "pspecific_mac_p.h"
#include <AppKit/AppKit.h> #include "lang.h"
#include <Cocoa/Cocoa.h> #include <Cocoa/Cocoa.h>
#include <IOKit/IOKitLib.h> #include <IOKit/IOKitLib.h>
#include <CoreFoundation/CFURL.h>
class QNSString {
public:
QNSString(const QString &str) : _str([NSString stringWithUTF8String:str.toUtf8().constData()]) {
}
NSString *s() {
return _str;
}
private:
NSString *_str;
};
typedef QMap<LangKey, QNSString> ObjcLang;
ObjcLang objcLang;
QNSString objc_lang(LangKey key) {
ObjcLang::const_iterator i = objcLang.constFind(key);
if (i == objcLang.cend()) {
i = objcLang.insert(key, lang(key));
}
return i.value();
}
@interface ObserverHelper : NSObject { @interface ObserverHelper : NSObject {
} }
@ -57,7 +81,9 @@ public:
} }
void onNotifyReply(NSUserNotification *notification) { void onNotifyReply(NSUserNotification *notification) {
// notification.response NSNumber *peerObj = [[notification userInfo] objectForKey:@"peer"];
unsigned long long peerLong = [peerObj unsignedLongLongValue];
wnd->notifyReplied(peerLong, [[[notification response] string] UTF8String]);
} }
~PsMacWindowData() { ~PsMacWindowData() {
@ -99,6 +125,11 @@ public:
} }
- (void) userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification { - (void) userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification {
NSNumber *instObj = [[notification userInfo] objectForKey:@"inst"];
unsigned long long instLong = [instObj unsignedLongLongValue];
if (instLong != cInstance()) { // other app instance notification
return;
}
if (notification.activationType == NSUserNotificationActivationTypeReplied){ if (notification.activationType == NSUserNotificationActivationTypeReplied){
wnd->data->onNotifyReply(notification); wnd->data->onNotifyReply(notification);
} else if (notification.activationType == NSUserNotificationActivationTypeContentsClicked) { } else if (notification.activationType == NSUserNotificationActivationTypeContentsClicked) {
@ -119,10 +150,8 @@ PsMacWindowPrivate::PsMacWindowPrivate() : data(new PsMacWindowData(this)) {
[center setDelegate:data->notifyHandler]; [center setDelegate:data->notifyHandler];
} }
void PsMacWindowPrivate::setWindowBadge(const char *utf8str) { void PsMacWindowPrivate::setWindowBadge(const QString &str) {
NSString *badgeString = [[NSString alloc] initWithUTF8String:utf8str]; [[NSApp dockTile] setBadgeLabel:QNSString(str).s()];
[[NSApp dockTile] setBadgeLabel:badgeString];
[badgeString release];
} }
void PsMacWindowPrivate::startBounce() { void PsMacWindowPrivate::startBounce() {
@ -146,26 +175,16 @@ void PsMacWindowPrivate::activateWnd(WId winId) {
[wnd orderFront:wnd]; [wnd orderFront:wnd];
} }
void PsMacWindowPrivate::showNotify(unsigned long long peer, const char *utf8title, const char *utf8subtitle, const char *utf8msg) { void PsMacWindowPrivate::showNotify(uint64 peer, const QString &title, const QString &subtitle, const QString &msg) {
NSUserNotification *notification = [[NSUserNotification alloc] init]; NSUserNotification *notification = [[NSUserNotification alloc] init];
NSDictionary *uinfo = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithUnsignedLongLong:peer],@"peer",nil]; [notification setUserInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedLongLong:peer],@"peer",[NSNumber numberWithUnsignedLongLong:cInstance()],@"inst",nil]];
[notification setUserInfo:uinfo];
[uinfo release];
NSString *title = [[NSString alloc] initWithUTF8String:utf8title]; [notification setTitle:QNSString(title).s()];
[notification setTitle:title]; [notification setSubtitle:QNSString(subtitle).s()];
[title release]; [notification setInformativeText:QNSString(msg).s()];
NSString *subtitle = [[NSString alloc] initWithUTF8String:utf8subtitle]; [notification setHasReplyButton:YES];
[notification setSubtitle:subtitle];
[subtitle release];
NSString *msg = [[NSString alloc] initWithUTF8String:utf8msg];
[notification setInformativeText:msg];
[msg release];
// [notification setHasReplyButton:YES];
[notification setSoundName:nil]; [notification setSoundName:nil];
@ -175,6 +194,11 @@ void PsMacWindowPrivate::showNotify(unsigned long long peer, const char *utf8tit
[notification release]; [notification release];
} }
void PsMacWindowPrivate::enableShadow(WId winId) {
// [[(NSView*)winId window] setStyleMask:NSBorderlessWindowMask];
// [[(NSView*)winId window] setHasShadow:YES];
}
void PsMacWindowPrivate::clearNotifies(unsigned long long peer) { void PsMacWindowPrivate::clearNotifies(unsigned long long peer) {
NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter]; NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter];
if (peer) { if (peer) {
@ -189,25 +213,19 @@ void PsMacWindowPrivate::clearNotifies(unsigned long long peer) {
} }
} }
void _debugShowAlert(const char *utf8str) { void objc_debugShowAlert(const QString &str) {
NSString *text = [[NSString alloc] initWithUTF8String: utf8str]; [[NSAlert alertWithMessageText:@"Debug Message" defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:@"%@", QNSString(str).s()] runModal];
NSAlert *alert = [NSAlert alertWithMessageText:@"Debug Message" defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:@"%@", text];
[alert runModal];
[alert release];
[text release];
} }
void _outputDebugString(const char *utf8str) { void objc_outputDebugString(const QString &str) {
NSString *text = [[NSString alloc] initWithUTF8String:utf8str]; NSLog(@"%@", QNSString(str).s());
NSLog(@"%@", text);
[text release];
} }
PsMacWindowPrivate::~PsMacWindowPrivate() { PsMacWindowPrivate::~PsMacWindowPrivate() {
delete data; delete data;
} }
int64 _idleTime() { // taken from https://github.com/trueinteractions/tint/issues/53 int64 objc_idleTime() { // taken from https://github.com/trueinteractions/tint/issues/53
CFMutableDictionaryRef properties = 0; CFMutableDictionaryRef properties = 0;
CFTypeRef obj; CFTypeRef obj;
mach_port_t masterPort; mach_port_t masterPort;
@ -256,3 +274,391 @@ int64 _idleTime() { // taken from https://github.com/trueinteractions/tint/issue
IOObjectRelease(iter); IOObjectRelease(iter);
return (result == err) ? -1 : int64(result); return (result == err) ? -1 : int64(result);
} }
void objc_showInFinder(const QString &file, const QString &path) {
[[NSWorkspace sharedWorkspace] selectFile:QNSString(file).s() inFileViewerRootedAtPath:QNSString(path).s()];
}
@interface NSURL(CompareUrls)
- (BOOL) isEquivalent:(NSURL *)aURL;
@end
@implementation NSURL(CompareUrls)
- (BOOL) isEquivalent:(NSURL *)aURL {
if ([self isEqual:aURL]) return YES;
if ([[self scheme] caseInsensitiveCompare:[aURL scheme]] != NSOrderedSame) return NO;
if ([[self host] caseInsensitiveCompare:[aURL host]] != NSOrderedSame) return NO;
if ([[self path] compare:[aURL path]] != NSOrderedSame) return NO;
if ([[self port] compare:[aURL port]] != NSOrderedSame) return NO;
if ([[self query] compare:[aURL query]] != NSOrderedSame) return NO;
return YES;
}
@end
@interface ChooseApplicationDelegate : NSObject<NSOpenSavePanelDelegate> {
}
- (id) init:(NSArray *)recommendedApps withPanel:(NSOpenPanel *)creator withSelector:(NSPopUpButton *)menu withGood:(NSTextField *)goodLabel withBad:(NSTextField *)badLabel withIcon:(NSImageView *)badIcon withAccessory:(NSView *)acc;
- (BOOL) panel:(id)sender shouldEnableURL:(NSURL *)url;
- (void) panelSelectionDidChange:(id)sender;
- (void) menuDidClose;
- (void) dealloc;
@end
@implementation ChooseApplicationDelegate {
BOOL onlyRecommended;
NSArray *apps;
NSOpenPanel *panel;
NSPopUpButton *selector;
NSTextField *good, *bad;
NSImageView *icon;
NSString *recom;
NSView *accessory;
}
- (id) init:(NSArray *)recommendedApps withPanel:(NSOpenPanel *)creator withSelector:(NSPopUpButton *)menu withGood:(NSTextField *)goodLabel withBad:(NSTextField *)badLabel withIcon:(NSImageView *)badIcon withAccessory:(NSView *)acc {
if (self = [super init]) {
onlyRecommended = YES;
recom = [objc_lang(lng_mac_recommended_apps).s() copy];
apps = recommendedApps;
panel = creator;
selector = menu;
good = goodLabel;
bad = badLabel;
icon = badIcon;
accessory = acc;
[selector setAction:@selector(menuDidClose)];
}
return self;
}
- (BOOL) isRecommended:(NSURL *)url {
if (apps) {
for (id app in apps) {
if ([(NSURL*)app isEquivalent:url]) {
return YES;
}
}
}
return NO;
}
- (BOOL) panel:(id)sender shouldEnableURL:(NSURL *)url {
NSNumber *isDirectory;
if ([url getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:nil] && isDirectory != nil && [isDirectory boolValue]) {
if (onlyRecommended) {
CFStringRef ext = CFURLCopyPathExtension((CFURLRef)url);
NSNumber *isPackage;
if ([url getResourceValue:&isPackage forKey:NSURLIsPackageKey error:nil] && isPackage != nil && [isPackage boolValue]) {
return [self isRecommended:url];
}
}
return YES;
}
return NO;
}
- (void) panelSelectionDidChange:(id)sender {
NSArray *urls = [panel URLs];
if ([urls count]) {
if ([self isRecommended:[urls firstObject]]) {
[bad removeFromSuperview];
[icon removeFromSuperview];
[accessory addSubview:good];
} else {
[good removeFromSuperview];
[accessory addSubview:bad];
[accessory addSubview:icon];
}
} else {
[good removeFromSuperview];
[bad removeFromSuperview];
[icon removeFromSuperview];
}
}
- (void) menuDidClose {
onlyRecommended = [[[selector selectedItem] title] isEqualToString:recom];
[self refreshPanelTable];
}
- (BOOL) refreshDataInViews: (NSArray*)subviews {
for (id view in subviews) {
NSString *cls = [view className];
if ([cls isEqualToString:@"FI_TBrowserTableView"]) {
[view reloadData];
} else if ([cls isEqualToString:@"FI_TListView"] || [cls isEqualToString:@"FI_TIconView"]) {
[view reloadData];
return YES;
} else {
NSArray *next = [view subviews];
if ([next count] && [self refreshDataInViews:next]) {
return YES;
}
}
}
return NO;
}
- (void) refreshPanelTable {
[self refreshDataInViews:[[panel contentView] subviews]];
[panel validateVisibleColumns];
}
- (void) dealloc {
if (apps) {
[apps release];
[recom release];
}
[super dealloc];
}
@end
void objc_openFile(const QString &f, bool openwith) {
NSString *file = QNSString(f).s();
if (openwith || [[NSWorkspace sharedWorkspace] openFile:file] == NO) {
@try {
NSURL *url = [NSURL fileURLWithPath:file];
NSString *ext = [url pathExtension];
NSArray *names =[url pathComponents];
NSString *name = [names count] ? [names lastObject] : @"";
NSArray *apps = (NSArray*)LSCopyApplicationURLsForURL(CFURLRef(url), kLSRolesAll);
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
NSView *accessory = [[NSView alloc] init];
[openPanel setAccessoryView:accessory];
NSRect fullRect = [[accessory superview] frame];
fullRect.origin = NSMakePoint(0, 0);
fullRect.size.height = st::macAccessoryHeight;
[accessory setFrame:fullRect];
[accessory setAutoresizesSubviews:YES];
NSPopUpButton *selector = [[NSPopUpButton alloc] init];
[accessory addSubview:selector];
[selector addItemWithTitle:objc_lang(lng_mac_recommended_apps).s()];
[selector addItemWithTitle:objc_lang(lng_mac_all_apps).s()];
[selector sizeToFit];
NSTextField *enableLabel = [[NSTextField alloc] init];
[accessory addSubview:enableLabel];
[enableLabel setStringValue:objc_lang(lng_mac_enable_filter).s()];
[enableLabel setFont:[selector font]];
[enableLabel setBezeled:NO];
[enableLabel setDrawsBackground:NO];
[enableLabel setEditable:NO];
[enableLabel setSelectable:NO];
[enableLabel sizeToFit];
NSRect selectorFrame = [selector frame], enableFrame = [enableLabel frame];
enableFrame.size.width += st::macEnableFilterAdd;
enableFrame.origin.x = (fullRect.size.width - selectorFrame.size.width - enableFrame.size.width) / 2.;
selectorFrame.origin.x = (fullRect.size.width - selectorFrame.size.width + enableFrame.size.width) / 2.;
enableFrame.origin.y = fullRect.size.height - selectorFrame.size.height - st::macEnableFilterTop + (selectorFrame.size.height - enableFrame.size.height) / 2.;
selectorFrame.origin.y = fullRect.size.height - selectorFrame.size.height - st::macSelectorTop;
[enableLabel setFrame:enableFrame];
[enableLabel setAutoresizingMask:NSViewMinXMargin|NSViewMaxXMargin];
[selector setFrame:selectorFrame];
[selector setAutoresizingMask:NSViewMinXMargin|NSViewMaxXMargin];
NSButton *button = [[NSButton alloc] init];
[accessory addSubview:button];
[button setButtonType:NSSwitchButton];
[button setFont:[selector font]];
[button setTitle:objc_lang(lng_mac_always_open_with).s()];
[button sizeToFit];
NSRect alwaysRect = [button frame];
alwaysRect.origin.x = (fullRect.size.width - alwaysRect.size.width) / 2;
alwaysRect.origin.y = selectorFrame.origin.y - alwaysRect.size.height - st::macAlwaysThisAppTop;
[button setFrame:alwaysRect];
[button setAutoresizingMask:NSViewMinXMargin|NSViewMaxXMargin];
NSTextField *goodLabel = [[NSTextField alloc] init];
[goodLabel setStringValue:[objc_lang(lng_mac_this_app_can_open).s() stringByReplacingOccurrencesOfString:@"{file}" withString:name]];
[goodLabel setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]];
[goodLabel setBezeled:NO];
[goodLabel setDrawsBackground:NO];
[goodLabel setEditable:NO];
[goodLabel setSelectable:NO];
[goodLabel sizeToFit];
NSRect goodFrame = [goodLabel frame];
goodFrame.origin.x = (fullRect.size.width - goodFrame.size.width) / 2.;
goodFrame.origin.y = alwaysRect.origin.y - goodFrame.size.height - st::macAppHintTop;
[goodLabel setFrame:goodFrame];
NSTextField *badLabel = [[NSTextField alloc] init];
[badLabel setStringValue:[objc_lang(lng_mac_not_known_app).s() stringByReplacingOccurrencesOfString:@"{file}" withString:name]];
[badLabel setFont:[goodLabel font]];
[badLabel setBezeled:NO];
[badLabel setDrawsBackground:NO];
[badLabel setEditable:NO];
[badLabel setSelectable:NO];
[badLabel sizeToFit];
NSImageView *badIcon = [[NSImageView alloc] init];
NSImage *badImage = [NSImage imageNamed:NSImageNameCaution];
[badIcon setImage:badImage];
[badIcon setFrame:NSMakeRect(0, 0, st::macCautionIconSize.width(), st::macCautionIconSize.height())];
NSRect badFrame = [badLabel frame], badIconFrame = [badIcon frame];
badFrame.origin.x = (fullRect.size.width - badFrame.size.width + badIconFrame.size.width) / 2.;
badIconFrame.origin.x = (fullRect.size.width - badFrame.size.width - badIconFrame.size.width) / 2.;
badFrame.origin.y = alwaysRect.origin.y - badFrame.size.height - st::macAppHintTop;
badIconFrame.origin.y = badFrame.origin.y;
[badLabel setFrame:badFrame];
[badIcon setFrame:badIconFrame];
ChooseApplicationDelegate *delegate = [[ChooseApplicationDelegate alloc] init:apps withPanel:openPanel withSelector:selector withGood:goodLabel withBad:badLabel withIcon:badIcon withAccessory:accessory];
[openPanel setDelegate:delegate];
[openPanel setCanChooseDirectories:NO];
[openPanel setCanChooseFiles:YES];
[openPanel setAllowsMultipleSelection:NO];
[openPanel setResolvesAliases:YES];
[openPanel setTitle:objc_lang(lng_mac_choose_app).s()];
[openPanel setMessage:[[objc_lang(lng_mac_choose_text).s() stringByReplacingOccurrencesOfString:@"{file}" withString:name] stringByAppendingFormat:@"%d", [[NSProcessInfo processInfo] processIdentifier]]];
NSArray *appsPaths = [[NSFileManager defaultManager] URLsForDirectory:NSApplicationDirectory inDomains:NSLocalDomainMask];
if ([appsPaths count]) [openPanel setDirectoryURL:[appsPaths firstObject]];
[openPanel beginWithCompletionHandler:^(NSInteger result){
if (result == NSFileHandlingPanelOKButton) {
if ([[openPanel URLs] count] > 0) {
NSURL *app = [[openPanel URLs] objectAtIndex:0];
NSString *path = [app path];
if ([button state] == NSOnState) {
NSArray *UTIs = (NSArray *)UTTypeCreateAllIdentifiersForTag(kUTTagClassFilenameExtension,
(CFStringRef)ext,
nil);
for (NSString *UTI in UTIs) {
LSSetDefaultRoleHandlerForContentType((CFStringRef)UTI,
kLSRolesEditor,
(CFStringRef)[[NSBundle bundleWithPath:path] bundleIdentifier]);
}
[UTIs release];
}
[[NSWorkspace sharedWorkspace] openFile:file withApplication:[app path]];
}
}
[selector release];
[button release];
[enableLabel release];
[goodLabel release];
[badLabel release];
[badIcon release];
[accessory release];
[delegate release];
}];
}
@catch (NSException *exception) {
[[NSWorkspace sharedWorkspace] openFile:file];
}
@finally {
}
}
[file release];
}
void objc_finish() {
if (!objcLang.isEmpty()) {
objcLang.clear();
}
}
BOOL _execUpdater(BOOL update = YES) {
NSString *path = @"", *args = @"";
@try {
path = [[NSBundle mainBundle] bundlePath];
if (!path) {
LOG(("Could not get bundle path!!"));
return NO;
}
path = [path stringByAppendingString:@"/Contents/Frameworks/Updater"];
NSMutableArray *args = [[NSMutableArray alloc] initWithObjects:@"-workpath", QNSString(cWorkingDir()).s(), @"-tosettings", @"-procid", nil];
[args addObject:[NSString stringWithFormat:@"%d", [[NSProcessInfo processInfo] processIdentifier]]];
if (!update) [args addObject:@"-noupdate"];
if (cFromAutoStart()) [args addObject:@"-autostart"];
if (cDebug()) [args addObject:@"-debug"];
if (cDataFile() != (cTestMode() ? qsl("data_test") : qsl("data"))) {
[args addObject:@"-key"];
[args addObject:QNSString(cDataFile()).s()];
}
DEBUG_LOG(("Application Info: executing %1 %2").arg(QString::fromUtf8([path cStringUsingEncoding:NSUTF8StringEncoding])).arg(QString::fromUtf8([[args componentsJoinedByString:@" "] cStringUsingEncoding:NSUTF8StringEncoding])));
if (![NSTask launchedTaskWithLaunchPath:path arguments:args]) {
LOG(("Task not launched while executing %1 %2").arg(QString::fromUtf8([path cStringUsingEncoding:NSUTF8StringEncoding])).arg(QString::fromUtf8([[args componentsJoinedByString:@" "] cStringUsingEncoding:NSUTF8StringEncoding])));
return NO;
}
}
@catch (NSException *exception) {
LOG(("Exception caught while executing %1 %2").arg(QString::fromUtf8([path cStringUsingEncoding:NSUTF8StringEncoding])).arg(QString::fromUtf8([args cStringUsingEncoding:NSUTF8StringEncoding])));
return NO;
}
@finally {
}
return YES;
}
bool objc_execUpdater() {
return !!_execUpdater();
}
void objc_execTelegram() {
_execUpdater(NO);
}
void objc_activateProgram() {
[NSApp activateIgnoringOtherApps:YES];
}
bool objc_moveFile(const QString &from, const QString &to) {
NSString *f = QNSString(from).s(), *t = QNSString(to).s();
if ([[NSFileManager defaultManager] fileExistsAtPath:t]) {
NSData *data = [NSData dataWithContentsOfFile:f];
if (data) {
if ([data writeToFile:t atomically:YES]) {
if ([[NSFileManager defaultManager] removeItemAtPath:f error:nil]) {
return true;
}
}
}
} else {
if ([[NSFileManager defaultManager] moveItemAtPath:f toPath:t error:nil]) {
return true;
}
}
return false;
}
void objc_deleteDir(const QString &dir) {
[[NSFileManager defaultManager] removeItemAtPath:QNSString(dir).s() error:nil];
}
QString objc_appDataPath() {
NSURL *url = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil];
if (url) {
return QString::fromUtf8([[url path] fileSystemRepresentation]) + '/' + QString::fromWCharArray(AppName) + '/';
}
return QString();
}
QString objc_currentCountry() {
NSLocale *currentLocale = [NSLocale currentLocale]; // get the current locale.
NSString *countryCode = [currentLocale objectForKey:NSLocaleCountryCode];
return countryCode ? QString::fromUtf8([countryCode cStringUsingEncoding:NSUTF8StringEncoding]) : QString();
}
QString objc_currentLang() {
NSLocale *currentLocale = [NSLocale currentLocale]; // get the current locale.
NSString *currentLang = [currentLocale objectForKey:NSLocaleLanguageCode];
return currentLang ? QString::fromUtf8([currentLang cStringUsingEncoding:NSUTF8StringEncoding]) : QString();
}

View file

@ -872,6 +872,15 @@ PsMainWindow::PsMainWindow(QWidget *parent) : QMainWindow(parent), ps_hWnd(0), p
notifyWaitTimer.setSingleShot(true); notifyWaitTimer.setSingleShot(true);
} }
void PsMainWindow::psNotIdle() const {
psIdleTimer.stop();
if (psIdle) {
psIdle = false;
if (App::main()) App::main()->setOnline();
if (App::wnd()) App::wnd()->checkHistoryActivation();
}
}
void PsMainWindow::psIdleTimeout() { void PsMainWindow::psIdleTimeout() {
LASTINPUTINFO lii; LASTINPUTINFO lii;
lii.cbSize = sizeof(LASTINPUTINFO); lii.cbSize = sizeof(LASTINPUTINFO);
@ -879,15 +888,16 @@ void PsMainWindow::psIdleTimeout() {
if (res) { if (res) {
uint64 ticks = GetTickCount(); uint64 ticks = GetTickCount();
if (lii.dwTime >= ticks - IdleMsecs) { if (lii.dwTime >= ticks - IdleMsecs) {
psIdle = false; psNotIdle();
psIdleTimer.stop();
if (App::main()) App::main()->setOnline();
} }
} else { // error {
psNotIdle();
} }
} }
bool PsMainWindow::psIsActive() const { bool PsMainWindow::psIsActive(int state) const {
return isActiveWindow() && isVisible() && !(windowState() & Qt::WindowMinimized); if (state < 0) state = this->windowState();
return isActiveWindow() && isVisible() && !(state & Qt::WindowMinimized) && !psIdle;
} }
bool PsMainWindow::psIsOnline(int windowState) const { bool PsMainWindow::psIsOnline(int windowState) const {
@ -909,9 +919,10 @@ bool PsMainWindow::psIsOnline(int windowState) const {
} }
return false; return false;
} else { } else {
psIdle = false; psNotIdle();
psIdleTimer.stop();
} }
} else { // error
psNotIdle();
} }
return true; return true;
} }
@ -2639,6 +2650,9 @@ void psShowInFolder(const QString &name) {
ShellExecute(0, 0, qsl("explorer").toStdWString().c_str(), (qsl("/select,") + nameEscaped).toStdWString().c_str(), 0, SW_SHOWNORMAL); ShellExecute(0, 0, qsl("explorer").toStdWString().c_str(), (qsl("/select,") + nameEscaped).toStdWString().c_str(), 0, SW_SHOWNORMAL);
} }
void psFinish() {
}
void psExecUpdater() { void psExecUpdater() {
QString targs = qsl("-update"); QString targs = qsl("-update");
if (cFromAutoStart()) targs += qsl(" -autostart"); if (cFromAutoStart()) targs += qsl(" -autostart");

View file

@ -102,7 +102,7 @@ public:
void psFlash(); void psFlash();
void psNotifySettingGot(); void psNotifySettingGot();
bool psIsActive() const; bool psIsActive(int state = -1) const;
bool psIsOnline(int windowState) const; bool psIsOnline(int windowState) const;
void psUpdateWorkmode(); void psUpdateWorkmode();
@ -136,6 +136,8 @@ public slots:
protected: protected:
void psNotIdle() const;
bool posInited; bool posInited;
QSystemTrayIcon *trayIcon; QSystemTrayIcon *trayIcon;
QMenu *trayIconMenu; QMenu *trayIconMenu;
@ -259,3 +261,4 @@ void psExecTelegram();
void psPostprocessFile(const QString &name); void psPostprocessFile(const QString &name);
void psOpenFile(const QString &name, bool openWith = false); void psOpenFile(const QString &name, bool openWith = false);
void psShowInFolder(const QString &name); void psShowInFolder(const QString &name);
void psFinish();

View file

@ -67,19 +67,26 @@ QString gLangFile;
bool gRetina = false; bool gRetina = false;
float64 gRetinaFactor = 1.; float64 gRetinaFactor = 1.;
int32 gIntRetinaFactor = 1;
bool gCustomNotifies = false; bool gCustomNotifies = false;
uint64 gInstance = 0.;
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
DBIPlatform gPlatform = dbipWindows; DBIPlatform gPlatform = dbipWindows;
QUrl gUpdateURL = QUrl(qsl("http://tdesktop.com/win/tupdates/current"));
#elif defined Q_OS_MAC #elif defined Q_OS_MAC
DBIPlatform gPlatform = dbipMac; DBIPlatform gPlatform = dbipMac;
QUrl gUpdateURL = QUrl(qsl("http://tdesktop.com/mac/tupdates/current"));
#elif defined Q_OS_LINUX #elif defined Q_OS_LINUX
DBIPlatform gPlatform = dbipLinux; DBIPlatform gPlatform = dbipLinux;
QUrl gUpdateURL = QUrl(qsl("http://tdesktop.com/linux/tupdates/current"));
#else #else
#error Unknown platform #error Unknown platform
#endif #endif
void settingsParseArgs(int argc, char *argv[]) { void settingsParseArgs(int argc, char *argv[]) {
memset_rand(&gInstance, sizeof(gInstance));
gExeDir = psCurrentExeDirectory(argc, argv); gExeDir = psCurrentExeDirectory(argc, argv);
for (int32 i = 0; i < argc; ++i) { for (int32 i = 0; i < argc; ++i) {
if (string("-release") == argv[i]) { if (string("-release") == argv[i]) {

View file

@ -132,8 +132,12 @@ DeclareReadSetting(QString, LangFile);
DeclareSetting(bool, Retina); DeclareSetting(bool, Retina);
DeclareSetting(float64, RetinaFactor); DeclareSetting(float64, RetinaFactor);
DeclareSetting(int32, IntRetinaFactor);
DeclareSetting(bool, CustomNotifies); DeclareSetting(bool, CustomNotifies);
DeclareReadSetting(uint64, Instance);
DeclareReadSetting(DBIPlatform, Platform); DeclareReadSetting(DBIPlatform, Platform);
DeclareReadSetting(QUrl, UpdateURL);
void settingsParseArgs(int argc, char *argv[]); void settingsParseArgs(int argc, char *argv[]);

View file

@ -32,7 +32,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
Slider::Slider(QWidget *parent, const style::slider &st, int32 count, int32 sel) : QWidget(parent), Slider::Slider(QWidget *parent, const style::slider &st, int32 count, int32 sel) : QWidget(parent),
_count(count), _sel(snap(sel, 0, _count)), _wasSel(_sel), _st(st), _pressed(false) { _count(count), _sel(snap(sel, 0, _count)), _wasSel(_sel), _st(st), _pressed(false) {
resize(_st.width, _st.bar.height()); resize(_st.width, _st.bar.pxHeight());
setCursor(style::cur_pointer); setCursor(style::cur_pointer);
} }
@ -43,7 +43,7 @@ void Slider::mousePressEvent(QMouseEvent *e) {
void Slider::mouseMoveEvent(QMouseEvent *e) { void Slider::mouseMoveEvent(QMouseEvent *e) {
if (_pressed) { if (_pressed) {
int32 newSel = snap(qRound((_count - 1) * float64(e->pos().x() - _st.bar.width() / 2) / (width() - _st.bar.width())), 0, _count - 1); int32 newSel = snap(qRound((_count - 1) * float64(e->pos().x() - _st.bar.pxWidth() / 2) / (width() - _st.bar.pxWidth())), 0, _count - 1);
if (newSel != _sel) { if (newSel != _sel) {
_sel = newSel; _sel = newSel;
update(); update();
@ -81,7 +81,7 @@ void Slider::paintEvent(QPaintEvent *e) {
p.drawLine(0, i, width() - 1, i); p.drawLine(0, i, width() - 1, i);
} }
int32 x = qFloor(_sel * float64(width() - _st.bar.width()) / (_count - 1)), y = (height() - _st.bar.height()) / 2; int32 x = qFloor(_sel * float64(width() - _st.bar.pxWidth()) / (_count - 1)), y = (height() - _st.bar.pxHeight()) / 2;
p.drawPixmap(QPoint(x, y), App::sprite(), _st.bar); p.drawPixmap(QPoint(x, y), App::sprite(), _st.bar);
} }
@ -135,10 +135,10 @@ SettingsInner::SettingsInner(Settings *parent) : QWidget(parent),
_viewEmojis(this, lang(lng_settings_view_emojis)), _viewEmojis(this, lang(lng_settings_view_emojis)),
_enterSend(this, qsl("send_key"), 0, lang(lng_settings_send_enter), !cCtrlEnter()), _enterSend(this, qsl("send_key"), 0, lang(lng_settings_send_enter), !cCtrlEnter()),
_ctrlEnterSend(this, qsl("send_key"), 1, lang(lng_settings_send_ctrlenter), cCtrlEnter()), _ctrlEnterSend(this, qsl("send_key"), 1, lang((cPlatform() == dbipMac) ? lng_settings_send_cmdenter : lng_settings_send_ctrlenter), cCtrlEnter()),
_downloadPathWidth(st::linkFont->m.width(lang(lng_download_path_label))),
_dontAskDownloadPath(this, lang(lng_download_path_dont_ask), !cAskDownloadPath()), _dontAskDownloadPath(this, lang(lng_download_path_dont_ask), !cAskDownloadPath()),
_downloadPathWidth(st::linkFont->m.width(lang(lng_download_path_label))),
_downloadPathEdit(this, cDownloadPath().isEmpty() ? lang(lng_download_path_temp) : st::linkFont->m.elidedText(QDir::toNativeSeparators(cDownloadPath()), Qt::ElideRight, st::setWidth - st::setVersionLeft - _downloadPathWidth)), _downloadPathEdit(this, cDownloadPath().isEmpty() ? lang(lng_download_path_temp) : st::linkFont->m.elidedText(QDir::toNativeSeparators(cDownloadPath()), Qt::ElideRight, st::setWidth - st::setVersionLeft - _downloadPathWidth)),
_downloadPathClear(this, lang(lng_download_path_clear)), _downloadPathClear(this, lang(lng_download_path_clear)),
_tempDirClearingWidth(st::linkFont->m.width(lang(lng_download_path_clearing))), _tempDirClearingWidth(st::linkFont->m.width(lang(lng_download_path_clearing))),
@ -150,8 +150,8 @@ SettingsInner::SettingsInner(Settings *parent) : QWidget(parent),
// advanced // advanced
_connectionType(this, lang(lng_connection_auto)), _connectionType(this, lang(lng_connection_auto)),
_resetSessions(this, lang(lng_settings_reset)), _resetSessions(this, lang(lng_settings_reset)),
_resetDone(false), _logOut(this, lang(lng_settings_logout), st::btnLogout),
_logOut(this, lang(lng_settings_logout), st::btnLogout) _resetDone(false)
{ {
if (_self) { if (_self) {
_nameText.setText(st::setNameFont, _nameCache, _textNameOptions); _nameText.setText(st::setNameFont, _nameCache, _textNameOptions);
@ -345,12 +345,15 @@ void SettingsInner::paintEvent(QPaintEvent *e) {
p.drawText(_left + st::setVersionLeft, top + st::setVersionTop + st::linkFont->ascent, textToDraw); p.drawText(_left + st::setVersionLeft, top + st::setVersionTop + st::linkFont->ascent, textToDraw);
top += st::setVersionHeight; top += st::setVersionHeight;
if (cPlatform() == dbipWindows) {
top += _workmodeTray.height() + st::setLittleSkip; top += _workmodeTray.height() + st::setLittleSkip;
top += _workmodeWindow.height() + st::setSectionSkip; top += _workmodeWindow.height() + st::setSectionSkip;
top += _autoStart.height() + st::setLittleSkip; top += _autoStart.height() + st::setLittleSkip;
top += _startMinimized.height(); top += _startMinimized.height();
}
if (!cRetina()) {
p.setFont(st::setHeaderFont->f); p.setFont(st::setHeaderFont->f);
p.setPen(st::setHeaderColor->p); p.setPen(st::setHeaderColor->p);
p.drawText(_left + st::setHeaderLeft, top + st::setHeaderTop + st::setHeaderFont->ascent, lang(lng_settings_scale_label)); p.drawText(_left + st::setHeaderLeft, top + st::setHeaderTop + st::setHeaderFont->ascent, lang(lng_settings_scale_label));
@ -374,6 +377,7 @@ void SettingsInner::paintEvent(QPaintEvent *e) {
p.setPen((scaleIs(dbisTwo) ? st::dpiActive : st::dpiInactive)->p); p.setPen((scaleIs(dbisTwo) ? st::dpiActive : st::dpiInactive)->p);
p.drawText(sLeft + qRound(3 * sStep) - _dpiWidth4 / 2, top - (st::dpiFont4->height - st::dpiFont4->height) / 2 - st::dpiFont4->descent, scaleLabel(dbisTwo)); p.drawText(sLeft + qRound(3 * sStep) - _dpiWidth4 / 2, top - (st::dpiFont4->height - st::dpiFont4->height) / 2 - st::dpiFont4->descent, scaleLabel(dbisTwo));
p.setFont(st::linkFont->f); p.setFont(st::linkFont->f);
}
if (_self) { if (_self) {
// chat options // chat options
@ -451,15 +455,18 @@ void SettingsInner::resizeEvent(QResizeEvent *e) {
_restartNow.move(_left + st::setWidth - _restartNow.width(), top + st::setVersionTop); _restartNow.move(_left + st::setWidth - _restartNow.width(), top + st::setVersionTop);
top += st::setVersionHeight; top += st::setVersionHeight;
if (cPlatform() == dbipWindows) {
_workmodeTray.move(_left, top); top += _workmodeTray.height() + st::setLittleSkip; _workmodeTray.move(_left, top); top += _workmodeTray.height() + st::setLittleSkip;
_workmodeWindow.move(_left, top); top += _workmodeWindow.height() + st::setSectionSkip; _workmodeWindow.move(_left, top); top += _workmodeWindow.height() + st::setSectionSkip;
_autoStart.move(_left, top); top += _autoStart.height() + st::setLittleSkip; _autoStart.move(_left, top); top += _autoStart.height() + st::setLittleSkip;
_startMinimized.move(_left, top); top += _startMinimized.height(); _startMinimized.move(_left, top); top += _startMinimized.height();
}
if (!cRetina()) {
top += st::setHeaderSkip; top += st::setHeaderSkip;
_dpiAutoScale.move(_left, top); top += _dpiAutoScale.height() + st::setLittleSkip; _dpiAutoScale.move(_left, top); top += _dpiAutoScale.height() + st::setLittleSkip;
_dpiSlider.move(_left, top); top += _dpiSlider.height() + st::dpiFont4->height; _dpiSlider.move(_left, top); top += _dpiSlider.height() + st::dpiFont4->height;
}
// chat options // chat options
if (_self) { if (_self) {
@ -625,14 +632,27 @@ void SettingsInner::showAll() {
// general // general
_autoUpdate.show(); _autoUpdate.show();
setUpdatingState(_updatingState, true);
if (cPlatform() == dbipWindows) {
_workmodeTray.show(); _workmodeTray.show();
_workmodeWindow.show(); _workmodeWindow.show();
_autoStart.show(); _autoStart.show();
setUpdatingState(_updatingState, true);
_startMinimized.show(); _startMinimized.show();
} else {
_workmodeTray.hide();
_workmodeWindow.hide();
_autoStart.hide();
_startMinimized.hide();
}
if (cRetina()) {
_dpiSlider.hide();
_dpiAutoScale.hide();
} else {
_dpiSlider.show(); _dpiSlider.show();
_dpiAutoScale.show();
}
// chat options // chat options
if (_self) { if (_self) {

View file

@ -34,7 +34,11 @@ Copyright (c) 2014 John Preston, https://tdesktop.com
#include <QtNetwork/QNetworkReply> #include <QtNetwork/QNetworkReply>
#include <QtNetwork/QNetworkProxy> #include <QtNetwork/QNetworkProxy>
#ifdef Q_OS_WIN // use Lzma SDK for win
#include <LzmaLib.h> #include <LzmaLib.h>
#else
#include <lzma.h>
#endif
#if defined Q_OS_WIN #if defined Q_OS_WIN
#define _NEED_WIN_GENERATE_DUMP #define _NEED_WIN_GENERATE_DUMP

View file

@ -45,8 +45,8 @@ void SysBtn::onStateChange(int oldState, ButtonStateChangeSource source) {
void SysBtn::paintEvent(QPaintEvent *e) { void SysBtn::paintEvent(QPaintEvent *e) {
QPainter p(this); QPainter p(this);
int x = (width() - _st.img.width()) / 2, y = (height() - _st.img.height()) / 2; int x = (width() - _st.img.pxWidth()) / 2, y = (height() - _st.img.pxHeight()) / 2;
p.fillRect(x, y, _st.img.width(), _st.img.height(), a_color.current()); p.fillRect(x, y, _st.img.pxWidth(), _st.img.pxHeight(), a_color.current());
p.drawPixmap(QPoint(x, y), App::sprite(), _st.img); p.drawPixmap(QPoint(x, y), App::sprite(), _st.img);
} }

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