From cace79bc18f3270c20e7dc58b981400f5465f969 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 14 Jun 2014 23:32:11 +0400 Subject: [PATCH] xcode build support started --- .gitignore | 38 +- Telegram/Lang.plist | 18 + Telegram/MetaLang.pro | 31 + Telegram/MetaLang.xcodeproj/project.pbxproj | 843 ++++ Telegram/MetaLang.xcodeproj/qt_preprocess.mak | 68 + Telegram/MetaStyle.pro | 31 + Telegram/MetaStyle.xcodeproj/project.pbxproj | 817 ++++ .../MetaStyle.xcodeproj/qt_preprocess.mak | 67 + Telegram/Preprocess copy-Info.plist | 22 + Telegram/SourceFiles/Telegram.plist | 22 + Telegram/SourceFiles/_other/Lang.plist | 22 + Telegram/SourceFiles/_other/Style.plist | 22 + Telegram/SourceFiles/_other/genlang.cpp | 44 +- Telegram/SourceFiles/_other/genlang.h | 16 + Telegram/SourceFiles/_other/genstyles.cpp | 318 +- Telegram/SourceFiles/_other/genstyles.h | 26 +- Telegram/SourceFiles/_other/mlmain.cpp | 14 + Telegram/SourceFiles/_other/msmain.cpp | 26 +- Telegram/SourceFiles/application.cpp | 10 +- Telegram/SourceFiles/application.h | 2 +- Telegram/SourceFiles/boxes/aboutbox.cpp | 4 +- Telegram/SourceFiles/boxes/addcontactbox.cpp | 4 +- .../SourceFiles/boxes/addparticipantbox.cpp | 4 +- Telegram/SourceFiles/boxes/confirmbox.cpp | 4 +- Telegram/SourceFiles/boxes/connectionbox.cpp | 4 +- Telegram/SourceFiles/boxes/contactsbox.cpp | 4 +- .../SourceFiles/boxes/downloadpathbox.cpp | 4 +- Telegram/SourceFiles/boxes/emojibox.cpp | 4 +- Telegram/SourceFiles/boxes/newgroupbox.cpp | 8 +- Telegram/SourceFiles/dialogswidget.cpp | 4 +- Telegram/SourceFiles/dropdown.cpp | 4 +- Telegram/SourceFiles/gui/animation.h | 2 +- Telegram/SourceFiles/gui/countryinput.cpp | 2 +- Telegram/SourceFiles/gui/flatcheckbox.cpp | 3 +- Telegram/SourceFiles/gui/flatlabel.cpp | 1 + Telegram/SourceFiles/gui/images.cpp | 10 +- Telegram/SourceFiles/gui/images.h | 4 +- Telegram/SourceFiles/gui/text.cpp | 12 +- Telegram/SourceFiles/gui/text.h | 8 +- Telegram/SourceFiles/gui/twidget.cpp | 32 + Telegram/SourceFiles/gui/twidget.h | 4 +- Telegram/SourceFiles/history.cpp | 25 + Telegram/SourceFiles/history.h | 12 +- Telegram/SourceFiles/historywidget.cpp | 12 +- Telegram/SourceFiles/intro/intro.cpp | 10 +- Telegram/SourceFiles/intro/introphone.cpp | 2 +- Telegram/SourceFiles/logs.cpp | 9 + Telegram/SourceFiles/main.cpp | 2 +- Telegram/SourceFiles/mainwidget.cpp | 33 +- Telegram/SourceFiles/mainwidget.h | 5 +- Telegram/SourceFiles/mtproto/generate.py | 28 +- Telegram/SourceFiles/mtproto/mtp.cpp | 5 +- .../SourceFiles/mtproto/mtpConnection.cpp | 2 + Telegram/SourceFiles/mtproto/mtpConnection.h | 8 +- Telegram/SourceFiles/mtproto/mtpCoreTypes.h | 18 +- Telegram/SourceFiles/mtproto/mtpPublicRSA.h | 2 +- Telegram/SourceFiles/mtproto/mtpScheme.h | 4026 ++++++++--------- Telegram/SourceFiles/profilewidget.cpp | 10 +- Telegram/SourceFiles/pspecific_mac.cpp | 1486 ++---- Telegram/SourceFiles/pspecific_mac.h | 118 +- Telegram/SourceFiles/pspecific_mac.mm | 2466 ++++++++++ Telegram/SourceFiles/pspecific_mac_p.h | 51 + Telegram/SourceFiles/pspecific_mac_p.mm | 258 ++ Telegram/SourceFiles/pspecific_wnd.cpp | 7 +- Telegram/SourceFiles/pspecific_wnd.h | 4 +- Telegram/SourceFiles/settings.cpp | 18 +- Telegram/SourceFiles/settings.h | 6 + Telegram/SourceFiles/settingswidget.cpp | 14 +- Telegram/SourceFiles/types.cpp | 81 +- Telegram/SourceFiles/types.h | 7 + Telegram/SourceFiles/window.cpp | 21 +- Telegram/SourceFiles/window.h | 5 +- Telegram/Style.plist | 20 + Telegram/Telegram.plist | 22 + Telegram/Telegram.pro | 199 + Telegram/Telegram.xcodeproj/project.pbxproj | 1722 +++++++ Telegram/Telegram.xcodeproj/qt_preprocess.mak | 584 +++ .../AppIcon-2.appiconset/Contents.json | 58 + .../AppIcon.appiconset/Contents.json | 68 + .../AppIcon.appiconset/icon_128x128.png | Bin 0 -> 4341 bytes .../AppIcon.appiconset/icon_128x128@2x.png | Bin 0 -> 8586 bytes .../AppIcon.appiconset/icon_16x16.png | Bin 0 -> 531 bytes .../AppIcon.appiconset/icon_16x16@2x.png | Bin 0 -> 1072 bytes .../AppIcon.appiconset/icon_256x256.png | Bin 0 -> 8586 bytes .../AppIcon.appiconset/icon_256x256@2x.png | Bin 0 -> 76235 bytes .../AppIcon.appiconset/icon_32x32.png | Bin 0 -> 1072 bytes .../AppIcon.appiconset/icon_32x32@2x.png | Bin 0 -> 2116 bytes .../AppIcon.appiconset/icon_512x512.png | Bin 0 -> 76235 bytes .../AppIcon.appiconset/icon_512x512@2x.png | Bin 0 -> 185360 bytes .../Icon.iconset/icon_128x128.png | Bin 0 -> 4341 bytes .../Icon.iconset/icon_128x128@2x.png | Bin 0 -> 8586 bytes .../Icon.iconset/icon_16x16.png | Bin 0 -> 531 bytes .../Icon.iconset/icon_16x16@2x.png | Bin 0 -> 1072 bytes .../Icon.iconset/icon_256x256.png | Bin 0 -> 8586 bytes .../Icon.iconset/icon_256x256@2x.png | Bin 0 -> 76235 bytes .../Icon.iconset/icon_32x32.png | Bin 0 -> 1072 bytes .../Icon.iconset/icon_32x32@2x.png | Bin 0 -> 2116 bytes .../Icon.iconset/icon_512x512.png | Bin 0 -> 76235 bytes .../Icon.iconset/icon_512x512@2x.png | Bin 0 -> 185360 bytes .../qmake/generators/mac/pbuilder_pbx.cpp | 1935 ++++++++ .../qtbase/qmake/generators/makefile.cpp | 3378 ++++++++++++++ .../qtbase/src/gui/painting/qpaintengine_p.h | 135 + .../src/plugins/platforms/cocoa/qnsview.mm | 1772 ++++++++ Telegram/icon_128x128@2x.png | Bin 0 -> 8808 bytes Telegram/icon_256x256.png | Bin 0 -> 8808 bytes Telegram/iconround256.ico | Bin 0 -> 370070 bytes Telegram/iconround256.png | Bin 0 -> 8808 bytes Telegram/metalang_plugin_import.cpp | 13 + Telegram/metastyle_plugin_import.cpp | 13 + Telegram/telegram_plugin_import.cpp | 22 + 110 files changed, 17740 insertions(+), 3535 deletions(-) create mode 100644 Telegram/Lang.plist create mode 100644 Telegram/MetaLang.pro create mode 100644 Telegram/MetaLang.xcodeproj/project.pbxproj create mode 100644 Telegram/MetaLang.xcodeproj/qt_preprocess.mak create mode 100644 Telegram/MetaStyle.pro create mode 100644 Telegram/MetaStyle.xcodeproj/project.pbxproj create mode 100644 Telegram/MetaStyle.xcodeproj/qt_preprocess.mak create mode 100644 Telegram/Preprocess copy-Info.plist create mode 100644 Telegram/SourceFiles/Telegram.plist create mode 100644 Telegram/SourceFiles/_other/Lang.plist create mode 100644 Telegram/SourceFiles/_other/Style.plist create mode 100644 Telegram/SourceFiles/pspecific_mac.mm create mode 100644 Telegram/SourceFiles/pspecific_mac_p.h create mode 100644 Telegram/SourceFiles/pspecific_mac_p.mm create mode 100644 Telegram/Style.plist create mode 100644 Telegram/Telegram.plist create mode 100644 Telegram/Telegram.pro create mode 100644 Telegram/Telegram.xcodeproj/project.pbxproj create mode 100644 Telegram/Telegram.xcodeproj/qt_preprocess.mak create mode 100644 Telegram/Telegram/Images.xcassets/AppIcon-2.appiconset/Contents.json create mode 100644 Telegram/Telegram/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Telegram/Telegram/Images.xcassets/AppIcon.appiconset/icon_128x128.png create mode 100644 Telegram/Telegram/Images.xcassets/AppIcon.appiconset/icon_128x128@2x.png create mode 100644 Telegram/Telegram/Images.xcassets/AppIcon.appiconset/icon_16x16.png create mode 100644 Telegram/Telegram/Images.xcassets/AppIcon.appiconset/icon_16x16@2x.png create mode 100644 Telegram/Telegram/Images.xcassets/AppIcon.appiconset/icon_256x256.png create mode 100644 Telegram/Telegram/Images.xcassets/AppIcon.appiconset/icon_256x256@2x.png create mode 100644 Telegram/Telegram/Images.xcassets/AppIcon.appiconset/icon_32x32.png create mode 100644 Telegram/Telegram/Images.xcassets/AppIcon.appiconset/icon_32x32@2x.png create mode 100644 Telegram/Telegram/Images.xcassets/AppIcon.appiconset/icon_512x512.png create mode 100644 Telegram/Telegram/Images.xcassets/AppIcon.appiconset/icon_512x512@2x.png create mode 100644 Telegram/Telegram/Images.xcassets/Icon.iconset/icon_128x128.png create mode 100644 Telegram/Telegram/Images.xcassets/Icon.iconset/icon_128x128@2x.png create mode 100644 Telegram/Telegram/Images.xcassets/Icon.iconset/icon_16x16.png create mode 100644 Telegram/Telegram/Images.xcassets/Icon.iconset/icon_16x16@2x.png create mode 100644 Telegram/Telegram/Images.xcassets/Icon.iconset/icon_256x256.png create mode 100644 Telegram/Telegram/Images.xcassets/Icon.iconset/icon_256x256@2x.png create mode 100644 Telegram/Telegram/Images.xcassets/Icon.iconset/icon_32x32.png create mode 100644 Telegram/Telegram/Images.xcassets/Icon.iconset/icon_32x32@2x.png create mode 100644 Telegram/Telegram/Images.xcassets/Icon.iconset/icon_512x512.png create mode 100644 Telegram/Telegram/Images.xcassets/Icon.iconset/icon_512x512@2x.png create mode 100644 Telegram/_qt_5_3_0_patch/qtbase/qmake/generators/mac/pbuilder_pbx.cpp create mode 100644 Telegram/_qt_5_3_0_patch/qtbase/qmake/generators/makefile.cpp create mode 100644 Telegram/_qt_5_3_0_patch/qtbase/src/gui/painting/qpaintengine_p.h create mode 100644 Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm create mode 100644 Telegram/icon_128x128@2x.png create mode 100644 Telegram/icon_256x256.png create mode 100644 Telegram/iconround256.ico create mode 100644 Telegram/iconround256.png create mode 100644 Telegram/metalang_plugin_import.cpp create mode 100644 Telegram/metastyle_plugin_import.cpp create mode 100644 Telegram/telegram_plugin_import.cpp diff --git a/.gitignore b/.gitignore index 874a80ce0..d1c2f1f14 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,27 @@ -Telegram/GeneratedFiles/ -Telegram/*.user -Telegram.*.suo -Telegram.sdf -Telegram.opensdf -Telegram/*.aps -Win32/ +/Telegram/GeneratedFiles/ +/Telegram/SourceFiles/art/grid.png +/Telegram/SourceFiles/art/grid_125x.png +/Telegram/SourceFiles/art/grid_150x.png +/Telegram/SourceFiles/art/grid_200x.png +/Telegram/SourceFiles/art/sprite_125x.png +/Telegram/SourceFiles/art/sprite_150x.png +/Telegram/*.user +*.suo +*.sdf +*.opensdf +/Telegram/*.aps +/Win32/ ipch/ -Telegram/log.txt -Telegram/data -Telegram/data_config -Telegram/DebugLogs/ -Telegram/tdata/ -Telegram/tdumps/ +/Telegram/log.txt +/Telegram/data +/Telegram/data_config +/Telegram/DebugLogs/ +/Telegram/tdata/ +/Telegram/tdumps/ + +.DS_Store +.qmake.stash +/Mac/ +/Telegram/*.xcodeproj/xcuserdata/ +/Telegram/*.xcodeproj/project.xcworkspace/ diff --git a/Telegram/Lang.plist b/Telegram/Lang.plist new file mode 100644 index 000000000..f8eeabf74 --- /dev/null +++ b/Telegram/Lang.plist @@ -0,0 +1,18 @@ + + + + + CFBundleExecutable + MetaLang + CFBundleGetInfoString + MetaLang compiler + CFBundleIdentifier + com.tdesktop.${PRODUCT_NAME:rfc1034identifier} + CFBundlePackageType + APPL + CFBundleSignature + ???? + NSPrincipalClass + NSApplication + + diff --git a/Telegram/MetaLang.pro b/Telegram/MetaLang.pro new file mode 100644 index 000000000..cee803ce7 --- /dev/null +++ b/Telegram/MetaLang.pro @@ -0,0 +1,31 @@ +T += core + +CONFIG(debug, debug|release) { + DEFINES += _DEBUG + OBJECTS_DIR = ./../Mac/DebugIntermediateLang + MOC_DIR = ./GeneratedFiles/Debug + DESTDIR = ./../Mac/DebugLang +} +CONFIG(release, debug|release) { + OBJECTS_DIR = ./../Mac/ReleaseIntermediateLang + MOC_DIR = ./GeneratedFiles/Release + DESTDIR = ./../Mac/ReleaseLang +} + +macx { + QMAKE_INFO_PLIST = ./SourceFiles/_other/Lang.plist + QMAKE_LFLAGS += -framework Cocoa +} + +SOURCES += \ + ./SourceFiles/_other/mlmain.cpp \ + ./SourceFiles/_other/genlang.cpp \ + +HEADERS += \ + ./SourceFiles/_other/mlmain.h \ + ./SourceFiles/_other/genlang.h \ + +INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui\ + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore\ + ./../../Libraries/QtStatic/qtbase/include\ + diff --git a/Telegram/MetaLang.xcodeproj/project.pbxproj b/Telegram/MetaLang.xcodeproj/project.pbxproj new file mode 100644 index 000000000..9fc24cce8 --- /dev/null +++ b/Telegram/MetaLang.xcodeproj/project.pbxproj @@ -0,0 +1,843 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXAggregateTarget section */ + 9BBFDCA776106924C40572AD /* Preprocess */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "MetaLang" */; + buildPhases = ( + 7EF0942E79C014DCEC8976BC /* Qt Preprocessors */, + 07C3AF44194CCD360016CFF1 /* ShellScript */, + ); + dependencies = ( + ); + name = Preprocess; + productName = "Qt Preprocess"; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 0E4EEB1BFC9FA7662AD934C6 /* moc_genlang.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 680437016D61255E7F889A94 /* moc_genlang.cpp */; settings = {ATTRIBUTES = (); }; }; + 1677F0186F1CAD0E8B91FFF7 /* metalang_plugin_import.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 98B4CE8F50ACDC930E6A1148 /* metalang_plugin_import.cpp */; settings = {ATTRIBUTES = (); }; }; + 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 */; }; + 34D95ABDC12C1841CEF3B2E3 /* genlang.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 669AB12AE74AC219B4669D79 /* genlang.cpp */; settings = {ATTRIBUTES = (); }; }; + 496FD9CEEB508016AFB9F928 /* qico in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8F500B5166907B6D9A7C3E3D /* qico */; }; + 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 */; }; + B89F16FD30F4E782CC231D7B /* mlmain.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = A83296E7180A28ABB0FD85D2 /* mlmain.cpp */; settings = {ATTRIBUTES = (); }; }; + 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 */; }; + 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 */ + 0746FEA1193CD5E500F5C3FD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6DB9C3763D02B1415CD9D565 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9BBFDCA776106924C40572AD; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 33A9E861B2FAD8C39E154E7C /* MetaLang.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = MetaLang.pro; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.3.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; + 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 = ""; }; + 54D6D1A7260739988F6FC406 /* genlang.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = genlang.h; path = SourceFiles/_other/genlang.h; sourceTree = ""; }; + 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 = ""; }; + 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.3.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 669AB12AE74AC219B4669D79 /* genlang.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = genlang.cpp; path = SourceFiles/_other/genlang.cpp; sourceTree = ""; }; + 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 = ""; }; + 680437016D61255E7F889A94 /* moc_genlang.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_genlang.cpp; path = GeneratedFiles/Debug/moc_genlang.cpp; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 83FFCB79DDEB015B4A5CB301 /* MetaLang.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MetaLang.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; + 98B4CE8F50ACDC930E6A1148 /* metalang_plugin_import.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = metalang_plugin_import.cpp; sourceTree = ""; }; + 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 = ""; }; + 9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; + 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 = ""; }; + A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + A83296E7180A28ABB0FD85D2 /* mlmain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mlmain.cpp; path = SourceFiles/_other/mlmain.cpp; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.3.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.3.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + D7D645CBFF3B86CF39CEF3DA /* mlmain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mlmain.h; path = SourceFiles/_other/mlmain.h; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.3.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.3.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 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 = ""; }; +/* 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 = ""; + }; + 2EB56BE3C2D93CDAB0C52E67 /* Sources */ = { + isa = PBXGroup; + children = ( + 73F2E45FDEB381A085D37A49 /* SourceFiles */, + 98B4CE8F50ACDC930E6A1148 /* metalang_plugin_import.cpp */, + ); + name = Sources; + sourceTree = ""; + }; + 31562E815E3DF5B1A777D3EF /* _other */ = { + isa = PBXGroup; + children = ( + A83296E7180A28ABB0FD85D2 /* mlmain.cpp */, + 669AB12AE74AC219B4669D79 /* genlang.cpp */, + D7D645CBFF3B86CF39CEF3DA /* mlmain.h */, + 54D6D1A7260739988F6FC406 /* genlang.h */, + ); + name = _other; + sourceTree = ""; + }; + 73F2E45FDEB381A085D37A49 /* SourceFiles */ = { + isa = PBXGroup; + children = ( + 31562E815E3DF5B1A777D3EF /* _other */, + ); + name = SourceFiles; + sourceTree = ""; + }; + 74B182DB50CB5611B5C1C297 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 33A9E861B2FAD8C39E154E7C /* MetaLang.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 = ""; + }; + 801973D3334D0FCA849CF485 /* Debug */ = { + isa = PBXGroup; + children = ( + 680437016D61255E7F889A94 /* moc_genlang.cpp */, + ); + name = Debug; + sourceTree = ""; + }; + 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 = ""; + }; + D0B536A85E53302E4F66CE23 /* GeneratedFiles */ = { + isa = PBXGroup; + children = ( + 801973D3334D0FCA849CF485 /* Debug */, + ); + name = GeneratedFiles; + sourceTree = ""; + }; + E8C543AB96796ECAA2E65C57 /* MetaLang */ = { + isa = PBXGroup; + children = ( + 2EB56BE3C2D93CDAB0C52E67 /* Sources */, + 25B08E2869634E9BCBA333A2 /* Generated Sources */, + 74B182DB50CB5611B5C1C297 /* Supporting Files */, + AF39DD055C3EF8226FBE929D /* Frameworks */, + FE0A091FDBFB3E9C31B7A1BD /* Products */, + ); + name = MetaLang; + sourceTree = ""; + }; + FE0A091FDBFB3E9C31B7A1BD /* Products */ = { + isa = PBXGroup; + children = ( + 83FFCB79DDEB015B4A5CB301 /* MetaLang.app */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 6FFA5F0FB08CCD004808E1F3 /* MetaLang */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "MetaLang" */; + buildPhases = ( + F7E50F631C51CD5B5DC0BC43 /* Compile Sources */, + D1C883685E82D5676953459A /* Link Binary With Libraries */, + ); + buildRules = ( + ); + dependencies = ( + 076DA1F6C10E47842EC316F3 /* PBXTargetDependency */, + ); + name = MetaLang; + productInstallPath = ../Mac/DebugLang/; + productName = MetaLang; + productReference = 83FFCB79DDEB015B4A5CB301 /* MetaLang.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 "MetaLang" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + en, + ); + mainGroup = E8C543AB96796ECAA2E65C57 /* MetaLang */; + productRefGroup = FE0A091FDBFB3E9C31B7A1BD /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 6FFA5F0FB08CCD004808E1F3 /* MetaLang */, + 9BBFDCA776106924C40572AD /* Preprocess */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + 07C3AF44194CCD360016CFF1 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "mkdir -p ./GeneratedFiles/Debug"; + }; + 7EF0942E79C014DCEC8976BC /* Qt Preprocessors */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + name = "Qt Preprocessors"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "make -C . -f MetaLang.xcodeproj/qt_preprocess.mak"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + F7E50F631C51CD5B5DC0BC43 /* Compile Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B89F16FD30F4E782CC231D7B /* mlmain.cpp in Compile Sources */, + 34D95ABDC12C1841CEF3B2E3 /* genlang.cpp in Compile Sources */, + 1677F0186F1CAD0E8B91FFF7 /* metalang_plugin_import.cpp in Compile Sources */, + 0E4EEB1BFC9FA7662AD934C6 /* moc_genlang.cpp in Compile Sources */, + ); + name = "Compile Sources"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 076DA1F6C10E47842EC316F3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 9BBFDCA776106924C40572AD /* Preprocess */; + targetProxy = 0746FEA1193CD5E500F5C3FD /* 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/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 = Lang.plist; + INSTALL_DIR = ../Mac/ReleaseLang/; + 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/DebugIntermediateLang/; + 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 = MetaLang; + QT_LIBRARY_SUFFIX = ""; + SDKROOT = macosx; + SYMROOT = ../Mac/ReleaseLang; + }; + 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/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 = Lang.plist; + INSTALL_DIR = ../Mac/DebugLang/; + 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/DebugIntermediateLang/; + 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 = MetaLang; + QT_LIBRARY_SUFFIX = _debug; + SDKROOT = macosx; + SYMROOT = ../Mac/DebugLang; + }; + name = Debug; + }; + 6666AA5E688052234F6758D8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Lang$(EFFECTIVE_PLATFORM_NAME)"; + COPY_PHASE_STRIP = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + 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", + /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", + ); + INSTALL_DIR = ../Mac/ReleaseLang/; + OBJROOT = ../Mac/ReleaseIntermediateLang; + PRODUCT_NAME = MetaLang; + QT_LIBRARY_SUFFIX = ""; + SDKROOT = macosx; + SYMROOT = ./../Mac; + }; + name = Release; + }; + 77418F46922677BB04ED38DD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Lang$(EFFECTIVE_PLATFORM_NAME)"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + 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", + /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", + ); + INSTALL_DIR = ../Mac/DebugLang/; + OBJROOT = ../Mac/DebugIntermediateLang; + PRODUCT_NAME = MetaLang; + QT_LIBRARY_SUFFIX = _debug; + SDKROOT = macosx; + SYMROOT = ./../Mac; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "MetaLang" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 77418F46922677BB04ED38DD /* Debug */, + 6666AA5E688052234F6758D8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "MetaLang" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3AA6C32AC930069E80220CF1 /* Debug */, + 339EE1B2CC4FC24589A0EA95 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = 6DB9C3763D02B1415CD9D565 /* Project object */; +} diff --git a/Telegram/MetaLang.xcodeproj/qt_preprocess.mak b/Telegram/MetaLang.xcodeproj/qt_preprocess.mak new file mode 100644 index 000000000..a4f40835a --- /dev/null +++ b/Telegram/MetaLang.xcodeproj/qt_preprocess.mak @@ -0,0 +1,68 @@ +############################################################################# +# Makefile for building: ../Mac/DebugLang/MetaLang.app/Contents/MacOS/MetaLang +# Generated by qmake (3.0) (Qt 5.3.0) +# Project: MetaLang.pro +# Template: app +# Command: /usr/local/Qt-5.3.0/bin/qmake -spec macx-xcode -o MetaLang.xcodeproj/project.pbxproj MetaLang.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_genlang.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_genlang.cpp +compiler_moc_header_clean: + -$(DEL_FILE) GeneratedFiles/Debug/moc_genlang.cpp +GeneratedFiles/Debug/moc_genlang.cpp: ../../Libraries/QtStatic/qtbase/include/QtCore/QMap \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QVector \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QFile \ + ../../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/genlang.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/genlang.h -o GeneratedFiles/Debug/moc_genlang.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 + diff --git a/Telegram/MetaStyle.pro b/Telegram/MetaStyle.pro new file mode 100644 index 000000000..f5ff0f7e5 --- /dev/null +++ b/Telegram/MetaStyle.pro @@ -0,0 +1,31 @@ +QT += core + +CONFIG(debug, debug|release) { + DEFINES += _DEBUG + OBJECTS_DIR = ./../Mac/DebugIntermediateStyle + MOC_DIR = ./GeneratedFiles/Debug + DESTDIR = ./../Mac/DebugStyle +} +CONFIG(release, debug|release) { + OBJECTS_DIR = ./../Mac/ReleaseIntermediateStyle + MOC_DIR = ./GeneratedFiles/Release + DESTDIR = ./../Mac/ReleaseStyle +} + +macx { + QMAKE_INFO_PLIST = ./SourceFiles/_other/Style.plist + QMAKE_LFLAGS += -framework Cocoa +} + +SOURCES += \ + ./SourceFiles/_other/msmain.cpp \ + ./SourceFiles/_other/genstyles.cpp \ + +HEADERS += \ + ./SourceFiles/_other/msmain.h \ + ./SourceFiles/_other/genstyles.h \ + +INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui\ + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore\ + ./../../Libraries/QtStatic/qtbase/include\ + diff --git a/Telegram/MetaStyle.xcodeproj/project.pbxproj b/Telegram/MetaStyle.xcodeproj/project.pbxproj new file mode 100644 index 000000000..71438b9d9 --- /dev/null +++ b/Telegram/MetaStyle.xcodeproj/project.pbxproj @@ -0,0 +1,817 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXAggregateTarget section */ + 5E275BA59C8BA5B561E14CF4 /* Preprocess */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "MetaStyle" */; + buildPhases = ( + 07C3AF43194CCD0F0016CFF1 /* ShellScript */, + 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 */; }; + 3D6772E35214B81E50791089 /* genstyles.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = F8BC976260B6D624F23C32D6 /* genstyles.cpp */; settings = {ATTRIBUTES = (); }; }; + 496FD9CEEB508016AFB9F928 /* qico in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8F500B5166907B6D9A7C3E3D /* qico */; }; + 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 */; }; + 728CDDB7D7F2B9FF141651AD /* msmain.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = EF5243ECB3132AF2796F09DF /* msmain.cpp */; settings = {ATTRIBUTES = (); }; }; + 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 */; }; + CBF24309A148222794F28401 /* moc_genstyles.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 861D2151FB56504EB72BDB6E /* moc_genstyles.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 */; }; + E5189462121C76398D36DFDC /* metastyle_plugin_import.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 6C95BA41C0AD8CEBCDD59F5B /* metastyle_plugin_import.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 */ + 0746FEAC193D006900F5C3FD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6DB9C3763D02B1415CD9D565 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5E275BA59C8BA5B561E14CF4; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 10F719DFC6D0B05605ED1C16 /* MetaStyle.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = MetaStyle.pro; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 2CBD32689B153445ED220FAE /* MetaStyle.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MetaStyle.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.3.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.3.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 6C95BA41C0AD8CEBCDD59F5B /* metastyle_plugin_import.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = metastyle_plugin_import.cpp; sourceTree = ""; }; + 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 = ""; }; + 6FF81CB4A724CE1990CEE99A /* msmain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = msmain.h; path = SourceFiles/_other/msmain.h; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 861D2151FB56504EB72BDB6E /* moc_genstyles.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_genstyles.cpp; path = GeneratedFiles/Debug/moc_genstyles.cpp; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; + 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 = ""; }; + 9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; + 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 = ""; }; + A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; + A35D133D7C0EFB42FA85D194 /* genstyles.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = genstyles.h; path = SourceFiles/_other/genstyles.h; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.3.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.3.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.3.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.3.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + EF5243ECB3132AF2796F09DF /* msmain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = msmain.cpp; path = SourceFiles/_other/msmain.cpp; sourceTree = ""; }; + F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + F8BC976260B6D624F23C32D6 /* genstyles.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = genstyles.cpp; path = SourceFiles/_other/genstyles.cpp; sourceTree = ""; }; + 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 = ""; }; + FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 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 = ""; }; +/* 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 = ""; + }; + 2EB56BE3C2D93CDAB0C52E67 /* Sources */ = { + isa = PBXGroup; + children = ( + 73F2E45FDEB381A085D37A49 /* SourceFiles */, + 6C95BA41C0AD8CEBCDD59F5B /* metastyle_plugin_import.cpp */, + ); + name = Sources; + sourceTree = ""; + }; + 31562E815E3DF5B1A777D3EF /* _other */ = { + isa = PBXGroup; + children = ( + EF5243ECB3132AF2796F09DF /* msmain.cpp */, + F8BC976260B6D624F23C32D6 /* genstyles.cpp */, + 6FF81CB4A724CE1990CEE99A /* msmain.h */, + A35D133D7C0EFB42FA85D194 /* genstyles.h */, + ); + name = _other; + sourceTree = ""; + }; + 73F2E45FDEB381A085D37A49 /* SourceFiles */ = { + isa = PBXGroup; + children = ( + 31562E815E3DF5B1A777D3EF /* _other */, + ); + name = SourceFiles; + sourceTree = ""; + }; + 74B182DB50CB5611B5C1C297 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 10F719DFC6D0B05605ED1C16 /* MetaStyle.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 = ""; + }; + 801973D3334D0FCA849CF485 /* Debug */ = { + isa = PBXGroup; + children = ( + 861D2151FB56504EB72BDB6E /* moc_genstyles.cpp */, + ); + name = Debug; + sourceTree = ""; + }; + 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 = ""; + }; + D0B536A85E53302E4F66CE23 /* GeneratedFiles */ = { + isa = PBXGroup; + children = ( + 801973D3334D0FCA849CF485 /* Debug */, + ); + name = GeneratedFiles; + sourceTree = ""; + }; + E8C543AB96796ECAA2E65C57 /* MetaStyle */ = { + isa = PBXGroup; + children = ( + 2EB56BE3C2D93CDAB0C52E67 /* Sources */, + 25B08E2869634E9BCBA333A2 /* Generated Sources */, + 74B182DB50CB5611B5C1C297 /* Supporting Files */, + AF39DD055C3EF8226FBE929D /* Frameworks */, + FE0A091FDBFB3E9C31B7A1BD /* Products */, + ); + name = MetaStyle; + sourceTree = ""; + }; + FE0A091FDBFB3E9C31B7A1BD /* Products */ = { + isa = PBXGroup; + children = ( + 2CBD32689B153445ED220FAE /* MetaStyle.app */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 4F0CF954E7A00B07204FA0B2 /* MetaStyle */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "MetaStyle" */; + buildPhases = ( + F7E50F631C51CD5B5DC0BC43 /* Compile Sources */, + D1C883685E82D5676953459A /* Link Binary With Libraries */, + ); + buildRules = ( + ); + dependencies = ( + CCEE60BFA9DEFDFF202AFD47 /* PBXTargetDependency */, + ); + name = MetaStyle; + productInstallPath = ../Mac/DebugStyle/; + productName = MetaStyle; + productReference = 2CBD32689B153445ED220FAE /* MetaStyle.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 6DB9C3763D02B1415CD9D565 /* Project object */ = { + isa = PBXProject; + attributes = { + }; + buildConfigurationList = DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "MetaStyle" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + en, + ); + mainGroup = E8C543AB96796ECAA2E65C57 /* MetaStyle */; + productRefGroup = FE0A091FDBFB3E9C31B7A1BD /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 4F0CF954E7A00B07204FA0B2 /* MetaStyle */, + 5E275BA59C8BA5B561E14CF4 /* Preprocess */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + 07C3AF43194CCD0F0016CFF1 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "mkdir -p ./GeneratedFiles/Debug"; + }; + 7EF0942E79C014DCEC8976BC /* Qt Preprocessors */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + name = "Qt Preprocessors"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "make -C . -f MetaStyle.xcodeproj/qt_preprocess.mak"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + F7E50F631C51CD5B5DC0BC43 /* Compile Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 728CDDB7D7F2B9FF141651AD /* msmain.cpp in Compile Sources */, + 3D6772E35214B81E50791089 /* genstyles.cpp in Compile Sources */, + E5189462121C76398D36DFDC /* metastyle_plugin_import.cpp in Compile Sources */, + CBF24309A148222794F28401 /* moc_genstyles.cpp in Compile Sources */, + ); + name = "Compile Sources"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + CCEE60BFA9DEFDFF202AFD47 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5E275BA59C8BA5B561E14CF4 /* Preprocess */; + targetProxy = 0746FEAC193D006900F5C3FD /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 339EE1B2CC4FC24589A0EA95 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = x86_64; + CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang; + 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; + 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 = Style.plist; + INSTALL_DIR = ../Mac/ReleaseStyle/; + 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/DebugIntermediateStyle/; + 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 = MetaStyle; + QT_LIBRARY_SUFFIX = ""; + SDKROOT = macosx; + SYMROOT = ../Mac/ReleaseStyle; + }; + name = Release; + }; + 3AA6C32AC930069E80220CF1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = x86_64; + CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang; + 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; + 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 = Style.plist; + INSTALL_DIR = ../Mac/DebugStyle/; + 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/DebugIntermediateStyle/; + 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 = MetaStyle; + QT_LIBRARY_SUFFIX = _debug; + SDKROOT = macosx; + SYMROOT = ../Mac/DebugStyle; + }; + name = Debug; + }; + 6666AA5E688052234F6758D8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Style$(EFFECTIVE_PLATFORM_NAME)"; + COPY_PHASE_STRIP = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + 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", + /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", + ); + INSTALL_DIR = ./../Mac/ReleaseStyle/; + OBJROOT = ./../Mac/ReleaseIntermediateStyle; + PRODUCT_NAME = MetaStyle; + QT_LIBRARY_SUFFIX = ""; + SDKROOT = macosx; + SYMROOT = ./../Mac; + }; + name = Release; + }; + 77418F46922677BB04ED38DD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)Style$(EFFECTIVE_PLATFORM_NAME)"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + 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", + /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", + ); + INSTALL_DIR = ./../Mac/DebugStyle/; + OBJROOT = ./../Mac/DebugIntermediateStyle; + PRODUCT_NAME = MetaStyle; + QT_LIBRARY_SUFFIX = _debug; + SDKROOT = macosx; + SYMROOT = ./../Mac; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "MetaStyle" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 77418F46922677BB04ED38DD /* Debug */, + 6666AA5E688052234F6758D8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "MetaStyle" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3AA6C32AC930069E80220CF1 /* Debug */, + 339EE1B2CC4FC24589A0EA95 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = 6DB9C3763D02B1415CD9D565 /* Project object */; +} diff --git a/Telegram/MetaStyle.xcodeproj/qt_preprocess.mak b/Telegram/MetaStyle.xcodeproj/qt_preprocess.mak new file mode 100644 index 000000000..611aed8c6 --- /dev/null +++ b/Telegram/MetaStyle.xcodeproj/qt_preprocess.mak @@ -0,0 +1,67 @@ +############################################################################# +# Makefile for building: ../Mac/DebugStyle/MetaStyle.app/Contents/MacOS/MetaStyle +# Generated by qmake (3.0) (Qt 5.3.0) +# Project: MetaStyle.pro +# Template: app +# Command: /usr/local/Qt-5.3.0/bin/qmake -spec macx-xcode -o MetaStyle.xcodeproj/project.pbxproj MetaStyle.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_genstyles.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_genstyles.cpp +compiler_moc_header_clean: + -$(DEL_FILE) GeneratedFiles/Debug/moc_genstyles.cpp +GeneratedFiles/Debug/moc_genstyles.cpp: ../../Libraries/QtStatic/qtbase/include/QtCore/QMap \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QVector \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QBitmap \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QBuffer \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QFileInfo \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QFile \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTextStream \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QString \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QCoreApplication \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QGuiApplication \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QPainter \ + SourceFiles/_other/genstyles.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/genstyles.h -o GeneratedFiles/Debug/moc_genstyles.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 + diff --git a/Telegram/Preprocess copy-Info.plist b/Telegram/Preprocess copy-Info.plist new file mode 100644 index 000000000..053296071 --- /dev/null +++ b/Telegram/Preprocess copy-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleExecutable + Telegram + CFBundleGetInfoString + Telegram Desktop messaging app + CFBundleIdentifier + com.tdesktop.${PRODUCT_NAME:rfc1034identifier} + CFBundlePackageType + APPL + CFBundleShortVersionString + 0.5.1 + CFBundleSignature + ???? + NOTE + + NSPrincipalClass + NSApplication + + diff --git a/Telegram/SourceFiles/Telegram.plist b/Telegram/SourceFiles/Telegram.plist new file mode 100644 index 000000000..d8286c37a --- /dev/null +++ b/Telegram/SourceFiles/Telegram.plist @@ -0,0 +1,22 @@ + + + + + NSPrincipalClass + NSApplication + CFBundleIconFile + + CFBundlePackageType + APPL + CFBundleGetInfoString + Created by Qt/QMake + CFBundleSignature + ???? + CFBundleExecutable + Telegram + CFBundleIdentifier + com.yourcompany.${PRODUCT_NAME:rfc1034identifier} + NOTE + This file was generated by Qt/QMake. + + diff --git a/Telegram/SourceFiles/_other/Lang.plist b/Telegram/SourceFiles/_other/Lang.plist new file mode 100644 index 000000000..2a5b32ce2 --- /dev/null +++ b/Telegram/SourceFiles/_other/Lang.plist @@ -0,0 +1,22 @@ + + + + + NSPrincipalClass + NSApplication + CFBundleIconFile + + CFBundlePackageType + APPL + CFBundleGetInfoString + Created by Qt/QMake + CFBundleSignature + ???? + CFBundleExecutable + MetaLang + CFBundleIdentifier + com.yourcompany.${PRODUCT_NAME:rfc1034identifier} + NOTE + This file was generated by Qt/QMake. + + diff --git a/Telegram/SourceFiles/_other/Style.plist b/Telegram/SourceFiles/_other/Style.plist new file mode 100644 index 000000000..2df9c0113 --- /dev/null +++ b/Telegram/SourceFiles/_other/Style.plist @@ -0,0 +1,22 @@ + + + + + NSPrincipalClass + NSApplication + CFBundleIconFile + + CFBundlePackageType + APPL + CFBundleGetInfoString + Created by Qt/QMake + CFBundleSignature + ???? + CFBundleExecutable + MetaStyle + CFBundleIdentifier + com.yourcompany.${PRODUCT_NAME:rfc1034identifier} + NOTE + This file was generated by Qt/QMake. + + diff --git a/Telegram/SourceFiles/_other/genlang.cpp b/Telegram/SourceFiles/_other/genlang.cpp index c92b48309..ce3cee61b 100644 --- a/Telegram/SourceFiles/_other/genlang.cpp +++ b/Telegram/SourceFiles/_other/genlang.cpp @@ -17,8 +17,10 @@ Copyright (c) 2014 John Preston, https://tdesktop.com */ #include "genlang.h" +#ifdef Q_OS_WIN #include Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin) +#endif typedef unsigned int uint32; @@ -65,7 +67,7 @@ bool skipJunk(const char *&from, const char *end) { do { start = from; if (!skipWhitespaces(from, end)) return false; - if (!skipComment(from, end)) throw exception("Unexpected end of comment!"); + if (!skipComment(from, end)) throw Exception("Unexpected end of comment!"); } while (start != from); return true; } @@ -74,35 +76,35 @@ void readKeyValue(const char *&from, const char *end) { if (!skipJunk(from, end)) return; 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; } - QString varName = QString::fromUtf8(nameStart, from - nameStart); + QString varName = QString::fromUtf8(nameStart, int(from - nameStart)); - if (!skipJunk(from, end)) throw exception("Unexpected end of file!"); - if (*from != ':') throw exception(QString("':' expected after '%1'").arg(varName).toUtf8().constData()); + if (!skipJunk(from, end)) throw Exception("Unexpected end of file!"); + if (*from != ':') throw Exception(QString("':' expected after '%1'").arg(varName)); - if (!skipJunk(++from, end)) throw exception("Unexpected end of file!"); - if (*from != '"') throw exception(QString("Expected string after '%1:'").arg(varName).toUtf8().constData()); + if (!skipJunk(++from, end)) throw Exception("Unexpected end of file!"); + if (*from != '"') throw Exception(QString("Expected string after '%1:'").arg(varName)); QByteArray varValue; const char *start = ++from; while (from < end && *from != '"') { if (*from == '\\') { - if (from + 1 >= end) throw exception("Unexpected end of file!"); + if (from + 1 >= end) throw Exception("Unexpected end of file!"); if (*(from + 1) == '"' || *(from + 1) == '\\') { - if (from > start) varValue.append(start, from - start); + if (from > start) varValue.append(start, int(from - start)); start = ++from; } } ++from; } - if (from >= end) throw exception("Unexpected end of file!"); - if (from > start) varValue.append(start, from - start); + if (from >= end) throw Exception("Unexpected end of file!"); + if (from > start) varValue.append(start, int(from - start)); - if (!skipJunk(++from, end)) throw exception("Unexpected end of file!"); - if (*from != ';') throw exception(QString("';' expected after '%1: \"value\"'").arg(varName).toUtf8().constData()); + if (!skipJunk(++from, end)) throw Exception("Unexpected end of file!"); + if (*from != ';') throw Exception(QString("';' expected after '%1: \"value\"'").arg(varName)); skipJunk(++from, end); @@ -110,12 +112,12 @@ void readKeyValue(const char *&from, const char *end) { if (varValue == "LTR" || varValue == "RTL") { layoutDirection = QString::fromUtf8(varValue); } else { - throw exception(QString("Unexpected value for 'direction' key: '%1'").arg(QString::fromUtf8(varValue)).toUtf8().constData()); + throw Exception(QString("Unexpected value for 'direction' key: '%1'").arg(QString::fromUtf8(varValue))); } } else if (varName.midRef(0, 4) != "lng_") { - throw exception(QString("Bad key '%1'").arg(varName).toUtf8().constData()); + throw Exception(QString("Bad key '%1'").arg(varName)); } else if (keys.constFind(varName) != keys.cend()) { - throw exception(QString("Key doubled '%1'").arg(varName).toUtf8().constData()); + throw Exception(QString("Key doubled '%1'").arg(varName)); } else { keys.insert(varName, QString::fromUtf8(varValue)); keysOrder.push_back(varName); @@ -130,7 +132,7 @@ QString escapeCpp(const QString &key, QString value, bool wideChar) { bool instr = false; for (const QChar *ch = value.constData(), *e = value.constData() + value.size(); ch != e; ++ch) { if (ch->unicode() < 32) { - throw exception(QString("Bad value for key '%1'").arg(key).toUtf8().constData()); + throw Exception(QString("Bad value for key '%1'").arg(key)); } else if (ch->unicode() > 127) { if (instr) { res.append('"'); @@ -428,8 +430,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\ } if (write_cpp) { cout << "lang.cpp updated, writing " << keysOrder.size() << " rows.\n"; - if (!cpp.open(QIODevice::WriteOnly)) throw exception("Could not open lang.cpp for writing!"); - if (cpp.write(cppText) != cppText.size()) throw exception("Could not open lang.cpp for writing!"); + if (!cpp.open(QIODevice::WriteOnly)) throw Exception("Could not open lang.cpp for writing!"); + if (cpp.write(cppText) != cppText.size()) throw Exception("Could not open lang.cpp for writing!"); } if (h.open(QIODevice::ReadOnly)) { QByteArray wasH = h.readAll(); @@ -442,8 +444,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\ } if (write_h) { cout << "lang.h updated, writing " << keysOrder.size() << " rows.\n"; - if (!h.open(QIODevice::WriteOnly)) throw exception("Could not open lang.h for writing!"); - if (h.write(hText) != hText.size()) throw exception("Could not open lang.h for writing!"); + if (!h.open(QIODevice::WriteOnly)) throw Exception("Could not open lang.h for writing!"); + if (h.write(hText) != hText.size()) throw Exception("Could not open lang.h for writing!"); } } catch (exception &e) { cout << e.what() << "\n"; diff --git a/Telegram/SourceFiles/_other/genlang.h b/Telegram/SourceFiles/_other/genlang.h index 31f8b4609..e4bc246dd 100644 --- a/Telegram/SourceFiles/_other/genlang.h +++ b/Telegram/SourceFiles/_other/genlang.h @@ -35,6 +35,22 @@ using std::cout; using std::cerr; using std::exception; +class Exception : public exception { +public: + + Exception(const QString &msg) : _msg(msg) { + } + + virtual const char *what() const throw() { + return _msg.toUtf8().constData(); + } + virtual ~Exception() throw() { + } + +private: + QString _msg; +}; + bool genLang(const QString &lang_in, const QString &lang_out); class GenLang : public QObject { diff --git a/Telegram/SourceFiles/_other/genstyles.cpp b/Telegram/SourceFiles/_other/genstyles.cpp index 23b2cf3f6..b2dddf68b 100644 --- a/Telegram/SourceFiles/_other/genstyles.cpp +++ b/Telegram/SourceFiles/_other/genstyles.cpp @@ -17,8 +17,10 @@ Copyright (c) 2014 John Preston, https://tdesktop.com */ #include "genstyles.h" +#ifdef Q_OS_WIN #include Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin) +#endif enum ScalarType { scNumber, @@ -108,12 +110,12 @@ bool skipComment(const char *&from, const char *end) { } void readName(const char *&from, const char *end, string &token) { - if (from >= end) throw exception("Unexpected end of file!"); + if (from >= end) throw Exception("Unexpected end of file!"); const char *start = from; char ch = *from; if (!((ch >= 'a' && ch <= 'z') || ((ch >= 'A') && (ch <= 'Z')))) { - throw exception("Unknown error :("); + throw Exception("Unknown error :("); } while (++from < end) { ch = *from; @@ -123,12 +125,12 @@ void readName(const char *&from, const char *end, string &token) { } void readString(const char *&from, const char *end, string &token) { - if (from + 1 >= end) throw exception("Unexpected end of file!"); + if (from + 1 >= end) throw Exception("Unexpected end of file!"); token = ""; char border = *from; if (border != '"' && border != '\'') { - throw exception("Unknown error :("); + throw Exception("Unknown error :("); } bool spec = false; @@ -143,13 +145,13 @@ void readString(const char *&from, const char *end, string &token) { } else if (*from == '\\' || *from == '"' || *from == '\'') { token += *from; } else { - throw exception(QString("Unexpected escaped character in string: %1").arg(*from).toUtf8().constData()); + throw Exception(QString("Unexpected escaped character in string: %1").arg(*from)); } spec = false; } else { token += *from; } - if (++from >= end) throw exception("Unexpected end of file!"); + if (++from >= end) throw Exception("Unexpected end of file!"); } ++from; } @@ -162,20 +164,20 @@ char hexChar(char ch) { } void readColor(const char *&from, const char *end, string &token) { - if (from + 3 >= end) throw exception("Unexpected end of file!"); + if (from + 3 >= end) throw Exception("Unexpected end of file!"); token.resize(8); int len = 0; for (const char *ch = from + 1; ch < end; ++ch) { - if (*ch >= '0' && *ch <= '9' || *ch >= 'A' && *ch <= 'F' || *ch >= 'a' && *ch <= 'f') { + if ((*ch >= '0' && *ch <= '9') || (*ch >= 'A' && *ch <= 'F') || (*ch >= 'a' && *ch <= 'f')) { ++len; } else { break; } } if (len != 3 && len != 4 && len != 6 && len != 8) { - throw exception("Bad color token"); + throw Exception("Bad color token"); } if (len == 3 || len == 4) { token[0] = token[1] = hexChar(*(++from)); @@ -204,21 +206,20 @@ void readColor(const char *&from, const char *end, string &token) { } void readNumber(const char *&from, const char *end, string &token) { - if (from >= end) throw exception("Unexpected end of file!"); + if (from >= end) throw Exception("Unexpected end of file!"); bool neg = false; if (*from == '-') { neg = true; - if (++from >= end) throw exception("Unexpected end of file!"); + if (++from >= end) throw Exception("Unexpected end of file!"); } - if (*from == '0' && from < end && *(from + 1) >= '0' && *(from + 1) <= '9') throw exception("Bad number token!"); + if (*from == '0' && from < end && *(from + 1) >= '0' && *(from + 1) <= '9') throw Exception("Bad number token!"); - bool wasDot = false; token = neg ? "-" : ""; for (bool wasDot = false; from < end; ++from) { if (*from == '.') { - if (wasDot) throw exception("Unexpected dot in number!"); + if (wasDot) throw Exception("Unexpected dot in number!"); wasDot = true; } else if (*from < '0' || *from > '9') { break; @@ -231,8 +232,8 @@ void readClassGenToken(const char *&from, const char *end, ClassGenTokenType &to const char *start; do { start = from; - if (!skipWhitespaces(from, end)) throw exception("Unexpected end of file!"); - if (!skipComment(from, end)) throw exception("Unexpected end of comment!"); + if (!skipWhitespaces(from, end)) throw Exception("Unexpected end of file!"); + if (!skipComment(from, end)) throw Exception("Unexpected end of comment!"); } while (start != from); if ((*from >= 'a' && *from <= 'z') || ((*from >= 'A') && (*from <= 'Z'))) { @@ -247,7 +248,7 @@ void readClassGenToken(const char *&from, const char *end, ClassGenTokenType &to } else if (*from == '}') { tokenType = csClassFinish; } else { - throw exception("Could not parse token!"); + throw Exception("Could not parse token!"); } ++from; return; @@ -289,7 +290,7 @@ bool genClasses(const QString &classes_in, const QString &classes_out) { break; } if (type != csName) { - throw exception(QString("Unexpected token, type %1: %2").arg(type).arg(token.c_str()).toUtf8().constData()); + throw Exception(QString("Unexpected token, type %1: %2").arg(type).arg(token.c_str())); } byIndex.push_back(ClassData()); @@ -298,14 +299,14 @@ bool genClasses(const QString &classes_in, const QString &classes_out) { readClassGenToken(text, end, type, token); if (type == csDelimeter) { readClassGenToken(text, end, type, token); - if (type != csName) throw exception(QString("Unexpected token after '%1:', type %2").arg(cls.name.c_str()).arg(type).toUtf8().constData()); + if (type != csName) throw Exception(QString("Unexpected token after '%1:', type %2").arg(cls.name.c_str()).arg(type)); QMap::const_iterator i = byName.constFind(token); - if (i == byName.cend()) throw exception(QString("Parent class '%1' not found for class '%2'").arg(token.c_str()).arg(cls.name.c_str()).toUtf8().constData()); + if (i == byName.cend()) throw Exception(QString("Parent class '%1' not found for class '%2'").arg(token.c_str()).arg(cls.name.c_str())); cls.fields = byIndex[i.value()].fields; readClassGenToken(text, end, type, token); } - if (type != csClassStart) throw exception(QString("Unexpected token after '%1:%2', type %3").arg(cls.name.c_str()).arg(token.c_str()).arg(type).toUtf8().constData()); + if (type != csClassStart) throw Exception(QString("Unexpected token after '%1:%2', type %3").arg(cls.name.c_str()).arg(token.c_str()).arg(type)); do { string fname, ftype; @@ -314,13 +315,13 @@ bool genClasses(const QString &classes_in, const QString &classes_out) { byName.insert(cls.name, byIndex.size() - 1); break; } - if (type != csName) throw exception(QString("Unexpected token %1 while reading class '%2'").arg(type).arg(cls.name.c_str()).toUtf8().constData()); + if (type != csName) throw Exception(QString("Unexpected token %1 while reading class '%2'").arg(type).arg(cls.name.c_str())); readClassGenToken(text, end, type, token); - if (type != csDelimeter) throw exception(QString("Unexpected token %1 while reading field '%2' in class '%3'").arg(type).arg(fname.c_str()).arg(cls.name.c_str()).toUtf8().constData()); + if (type != csDelimeter) throw Exception(QString("Unexpected token %1 while reading field '%2' in class '%3'").arg(type).arg(fname.c_str()).arg(cls.name.c_str())); readClassGenToken(text, end, type, ftype); - if (type != csName) throw exception(QString("Unexpected token %1 while reading field '%2' in class '%3'").arg(type).arg(fname.c_str()).arg(cls.name.c_str()).toUtf8().constData()); + if (type != csName) throw Exception(QString("Unexpected token %1 while reading field '%2' in class '%3'").arg(type).arg(fname.c_str()).arg(cls.name.c_str())); readClassGenToken(text, end, type, token); - if (type != csFieldFinish) throw exception(QString("Unexpected token %1 while reading field '%2:%3' in class '%4'").arg(type).arg(fname.c_str()).arg(ftype.c_str()).arg(cls.name.c_str()).toUtf8().constData()); + if (type != csFieldFinish) throw Exception(QString("Unexpected token %1 while reading field '%2:%3' in class '%4'").arg(type).arg(fname.c_str()).arg(ftype.c_str()).arg(cls.name.c_str())); ScalarType typeIndex = scTypesCount; for (int t = 0; t < scTypesCount; ++t) { @@ -329,9 +330,9 @@ bool genClasses(const QString &classes_in, const QString &classes_out) { break; } } - if (typeIndex == scTypesCount) throw exception(QString("Unknown field type %1 while reading field '%2' in class '%3'").arg(ftype.c_str()).arg(fname.c_str()).arg(cls.name.c_str()).toUtf8().constData()); + if (typeIndex == scTypesCount) throw Exception(QString("Unknown field type %1 while reading field '%2' in class '%3'").arg(ftype.c_str()).arg(fname.c_str()).arg(cls.name.c_str())); FieldTypesMap::const_iterator alr = cls.fields.find(fname); - if (alr != cls.fields.cend()) throw exception(QString("Redeclaration of field '%1' in class '%2'").arg(fname.c_str()).arg(cls.name.c_str()).toUtf8().constData()); + if (alr != cls.fields.cend()) throw Exception(QString("Redeclaration of field '%1' in class '%2'").arg(fname.c_str()).arg(cls.name.c_str())); cls.fields.insert(fname, typeIndex); } while(true); } @@ -402,8 +403,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\ out.close(); } cout << "Style classes compiled, writing " << byIndex.size() << " classes.\n"; - if (!out.open(QIODevice::WriteOnly)) throw exception("Could not open style_classes.h for writing!"); - if (out.write(outText) != outText.size()) throw exception("Could not open style_classes.h for writing!"); + if (!out.open(QIODevice::WriteOnly)) throw Exception("Could not open style_classes.h for writing!"); + if (out.write(outText) != outText.size()) throw Exception("Could not open style_classes.h for writing!"); } catch (exception &e) { cout << e.what() << "\n"; QCoreApplication::exit(1); @@ -439,8 +440,8 @@ void readStyleGenToken(const char *&from, const char *end, StyleGenTokenType &to const char *start; do { start = from; - if (!skipWhitespaces(from, end)) throw exception("Unexpected end of file!"); - if (!skipComment(from, end)) throw exception("Unexpected end of comment!"); + if (!skipWhitespaces(from, end)) throw Exception("Unexpected end of file!"); + if (!skipComment(from, end)) throw Exception("Unexpected end of comment!"); } while (start != from); if ((*from >= 'a' && *from <= 'z') || ((*from >= 'A') && (*from <= 'Z'))) { @@ -452,7 +453,7 @@ void readStyleGenToken(const char *&from, const char *end, StyleGenTokenType &to } else if (*from == '#') { tokenType = stColor; return readColor(from, end, token); - } else if (*from == '.' || *from >= '0' && *from <= '9' || *from == '-') { + } else if (*from == '.' || (*from >= '0' && *from <= '9') || *from == '-') { tokenType = stNumber; return readNumber(from, end, token); } else if (*from == ':') { @@ -472,7 +473,7 @@ void readStyleGenToken(const char *&from, const char *end, StyleGenTokenType &to } else if (*from == '/') { tokenType = stVariant; } else { - throw exception("Could not parse token!"); + throw Exception("Could not parse token!"); } ++from; return; @@ -547,7 +548,7 @@ ScalarValue prepareString(int variant, const string &token) { string result; result.reserve(token.length() * 2); result += "(qsl(\""; - for (int i = 0, l = token.length(); i < l; ++i) { + for (quint64 i = 0, l = token.length(); i < l; ++i) { if (token[i] == '\n') { result += "\\n"; } else if (token[i] == '\r') { @@ -626,28 +627,28 @@ ScalarValue prepareColorRGB(int variant, const string &name, const char *&text, string token; readStyleGenToken(text, end, type, token); - if (type != stConsStart) throw exception(QString("Unexpected token %1 while reading rgb() cons!").arg(type).toUtf8().constData()); + if (type != stConsStart) throw Exception(QString("Unexpected token %1 while reading rgb() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading rgb() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading rgb() cons!").arg(type)); string r = token; readStyleGenToken(text, end, type, token); - if (type != stComma) throw exception(QString("Unexpected token %1 while reading rgb() cons!").arg(type).toUtf8().constData()); + if (type != stComma) throw Exception(QString("Unexpected token %1 while reading rgb() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading rgb() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading rgb() cons!").arg(type)); string g = token; readStyleGenToken(text, end, type, token); - if (type != stComma) throw exception(QString("Unexpected token %1 while reading rgb() cons!").arg(type).toUtf8().constData()); + if (type != stComma) throw Exception(QString("Unexpected token %1 while reading rgb() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading rgb() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading rgb() cons!").arg(type)); string b = token; readStyleGenToken(text, end, type, token); - if (type != stConsFinish) throw exception(QString("Unexpected token %1 while reading rgb() cons!").arg(type).toUtf8().constData()); + if (type != stConsFinish) throw Exception(QString("Unexpected token %1 while reading rgb() cons!").arg(type)); Color c; c.color = QString("%1, %2, %3, 255").arg(r.c_str()).arg(g.c_str()).arg(b.c_str()).toUtf8().constData(); @@ -665,35 +666,35 @@ ScalarValue prepareColorRGBA(int variant, const string &name, const char *&text, string token; readStyleGenToken(text, end, type, token); - if (type != stConsStart) throw exception(QString("Unexpected token %1 while reading rgba() cons!").arg(type).toUtf8().constData()); + if (type != stConsStart) throw Exception(QString("Unexpected token %1 while reading rgba() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading rgba() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading rgba() cons!").arg(type)); string r = token; readStyleGenToken(text, end, type, token); - if (type != stComma) throw exception(QString("Unexpected token %1 while reading rgba() cons!").arg(type).toUtf8().constData()); + if (type != stComma) throw Exception(QString("Unexpected token %1 while reading rgba() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading rgba() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading rgba() cons!").arg(type)); string g = token; readStyleGenToken(text, end, type, token); - if (type != stComma) throw exception(QString("Unexpected token %1 while reading rgba() cons!").arg(type).toUtf8().constData()); + if (type != stComma) throw Exception(QString("Unexpected token %1 while reading rgba() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading rgba() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading rgba() cons!").arg(type)); string b = token; readStyleGenToken(text, end, type, token); - if (type != stComma) throw exception(QString("Unexpected token %1 while reading rgba() cons!").arg(type).toUtf8().constData()); + if (type != stComma) throw Exception(QString("Unexpected token %1 while reading rgba() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading rgba() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading rgba() cons!").arg(type)); string a = token; readStyleGenToken(text, end, type, token); - if (type != stConsFinish) throw exception(QString("Unexpected token %1 while reading rgba() cons!").arg(type).toUtf8().constData()); + if (type != stConsFinish) throw Exception(QString("Unexpected token %1 while reading rgba() cons!").arg(type)); Color c; c.color = QString("%1, %2, %3, %4").arg(r.c_str()).arg(g.c_str()).arg(b.c_str()).arg(a.c_str()).toUtf8().constData(); @@ -711,39 +712,39 @@ ScalarValue prepareRect(int variant, const char *&text, const char *end) { string token; readStyleGenToken(text, end, type, token); - if (type != stConsStart) throw exception(QString("Unexpected token %1 while reading rect() cons!").arg(type).toUtf8().constData()); + if (type != stConsStart) throw Exception(QString("Unexpected token %1 while reading rect() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading rect() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading rect() cons!").arg(type)); string x = token; bool xpx = readPxAfterNumber(text, end); readStyleGenToken(text, end, type, token); - if (type != stComma) throw exception(QString("Unexpected token %1 while reading rect() cons!").arg(type).toUtf8().constData()); + if (type != stComma) throw Exception(QString("Unexpected token %1 while reading rect() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading rect() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading rect() cons!").arg(type)); string y = token; bool ypx = readPxAfterNumber(text, end); readStyleGenToken(text, end, type, token); - if (type != stComma) throw exception(QString("Unexpected token %1 while reading rect() cons!").arg(type).toUtf8().constData()); + if (type != stComma) throw Exception(QString("Unexpected token %1 while reading rect() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading rect() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading rect() cons!").arg(type)); string w = token; bool wpx = readPxAfterNumber(text, end); readStyleGenToken(text, end, type, token); - if (type != stComma) throw exception(QString("Unexpected token %1 while reading rect() cons!").arg(type).toUtf8().constData()); + if (type != stComma) throw Exception(QString("Unexpected token %1 while reading rect() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading rect() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading rect() cons!").arg(type)); string h = token; bool hpx = readPxAfterNumber(text, end); readStyleGenToken(text, end, type, token); - if (type != stConsFinish) throw exception(QString("Unexpected token %1 while reading rect() cons!").arg(type).toUtf8().constData()); + if (type != stConsFinish) throw Exception(QString("Unexpected token %1 while reading rect() cons!").arg(type)); ScalarValue r; r[variant] = QString("(%1, %2, %3, %4)").arg(x.c_str()).arg(y.c_str()).arg(w.c_str()).arg(h.c_str()).toUtf8().constData(); @@ -762,42 +763,42 @@ ScalarValue prepareSprite(int variant, const char *&text, const char *end) { StyleGenTokenType type; string token; - if (variant) throw exception(QString("Unexpected variant in sprite rectangle!").toUtf8().constData()); + if (variant) throw Exception(QString("Unexpected variant in sprite rectangle!")); readStyleGenToken(text, end, type, token); - if (type != stConsStart) throw exception(QString("Unexpected token %1 while reading sprite() cons!").arg(type).toUtf8().constData()); + if (type != stConsStart) throw Exception(QString("Unexpected token %1 while reading sprite() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading sprite() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading sprite() cons!").arg(type)); string x = token; - if (!readPxAfterNumber(text, end)) throw exception(QString("All number in sprite() cons must be in px!").toUtf8().constData()); + if (!readPxAfterNumber(text, end)) throw Exception(QString("All number in sprite() cons must be in px!")); readStyleGenToken(text, end, type, token); - if (type != stComma) throw exception(QString("Unexpected token %1 while reading sprite() cons!").arg(type).toUtf8().constData()); + if (type != stComma) throw Exception(QString("Unexpected token %1 while reading sprite() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading sprite() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading sprite() cons!").arg(type)); string y = token; - if (!readPxAfterNumber(text, end)) throw exception(QString("All number in sprite() cons must be in px!").toUtf8().constData()); + if (!readPxAfterNumber(text, end)) throw Exception(QString("All number in sprite() cons must be in px!")); readStyleGenToken(text, end, type, token); - if (type != stComma) throw exception(QString("Unexpected token %1 while reading sprite() cons!").arg(type).toUtf8().constData()); + if (type != stComma) throw Exception(QString("Unexpected token %1 while reading sprite() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading sprite() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading sprite() cons!").arg(type)); string w = token; - if (!readPxAfterNumber(text, end)) throw exception(QString("All number in sprite() cons must be in px!").toUtf8().constData()); + if (!readPxAfterNumber(text, end)) throw Exception(QString("All number in sprite() cons must be in px!")); readStyleGenToken(text, end, type, token); - if (type != stComma) throw exception(QString("Unexpected token %1 while reading sprite() cons!").arg(type).toUtf8().constData()); + if (type != stComma) throw Exception(QString("Unexpected token %1 while reading sprite() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading sprite() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading sprite() cons!").arg(type)); string h = token; - if (!readPxAfterNumber(text, end)) throw exception(QString("All number in sprite() cons must be in px!").toUtf8().constData()); + if (!readPxAfterNumber(text, end)) throw Exception(QString("All number in sprite() cons must be in px!")); readStyleGenToken(text, end, type, token); - if (type != stConsFinish) throw exception(QString("Unexpected token %1 while reading sprite() cons!").arg(type).toUtf8().constData()); + if (type != stConsFinish) throw Exception(QString("Unexpected token %1 while reading sprite() cons!").arg(type)); ScalarValue r; r[variant] = QString("(%1, %2, %3, %4)").arg(x.c_str()).arg(y.c_str()).arg(w.c_str()).arg(h.c_str()).toUtf8().constData(); @@ -816,14 +817,14 @@ ScalarValue prepareSprite(int variant, const char *&text, const char *end) { } if (i->first.intersects(sprite)) { cout << QString("Sprites intersection, %1 intersects with %2").arg(i->second).arg(r[variant].c_str()).toUtf8().constData() << "\n"; -// throw exception(QString("Sprites intersection, %1 intersects with %2").arg(i->second).arg(r[variant].c_str()).toUtf8().constData()); +// throw Exception(QString("Sprites intersection, %1 intersects with %2").arg(i->second).arg(r[variant].c_str())); } } if (!found) { sprites.push_back(QPair(sprite, QString(r[variant].c_str()))); if (sprite.x() < 0 || sprite.y() < 0 || sprite.x() + sprite.width() > variantSprites[0].width() || sprite.y() + sprite.height() > variantSprites[0].height()) { - throw exception(QString("Bad sprite size %1").arg(r[variant].c_str()).toUtf8().constData()); + throw Exception(QString("Bad sprite size %1").arg(r[variant].c_str())); } int varLast = variants[variantsCount - 1]; @@ -850,23 +851,23 @@ ScalarValue preparePoint(int variant, const char *&text, const char *end) { string token; readStyleGenToken(text, end, type, token); - if (type != stConsStart) throw exception(QString("Unexpected token %1 while reading point() cons!").arg(type).toUtf8().constData()); + if (type != stConsStart) throw Exception(QString("Unexpected token %1 while reading point() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading point() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading point() cons!").arg(type)); string x = token; bool xpx = readPxAfterNumber(text, end); readStyleGenToken(text, end, type, token); - if (type != stComma) throw exception(QString("Unexpected token %1 while reading point() cons!").arg(type).toUtf8().constData()); + if (type != stComma) throw Exception(QString("Unexpected token %1 while reading point() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading point() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading point() cons!").arg(type)); string y = token; bool ypx = readPxAfterNumber(text, end); readStyleGenToken(text, end, type, token); - if (type != stConsFinish) throw exception(QString("Unexpected token %1 while reading point() cons!").arg(type).toUtf8().constData()); + if (type != stConsFinish) throw Exception(QString("Unexpected token %1 while reading point() cons!").arg(type)); ScalarValue r; r[variant] = QString("(%1, %2)").arg(x.c_str()).arg(y.c_str()).toUtf8().constData(); @@ -883,23 +884,23 @@ ScalarValue prepareSize(int variant, const char *&text, const char *end) { string token; readStyleGenToken(text, end, type, token); - if (type != stConsStart) throw exception(QString("Unexpected token %1 while reading size() cons!").arg(type).toUtf8().constData()); + if (type != stConsStart) throw Exception(QString("Unexpected token %1 while reading size() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading size() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading size() cons!").arg(type)); string x = token; bool xpx = readPxAfterNumber(text, end); readStyleGenToken(text, end, type, token); - if (type != stComma) throw exception(QString("Unexpected token %1 while reading size() cons!").arg(type).toUtf8().constData()); + if (type != stComma) throw Exception(QString("Unexpected token %1 while reading size() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading size() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading size() cons!").arg(type)); string y = token; bool ypx = readPxAfterNumber(text, end); readStyleGenToken(text, end, type, token); - if (type != stConsFinish) throw exception(QString("Unexpected token %1 while reading size() cons!").arg(type).toUtf8().constData()); + if (type != stConsFinish) throw Exception(QString("Unexpected token %1 while reading size() cons!").arg(type)); ScalarValue r; r[variant] = QString("(%1, %2)").arg(x.c_str()).arg(y.c_str()).toUtf8().constData(); @@ -916,14 +917,14 @@ ScalarValue prepareTransition(int variant, const char *&text, const char *end) { string token; readStyleGenToken(text, end, type, token); - if (type != stConsStart) throw exception(QString("Unexpected token %1 while reading transition() cons!").arg(type).toUtf8().constData()); + if (type != stConsStart) throw Exception(QString("Unexpected token %1 while reading transition() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stName) throw exception(QString("Unexpected token %1 while reading transition() cons!").arg(type).toUtf8().constData()); + if (type != stName) throw Exception(QString("Unexpected token %1 while reading transition() cons!").arg(type)); string func = token; readStyleGenToken(text, end, type, token); - if (type != stConsFinish) throw exception(QString("Unexpected token %1 while reading transition() cons!").arg(type).toUtf8().constData()); + if (type != stConsFinish) throw Exception(QString("Unexpected token %1 while reading transition() cons!").arg(type)); return fillPrepareResult(variant, QString("(anim::%1)").arg(func.c_str()).toUtf8().constData()); } @@ -933,14 +934,14 @@ ScalarValue prepareCursor(int variant, const char *&text, const char *end) { string token; readStyleGenToken(text, end, type, token); - if (type != stConsStart) throw exception(QString("Unexpected token %1 while reading cursor() cons!").arg(type).toUtf8().constData()); + if (type != stConsStart) throw Exception(QString("Unexpected token %1 while reading cursor() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stName) throw exception(QString("Unexpected token %1 while reading cursor() cons!").arg(type).toUtf8().constData()); + if (type != stName) throw Exception(QString("Unexpected token %1 while reading cursor() cons!").arg(type)); string func = token; readStyleGenToken(text, end, type, token); - if (type != stConsFinish) throw exception(QString("Unexpected token %1 while reading cursor() cons!").arg(type).toUtf8().constData()); + if (type != stConsFinish) throw Exception(QString("Unexpected token %1 while reading cursor() cons!").arg(type)); return fillPrepareResult(variant, QString("(style::cur_%1)").arg(func.c_str()).toUtf8().constData()); } @@ -950,14 +951,14 @@ ScalarValue prepareAlign(int variant, const char *&text, const char *end) { string token; readStyleGenToken(text, end, type, token); - if (type != stConsStart) throw exception(QString("Unexpected token %1 while reading align() cons!").arg(type).toUtf8().constData()); + if (type != stConsStart) throw Exception(QString("Unexpected token %1 while reading align() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stName) throw exception(QString("Unexpected token %1 while reading align() cons!").arg(type).toUtf8().constData()); + if (type != stName) throw Exception(QString("Unexpected token %1 while reading align() cons!").arg(type)); string func = token; readStyleGenToken(text, end, type, token); - if (type != stConsFinish) throw exception(QString("Unexpected token %1 while reading align() cons!").arg(type).toUtf8().constData()); + if (type != stConsFinish) throw Exception(QString("Unexpected token %1 while reading align() cons!").arg(type)); return fillPrepareResult(variant, QString("(style::al_%1)").arg(func.c_str()).toUtf8().constData()); } @@ -967,39 +968,39 @@ ScalarValue prepareMargins(int variant, const char *&text, const char *end) { string token; readStyleGenToken(text, end, type, token); - if (type != stConsStart) throw exception(QString("Unexpected token %1 while reading margins() cons!").arg(type).toUtf8().constData()); + if (type != stConsStart) throw Exception(QString("Unexpected token %1 while reading margins() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading margins() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading margins() cons!").arg(type)); string x = token; bool xpx = readPxAfterNumber(text, end); readStyleGenToken(text, end, type, token); - if (type != stComma) throw exception(QString("Unexpected token %1 while reading margins() cons!").arg(type).toUtf8().constData()); + if (type != stComma) throw Exception(QString("Unexpected token %1 while reading margins() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading margins() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading margins() cons!").arg(type)); string y = token; bool ypx = readPxAfterNumber(text, end); readStyleGenToken(text, end, type, token); - if (type != stComma) throw exception(QString("Unexpected token %1 while reading margins() cons!").arg(type).toUtf8().constData()); + if (type != stComma) throw Exception(QString("Unexpected token %1 while reading margins() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading margins() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading margins() cons!").arg(type)); string w = token; bool wpx = readPxAfterNumber(text, end); readStyleGenToken(text, end, type, token); - if (type != stComma) throw exception(QString("Unexpected token %1 while reading margins() cons!").arg(type).toUtf8().constData()); + if (type != stComma) throw Exception(QString("Unexpected token %1 while reading margins() cons!").arg(type)); readStyleGenToken(text, end, type, token); - if (type != stNumber) throw exception(QString("Unexpected token %1 while reading margins() cons!").arg(type).toUtf8().constData()); + if (type != stNumber) throw Exception(QString("Unexpected token %1 while reading margins() cons!").arg(type)); string h = token; bool hpx = readPxAfterNumber(text, end); readStyleGenToken(text, end, type, token); - if (type != stConsFinish) throw exception(QString("Unexpected token %1 while reading margins() cons!").arg(type).toUtf8().constData()); + if (type != stConsFinish) throw Exception(QString("Unexpected token %1 while reading margins() cons!").arg(type)); ScalarValue r; r[variant] = QString("(%1, %2, %3, %4)").arg(x.c_str()).arg(y.c_str()).arg(w.c_str()).arg(h.c_str()).toUtf8().constData(); @@ -1046,7 +1047,7 @@ ScalarValue prepareFont(int variant, const string &name, const char *&text, cons bool sizepx; readStyleGenToken(text, end, type, token); - if (type != stConsStart) throw exception(QString("Unexpected token %1 (%2) while reading font() cons!").arg(type).arg(token.c_str()).toUtf8().constData()); + if (type != stConsStart) throw Exception(QString("Unexpected token %1 (%2) while reading font() cons!").arg(type).arg(token.c_str())); do { readStyleGenToken(text, end, type, token); @@ -1055,7 +1056,7 @@ ScalarValue prepareFont(int variant, const string &name, const char *&text, cons size = token; sizepx = readPxAfterNumber(text, end); } else { - throw exception(QString("Unexpected second number %1 while reading font() cons!").arg(token.c_str()).toUtf8().constData()); + throw Exception(QString("Unexpected second number %1 while reading font() cons!").arg(token.c_str())); } } else if (type == stName) { int bit = 0; @@ -1073,38 +1074,38 @@ ScalarValue prepareFont(int variant, const string &name, const char *&text, cons sizeScalar = scalars[j.value()].second.second; // size = findScalarVariant(scalars[j.value()].second.second, variant); } else { - throw exception(QString("Unexpected second number %1 while reading font() cons!").arg(token.c_str()).toUtf8().constData()); + throw Exception(QString("Unexpected second number %1 while reading font() cons!").arg(token.c_str())); } } else if (scalars[j.value()].second.first == scString) { if (scalars[j.value()].second.second.empty()) { - throw exception(QString("Unexpected empty string %1 while reading font() cons!").arg(token.c_str()).toUtf8().constData()); + throw Exception(QString("Unexpected empty string %1 while reading font() cons!").arg(token.c_str())); } else if (!family.empty() || !familyScalar.empty()) { - throw exception(QString("Unexpected second string %1 while reading font() cons!").arg(token.c_str()).toUtf8().constData()); + throw Exception(QString("Unexpected second string %1 while reading font() cons!").arg(token.c_str())); } familyScalar = scalars[j.value()].second.second; // family = findScalarVariant(scalars[j.value()].second.second, variant); } else { - throw exception(QString("Unexpected name token %1 type %2 while reading font() cons!").arg(token.c_str()).arg(scalars[j.value()].second.first).toUtf8().constData()); + throw Exception(QString("Unexpected name token %1 type %2 while reading font() cons!").arg(token.c_str()).arg(scalars[j.value()].second.first)); } } else { - throw exception(QString("Unexpected name token %1 while reading font() cons!").arg(token.c_str()).toUtf8().constData()); + throw Exception(QString("Unexpected name token %1 while reading font() cons!").arg(token.c_str())); } } if (flags & bit) { - throw exception(QString("Unexpected second time token %1 while reading font() cons!").arg(token.c_str()).toUtf8().constData()); + throw Exception(QString("Unexpected second time token %1 while reading font() cons!").arg(token.c_str())); } flags |= bit; } else if (type == stString) { if (token.empty()) { - throw exception(QString("Unexpected empty string while reading font() cons!").toUtf8().constData()); + throw Exception(QString("Unexpected empty string while reading font() cons!")); } else if (!family.empty() || !familyScalar.empty()) { - throw exception(QString("Unexpected second string %1 while reading font() cons!").arg(token.c_str()).toUtf8().constData()); + throw Exception(QString("Unexpected second string %1 while reading font() cons!").arg(token.c_str())); } family = token; } else if (type == stConsFinish) { break; } else { - throw exception(QString("Unexpected token %1 while reading font() cons!").arg(type).toUtf8().constData()); + throw Exception(QString("Unexpected token %1 while reading font() cons!").arg(type)); } } while (true); @@ -1113,20 +1114,20 @@ ScalarValue prepareFont(int variant, const string &name, const char *&text, cons if (j != scalarsMap.cend()) { if (scalars[j.value()].second.first == scString) { if (scalars[j.value()].second.second.empty()) { - throw exception(QString("Unexpected empty string %1 while reading font() cons!").arg(token.c_str()).toUtf8().constData()); + throw Exception(QString("Unexpected empty string %1 while reading font() cons!").arg(token.c_str())); } else if (!family.empty() || !familyScalar.isEmpty()) { - throw exception(QString("Unexpected second string %1 while reading font() cons!").arg(token.c_str()).toUtf8().constData()); + throw Exception(QString("Unexpected second string %1 while reading font() cons!").arg(token.c_str())); } // family = findScalarVariant(scalars[j.value()].second.second, variant); familyScalar = scalars[j.value()].second.second; } else { - throw exception(QString("Font family not found while reading font() cons!").toUtf8().constData()); + throw Exception(QString("Font family not found while reading font() cons!")); } } else { - throw exception(QString("Font family not found while reading font() cons!").toUtf8().constData()); + throw Exception(QString("Font family not found while reading font() cons!")); } } - if (size.empty() && sizeScalar.isEmpty()) throw exception(QString("Font size not found while reading font() cons!").toUtf8().constData()); + if (size.empty() && sizeScalar.isEmpty()) throw Exception(QString("Font size not found while reading font() cons!")); Font font; font.family = familyScalar.empty() ? family : findScalarVariant(familyScalar, variant); @@ -1232,7 +1233,7 @@ ScalarData readScalarElement(string name, const char *&text, const char *end, st } } } else { - throw exception(QString("Unexpected token after '%1:', type %2").arg(name.c_str()).arg(type).toUtf8().constData()); + throw Exception(QString("Unexpected token after '%1:', type %2").arg(name.c_str()).arg(type)); } return result; } @@ -1240,21 +1241,21 @@ ScalarData readScalarElement(string name, const char *&text, const char *end, st Scalar readScalarData(StyleGenTokenType &type, string &token, const char *&text, const char *end, string objName = string(), const Fields *objFields = 0) { if (type != stName) { - throw exception(QString("Unexpected token, type %1: %2").arg(type).arg(token.c_str()).toUtf8().constData()); + throw Exception(QString("Unexpected token, type %1: %2").arg(type).arg(token.c_str())); } string name = token; if (!objFields) { ByName::const_iterator i = objectsMap.constFind(name); - if (i != objectsMap.cend()) throw exception(QString("Redefinition of style object %1").arg(name.c_str()).toUtf8().constData()); + if (i != objectsMap.cend()) throw Exception(QString("Redefinition of style object %1").arg(name.c_str())); ByName::const_iterator j = scalarsMap.constFind(name); - if (j != scalarsMap.cend()) throw exception(QString("Redefinition of style scalar %1").arg(name.c_str()).toUtf8().constData()); + if (j != scalarsMap.cend()) throw Exception(QString("Redefinition of style scalar %1").arg(name.c_str())); } readStyleGenToken(text, end, type, token); if (type != stDelimeter) { - throw exception(QString("Unexpected token, type %1: %2").arg(type).arg(token.c_str()).toUtf8().constData()); + throw Exception(QString("Unexpected token, type %1: %2").arg(type).arg(token.c_str())); } string fullName = objFields ? (objName + '.' + name) : name; @@ -1266,19 +1267,19 @@ Scalar readScalarData(StyleGenTokenType &type, string &token, const char *&text, while (type == stVariant) { readStyleGenToken(text, end, type, token); if (type != stNumber) { - throw exception(QString("Unexpected token '%1' reading variants of '%2' scalar").arg(token.c_str()).arg(name.c_str()).toUtf8().constData()); + throw Exception(QString("Unexpected token '%1' reading variants of '%2' scalar").arg(token.c_str()).arg(name.c_str())); } int variant = QString(token.c_str()).toInt(); if (variant != 2 && variant != 3 && variant != 4) { - throw exception(QString("Unexpected variant index '%1' in '%2' scalar").arg(token.c_str()).arg(name.c_str()).toUtf8().constData()); + throw Exception(QString("Unexpected variant index '%1' in '%2' scalar").arg(token.c_str()).arg(name.c_str())); } readStyleGenToken(text, end, type, token); if (type != stDelimeter) { - throw exception(QString("Unexpected token '%1' reading variants of '%2' scalar, expected delimeter").arg(token.c_str()).arg(name.c_str()).toUtf8().constData()); + throw Exception(QString("Unexpected token '%1' reading variants of '%2' scalar, expected delimeter").arg(token.c_str()).arg(name.c_str())); } ScalarData el = readScalarElement(name, text, end, objName, objFields, variant); if (el.first != result.second.first) { - throw exception(QString("Type changed in variant for '%1'").arg(name.c_str()).toUtf8().constData()); + throw Exception(QString("Type changed in variant for '%1'").arg(name.c_str())); } result.second.second.insert(variant, el.second[variant]); @@ -1290,7 +1291,7 @@ Scalar readScalarData(StyleGenTokenType &type, string &token, const char *&text, string prepareObject(const string &cls, Fields fields, const string &obj, int variant) { string result = "("; Classes::const_iterator i = classes.constFind(cls); - if (i == classes.cend()) throw exception("Unknown error :("); + if (i == classes.cend()) throw Exception("Unknown error :("); for (FieldTypesMap::const_iterator j = i.value().fields.cbegin(), e = i.value().fields.cend(); j != e;) { result += "style::" + outputTypeNames[j.value()]; @@ -1299,7 +1300,7 @@ string prepareObject(const string &cls, Fields fields, const string &obj, int va if (f == fields.end()) { result += "()"; } 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()).toUtf8().constData()); + throw Exception(QString("Bad type of field %1 while parsing %2").arg(j.key().c_str()).arg(obj.c_str())); } else { result += findScalarVariant(f.value().second, variant); } @@ -1310,13 +1311,13 @@ string prepareObject(const string &cls, Fields fields, const string &obj, int va } if (fields.size()) { - throw exception(QString("Unknown fields found in %1, for example %2").arg(obj.c_str()).arg(fields.begin().key().c_str()).toUtf8().constData()); + throw Exception(QString("Unknown fields found in %1, for example %2").arg(obj.c_str()).arg(fields.begin().key().c_str())); } return result + ", Qt::Uninitialized)"; } -bool genStyles(const QString &classes_in, const QString &classes_out, const QString &styles_in, const QString &styles_out) { +bool genStyles(const QString &classes_in, const QString &classes_out, const QString &styles_in, const QString &styles_out, const QString &path_to_sprites) { if (!genClasses(classes_in, classes_out)) return false; QString styles_cpp = QString(styles_out).replace(".h", ".cpp"); @@ -1336,7 +1337,7 @@ bool genStyles(const QString &classes_in, const QString &classes_out, const QStr QImage sprites[variantsCount]; variantSprites = sprites; - QString sprite0("./SourceFiles/art/sprite" + QString(variantPostfixes[0]) + ".png"), spriteLast("./SourceFiles/art/sprite" + QString(variantPostfixes[variantsCount - 1]) + ".png"); + QString sprite0(path_to_sprites + "sprite" + QString(variantPostfixes[0]) + ".png"), spriteLast(path_to_sprites + "sprite" + QString(variantPostfixes[variantsCount - 1]) + ".png"); variantSprites[0] = QImage(sprite0); for (int i = 1; i < variantsCount - 1; ++i) { variantSprites[i] = QImage(adjustPx(variants[i], variantSprites[0].width(), true), adjustPx(variants[i], variantSprites[0].height(), true), QImage::Format_ARGB32_Premultiplied); @@ -1400,7 +1401,7 @@ bool genStyles(const QString &classes_in, const QString &classes_out, const QStr if (scalar.second.first != scTypesCount) { scalarsMap.insert(scalar.first, scalars.size()); scalars.push_back(scalar); - if (type != stFieldFinish) throw exception(QString("Unexpected token after scalar %1, type %2").arg(name.c_str()).arg(type).toUtf8().constData()); + if (type != stFieldFinish) throw Exception(QString("Unexpected token after scalar %1, type %2").arg(name.c_str()).arg(type)); continue; } @@ -1411,19 +1412,19 @@ bool genStyles(const QString &classes_in, const QString &classes_out, const QStr obj.second.first = objType; Classes::const_iterator c = classes.constFind(objType); - if (c == classes.cend()) throw exception(QString("Unknown type %1 used for object %2").arg(objType.c_str()).arg(name.c_str()).toUtf8().constData()); + if (c == classes.cend()) throw Exception(QString("Unknown type %1 used for object %2").arg(objType.c_str()).arg(name.c_str())); if (type == stConsStart) { do { readStyleGenToken(text, end, type, token); string parent = token; - if (type != stName) throw exception(QString("Unexpected token %1 while parsing object %2").arg(type).arg(name.c_str()).toUtf8().constData()); + if (type != stName) throw Exception(QString("Unexpected token %1 while parsing object %2").arg(type).arg(name.c_str())); ByName::const_iterator p = objectsMap.constFind(parent); - if (p == objectsMap.cend()) throw exception(QString("Parent object %1 not found, while parsing object %2").arg(parent.c_str()).arg(name.c_str()).toUtf8().constData()); + if (p == objectsMap.cend()) throw Exception(QString("Parent object %1 not found, while parsing object %2").arg(parent.c_str()).arg(name.c_str())); const ObjectData &alr(objects[p.value()].second); for (Fields::const_iterator f = alr.second.cbegin(), e = alr.second.cend(); f != e; ++f) { - Fields::const_iterator a = obj.second.second.constFind(f.key()); +// Fields::const_iterator a = obj.second.second.constFind(f.key()); // if (a == obj.second.second.cend()) { obj.second.second.insert(f.key(), f.value()); if (f.value().first == scFont) { @@ -1440,11 +1441,11 @@ bool genStyles(const QString &classes_in, const QString &classes_out, const QStr readStyleGenToken(text, end, type, token); if (type == stConsFinish) break; - if (type != stComma) throw exception(QString("Unexpected token %1, expected , or ) while parsing object %2").arg(type).arg(name.c_str()).toUtf8().constData()); + if (type != stComma) throw Exception(QString("Unexpected token %1, expected , or ) while parsing object %2").arg(type).arg(name.c_str())); } while (true); readStyleGenToken(text, end, type, token); } - if (type != stObjectStart) throw exception(QString("Unexpected token %1, expected { while parsing object %2").arg(type).arg(name.c_str()).toUtf8().constData()); + if (type != stObjectStart) throw Exception(QString("Unexpected token %1, expected { while parsing object %2").arg(type).arg(name.c_str())); while (true) { readStyleGenToken(text, end, type, token); @@ -1459,11 +1460,11 @@ bool genStyles(const QString &classes_in, const QString &classes_out, const QStr } Scalar scalar = readScalarData(type, token, text, end, name, &obj.second.second); - if (scalar.second.first == scTypesCount) throw exception(QString("Unexpected type name %1 while parsing object %2").arg(scalar.second.second[0].c_str()).arg(name.c_str()).toUtf8().constData()); + if (scalar.second.first == scTypesCount) throw Exception(QString("Unexpected type name %1 while parsing object %2").arg(scalar.second.second[0].c_str()).arg(name.c_str())); obj.second.second.insert(scalar.first, scalar.second); - if (type != stFieldFinish) throw exception(QString("Unexpected token after scalar %1 in object %2, type %3").arg(scalar.first.c_str()).arg(name.c_str()).arg(type).toUtf8().constData()); + if (type != stFieldFinish) throw Exception(QString("Unexpected token after scalar %1 in object %2, type %3").arg(scalar.first.c_str()).arg(name.c_str()).arg(type)); } } @@ -1559,7 +1560,6 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\ typedef QMap FontFamilies; FontFamilies fontFamilies; - int familyIndex = 0; for (int i = 0, l = scalars.size(); i < l; ++i) { Scalar &sc(scalars[i]); @@ -1603,7 +1603,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\ bool found = false; for (Named::iterator i = nmd.begin(), e = nmd.end(); i != e; ++i) { if (i.key() == i.value().second) { - throw exception(QString("Object '%1' is equal to itself!").arg(i.key().c_str()).toUtf8().constData()); + throw Exception(QString("Object '%1' is equal to itself!").arg(i.key().c_str())); } Named::const_iterator j = nmd.constFind(i.value().second); if (j != nmd.cend()) { @@ -1629,16 +1629,16 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\ if (j != scalarsMap.cend()) { if (scalars[j.value()].second.first == scString) { if (scalars[j.value()].second.second.empty()) { - throw exception(QString("Unexpected empty string in defaultFontFamily!").arg(token.c_str()).toUtf8().constData()); + throw Exception(QString("Unexpected empty string in defaultFontFamily!").arg(token.c_str())); } string v = findScalarVariant(scalars[j.value()].second.second, variant); tcpp << "\t\t\t_fontFamilies.push_back" << v.c_str() << ";\n"; fontFamilies.insert(v, familyIndex++); } else { - throw exception(QString("defaultFontFamily has bad type!").toUtf8().constData()); + throw Exception(QString("defaultFontFamily has bad type!")); } } else { - throw exception(QString("defaultFontFamily not found!").toUtf8().constData()); + throw Exception(QString("defaultFontFamily not found!")); } Fonts &fnts(fonts[variant]); @@ -1713,12 +1713,12 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\ } for (int i = 1; i < variantsCount - 1; ++i) { - QString spritei("./SourceFiles/art/sprite" + QString(variantPostfixes[i]) + ".png"), spriteLast("./SourceFiles/art/sprite" + QString(variantPostfixes[i]) + ".png"); + QString spritei(path_to_sprites + "sprite" + QString(variantPostfixes[i]) + ".png"), spriteLast(path_to_sprites + "sprite" + QString(variantPostfixes[i]) + ".png"); QByteArray sprite; { QBuffer sbuf(&sprite); if (!variantSprites[i].save(&sbuf, "PNG")) { - throw exception(("Could not write intermediate sprite '" + spritei + "'!").toUtf8().constData()); + throw Exception(("Could not write intermediate sprite '" + spritei + "'!")); } } bool needResave = !QFileInfo(spritei).exists(); @@ -1736,21 +1736,21 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\ if (needResave) { QFile sf(spritei); if (!sf.open(QIODevice::WriteOnly)) { - throw exception(("Could not write intermediate sprite '" + spritei + "'!").toUtf8().constData()); + throw Exception(("Could not write intermediate sprite '" + spritei + "'!")); } else { if (sf.write(sprite) != sprite.size()) { - throw exception(("Could not write intermediate sprite '" + spritei + "'!").toUtf8().constData()); + throw Exception(("Could not write intermediate sprite '" + spritei + "'!")); } } } } for (int i = 0; i < variantsCount; ++i) { - QString spritei("./SourceFiles/art/grid" + QString(variantPostfixes[i]) + ".png"), spriteLast("./SourceFiles/art/sprite" + QString(variantPostfixes[i]) + ".png"); + QString spritei(path_to_sprites + "grid" + QString(variantPostfixes[i]) + ".png"), spriteLast(path_to_sprites + "sprite" + QString(variantPostfixes[i]) + ".png"); QByteArray grid; { QBuffer gbuf(&grid); if (!variantGrids[i].save(&gbuf, "PNG")) { - throw exception(("Could not write intermediate grid '" + spritei + "'!").toUtf8().constData()); + throw Exception(("Could not write intermediate grid '" + spritei + "'!")); } } bool needResave = !QFileInfo(spritei).exists(); @@ -1768,10 +1768,10 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\ if (needResave) { QFile gf(spritei); if (!gf.open(QIODevice::WriteOnly)) { - throw exception(("Could not write intermediate grid '" + spritei + "'!").toUtf8().constData()); + throw Exception(("Could not write intermediate grid '" + spritei + "'!")); } else { if (gf.write(grid) != grid.size()) { - throw exception(("Could not write intermediate grid '" + spritei + "'!").toUtf8().constData()); + throw Exception(("Could not write intermediate grid '" + spritei + "'!")); } } } @@ -1790,8 +1790,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\ } if (write_out) { cout << "Style compiled, writing " << scalars.size() << " scalars and " << objects.size() << " objects.\n"; - if (!out.open(QIODevice::WriteOnly)) throw exception("Could not open style_auto.h for writing!"); - if (out.write(outText) != outText.size()) throw exception("Could not open style_auto.h for writing!"); + if (!out.open(QIODevice::WriteOnly)) throw Exception("Could not open style_auto.h for writing!"); + if (out.write(outText) != outText.size()) throw Exception("Could not open style_auto.h for writing!"); } bool write_cpp = true; if (cpp.open(QIODevice::ReadOnly)) { @@ -1805,8 +1805,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com\n\ } if (write_cpp) { if (!write_out) cout << "Style updated, writing " << scalars.size() << " scalars and " << objects.size() << " objects.\n"; - 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.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!"); } } catch (exception &e) { cout << e.what() << "\n"; diff --git a/Telegram/SourceFiles/_other/genstyles.h b/Telegram/SourceFiles/_other/genstyles.h index a6f398b58..855ce8668 100644 --- a/Telegram/SourceFiles/_other/genstyles.h +++ b/Telegram/SourceFiles/_other/genstyles.h @@ -34,19 +34,35 @@ using std::cout; using std::cerr; using std::exception; -bool genStyles(const QString &classes_in, const QString &classes_out, const QString &styles_in, const QString &styles_out); +class Exception : public exception { +public: + + Exception(const QString &msg) : _msg(msg) { + } + + virtual const char *what() const throw() { + return _msg.toUtf8().constData(); + } + virtual ~Exception() throw() { + } + +private: + QString _msg; +}; + +bool genStyles(const QString &classes_in, const QString &classes_out, const QString &styles_in, const QString &styles_out, const QString &path_to_sprites); class GenStyles : public QObject { Q_OBJECT public: - GenStyles(const QString &classes_in, const QString &classes_out, const QString &styles_in, const QString styles_out) : QObject(0), - _classes_in(classes_in), _classes_out(classes_out), _styles_in(styles_in), _styles_out(styles_out) { + GenStyles(const QString &classes_in, const QString &classes_out, const QString &styles_in, const QString &styles_out, const QString &path_to_sprites) : QObject(0), + _classes_in(classes_in), _classes_out(classes_out), _styles_in(styles_in), _styles_out(styles_out), _path_to_sprites(path_to_sprites) { } public slots: void run() { - if (genStyles(_classes_in, _classes_out, _styles_in, _styles_out)) { + if (genStyles(_classes_in, _classes_out, _styles_in, _styles_out, _path_to_sprites)) { emit finished(); } } @@ -56,5 +72,5 @@ signals: private: - QString _classes_in, _classes_out, _styles_in, _styles_out; + QString _classes_in, _classes_out, _styles_in, _styles_out, _path_to_sprites; }; diff --git a/Telegram/SourceFiles/_other/mlmain.cpp b/Telegram/SourceFiles/_other/mlmain.cpp index 3f789dd32..10a7357cc 100644 --- a/Telegram/SourceFiles/_other/mlmain.cpp +++ b/Telegram/SourceFiles/_other/mlmain.cpp @@ -26,6 +26,20 @@ int main(int argc, char *argv[]) { if (++i < argc) lang_out = argv[i]; } } +#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() + '/'; + lang_in = basePath + lang_in; + lang_out = basePath + lang_out; + } + } + } +#endif QObject *taskImpl = new GenLang(lang_in, lang_out); QCoreApplication a(argc, argv); diff --git a/Telegram/SourceFiles/_other/msmain.cpp b/Telegram/SourceFiles/_other/msmain.cpp index de901708a..e03aa07e6 100644 --- a/Telegram/SourceFiles/_other/msmain.cpp +++ b/Telegram/SourceFiles/_other/msmain.cpp @@ -16,9 +16,10 @@ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE Copyright (c) 2014 John Preston, https://tdesktop.com */ #include "msmain.h" +#include int main(int argc, char *argv[]) { - QString classes_in("style_classes.txt"), classes_out("style_classes.h"), styles_in("style.txt"), styles_out("style_auto.h"); + QString classes_in("style_classes.txt"), classes_out("style_classes.h"), styles_in("style.txt"), styles_out("style_auto.h"), path_to_sprites("./SourceFiles/art/"); for (int i = 0; i < argc; ++i) { if (string("-classes_in") == argv[i]) { if (++i < argc) classes_in = argv[i]; @@ -28,9 +29,28 @@ int main(int argc, char *argv[]) { if (++i < argc) styles_in = argv[i]; } else if (string("-styles_out") == argv[i]) { if (++i < argc) styles_out = argv[i]; - } + } else if (string("-path_to_sprites") == argv[i]) { + if (++i < argc) path_to_sprites = argv[i]; + } } - QObject *taskImpl = new GenStyles(classes_in, classes_out, styles_in, styles_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() + '/'; + classes_in = basePath + classes_in; + classes_out = basePath + classes_out; + styles_in = basePath + styles_in; + styles_out = basePath + styles_out; + path_to_sprites = basePath + path_to_sprites; + } + } + } +#endif + QObject *taskImpl = new GenStyles(classes_in, classes_out, styles_in, styles_out, path_to_sprites); QGuiApplication a(argc, argv); diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index df7b9d773..60309b673 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -70,9 +70,9 @@ namespace { }; } -Application::Application(int argc, char *argv[]) : PsApplication(argc, argv), +Application::Application(int &argc, char **argv) : PsApplication(argc, argv), serverName(psServerPrefix() + cGUIDStr()), closing(false), - updateRequestId(0), updateThread(0), updateDownloader(0), updateReply(0) { + updateRequestId(0), updateReply(0), updateThread(0), updateDownloader(0) { if (mainApp) { DEBUG_LOG(("Application Error: another Application was created, terminating..")); exit(0); @@ -410,7 +410,7 @@ void Application::startUpdateCheck(bool forceWait) { } } } - if (cManyInstance() && !cDebug()) return; // only main instance is updating + if (cManyInstance() && !cDebug() || cPlatform() == dbipMac) return; // only main instance is updating if (sendRequest) { QNetworkRequest checkVersion(QUrl(qsl("http://tdesktop.com/win/tupdates/current"))); @@ -498,6 +498,10 @@ void Application::startApp() { App::writeUserConfig(); cSetNeedConfigResave(false); } + if (devicePixelRatio() > 1) { + cSetRetina(true); + cSetRetinaFactor(devicePixelRatio()); + } window->createWinId(); window->init(); diff --git a/Telegram/SourceFiles/application.h b/Telegram/SourceFiles/application.h index 2c229fe19..67dbb3818 100644 --- a/Telegram/SourceFiles/application.h +++ b/Telegram/SourceFiles/application.h @@ -32,7 +32,7 @@ class Application : public PsApplication, public RPCSender { public: - Application(int argc, char *argv[]); + Application(int &argc, char **argv); ~Application(); static Application *app(); diff --git a/Telegram/SourceFiles/boxes/aboutbox.cpp b/Telegram/SourceFiles/boxes/aboutbox.cpp index d254f9b65..81e107af3 100644 --- a/Telegram/SourceFiles/boxes/aboutbox.cpp +++ b/Telegram/SourceFiles/boxes/aboutbox.cpp @@ -45,7 +45,7 @@ a_opacity(0, 1) { resize(_width, _height); showAll(); - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } @@ -120,7 +120,7 @@ void AboutBox::onClose() { void AboutBox::startHide() { _hiding = true; if (_cache.isNull()) { - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } a_opacity.start(0); diff --git a/Telegram/SourceFiles/boxes/addcontactbox.cpp b/Telegram/SourceFiles/boxes/addcontactbox.cpp index 0e32e0a69..566b7428e 100644 --- a/Telegram/SourceFiles/boxes/addcontactbox.cpp +++ b/Telegram/SourceFiles/boxes/addcontactbox.cpp @@ -85,7 +85,7 @@ void AddContactBox::initBox() { resize(_width, _height); showAll(); - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } @@ -365,7 +365,7 @@ void AddContactBox::onRetry() { void AddContactBox::startHide() { _hiding = true; if (_cache.isNull()) { - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } a_opacity.start(0); diff --git a/Telegram/SourceFiles/boxes/addparticipantbox.cpp b/Telegram/SourceFiles/boxes/addparticipantbox.cpp index c755907fc..9a6cf34c4 100644 --- a/Telegram/SourceFiles/boxes/addparticipantbox.cpp +++ b/Telegram/SourceFiles/boxes/addparticipantbox.cpp @@ -532,7 +532,7 @@ AddParticipantBox::AddParticipantBox(ChatData *chat) : _inner(chat), _hiding(fal connect(&_inner, SIGNAL(mustScrollTo(int,int)), &_scroll, SLOT(scrollToY(int,int))); showAll(); - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } @@ -628,7 +628,7 @@ void AddParticipantBox::animStep(float64 dt) { void AddParticipantBox::startHide() { _hiding = true; if (_cache.isNull()) { - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } a_opacity.start(0); diff --git a/Telegram/SourceFiles/boxes/confirmbox.cpp b/Telegram/SourceFiles/boxes/confirmbox.cpp index 49db880a7..0c6f86fcf 100644 --- a/Telegram/SourceFiles/boxes/confirmbox.cpp +++ b/Telegram/SourceFiles/boxes/confirmbox.cpp @@ -43,7 +43,7 @@ ConfirmBox::ConfirmBox(QString text, QString doneText, QString cancelText) : _hi resize(_width, _height); showAll(); - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } @@ -118,7 +118,7 @@ void ConfirmBox::onCancel() { void ConfirmBox::startHide() { _hiding = true; if (_cache.isNull()) { - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } a_opacity.start(0); diff --git a/Telegram/SourceFiles/boxes/connectionbox.cpp b/Telegram/SourceFiles/boxes/connectionbox.cpp index 2b7f9bdf2..e975e2678 100644 --- a/Telegram/SourceFiles/boxes/connectionbox.cpp +++ b/Telegram/SourceFiles/boxes/connectionbox.cpp @@ -46,7 +46,7 @@ ConnectionBox::ConnectionBox() : _hiding(false), _passwordInput.setEchoMode(QLineEdit::Password); showAll(); - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } @@ -216,7 +216,7 @@ void ConnectionBox::onCancel() { void ConnectionBox::startHide() { _hiding = true; if (_cache.isNull()) { - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } a_opacity.start(0); diff --git a/Telegram/SourceFiles/boxes/contactsbox.cpp b/Telegram/SourceFiles/boxes/contactsbox.cpp index ec76e77af..871583cd2 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.cpp +++ b/Telegram/SourceFiles/boxes/contactsbox.cpp @@ -419,7 +419,7 @@ ContactsBox::ContactsBox() : _inner(), _hiding(false), _scroll(this, st::newGrou connect(&_inner, SIGNAL(mustScrollTo(int,int)), &_scroll, SLOT(scrollToY(int,int))); showAll(); - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } @@ -521,7 +521,7 @@ void ContactsBox::animStep(float64 dt) { void ContactsBox::startHide() { _hiding = true; if (_cache.isNull()) { - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } a_opacity.start(0); diff --git a/Telegram/SourceFiles/boxes/downloadpathbox.cpp b/Telegram/SourceFiles/boxes/downloadpathbox.cpp index 4833a1193..0283d4e41 100644 --- a/Telegram/SourceFiles/boxes/downloadpathbox.cpp +++ b/Telegram/SourceFiles/boxes/downloadpathbox.cpp @@ -42,7 +42,7 @@ DownloadPathBox::DownloadPathBox() : _hiding(false), _dirInput.setCursorPosition(0); showAll(); - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } @@ -182,7 +182,7 @@ void DownloadPathBox::onCancel() { void DownloadPathBox::startHide() { _hiding = true; if (_cache.isNull()) { - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } a_opacity.start(0); diff --git a/Telegram/SourceFiles/boxes/emojibox.cpp b/Telegram/SourceFiles/boxes/emojibox.cpp index f435711b8..6f5312d2a 100644 --- a/Telegram/SourceFiles/boxes/emojibox.cpp +++ b/Telegram/SourceFiles/boxes/emojibox.cpp @@ -89,7 +89,7 @@ EmojiBox::EmojiBox() : _hiding(false), resize(_width, _height); showAll(); - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } @@ -186,7 +186,7 @@ void EmojiBox::onClose() { void EmojiBox::startHide() { _hiding = true; if (_cache.isNull()) { - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } a_opacity.start(0); diff --git a/Telegram/SourceFiles/boxes/newgroupbox.cpp b/Telegram/SourceFiles/boxes/newgroupbox.cpp index b4b66feb2..bc664fd8b 100644 --- a/Telegram/SourceFiles/boxes/newgroupbox.cpp +++ b/Telegram/SourceFiles/boxes/newgroupbox.cpp @@ -462,7 +462,7 @@ NewGroupBox::NewGroupBox() : _inner(), _hiding(false), _scroll(this, st::newGrou connect(&_inner, SIGNAL(mustScrollTo(int,int)), &_scroll, SLOT(scrollToY(int,int))); showAll(); - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } @@ -562,7 +562,7 @@ void NewGroupBox::animStep(float64 dt) { void NewGroupBox::startHide() { _hiding = true; if (_cache.isNull()) { - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } a_opacity.start(0); @@ -617,7 +617,7 @@ CreateGroupBox::CreateGroupBox(const MTPVector &users) : _users(us resize(_width, _height); showAll(); - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } @@ -754,7 +754,7 @@ void CreateGroupBox::onCancel() { void CreateGroupBox::startHide() { _hiding = true; if (_cache.isNull()) { - _cache = grab(rect()); + _cache = myGrab(this, rect()); hideAll(); } a_opacity.start(0); diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index 7652f1850..46e45ab3d 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -25,7 +25,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "boxes/addcontactbox.h" #include "boxes/newgroupbox.h" -DialogsListWidget::DialogsListWidget(QWidget *parent, MainWidget *main) : QWidget(parent), dialogs(false), contactsNoDialogs(true), contacts(true), contactSel(false), sel(0), filteredSel(-1), selByMouse(false) { +DialogsListWidget::DialogsListWidget(QWidget *parent, MainWidget *main) : QWidget(parent), +dialogs(false), contactsNoDialogs(true), contacts(true), sel(0), contactSel(false), selByMouse(false), filteredSel(-1) { connect(main, SIGNAL(dialogToTop(const History::DialogLinks &)), this, SLOT(onDialogToTop(const History::DialogLinks &))); connect(main, SIGNAL(peerNameChanged(PeerData *, const PeerData::Names &, const PeerData::NameFirstChars &)), this, SLOT(onPeerNameChanged(PeerData *, const PeerData::Names &, const PeerData::NameFirstChars &))); connect(main, SIGNAL(peerPhotoChanged(PeerData *)), this, SLOT(onPeerPhotoChanged(PeerData *))); @@ -84,6 +85,7 @@ void DialogsListWidget::mouseMoveEvent(QMouseEvent *e) { lastMousePos = mapToGlobal(e->pos()); selByMouse = true; onUpdateSelected(true); + repaint(); } void DialogsListWidget::onUpdateSelected(bool force) { diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index 691fb7204..039d01620 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -602,7 +602,7 @@ bool EmojiPan::animStep(float64 ms) { void EmojiPan::hideStart() { if (_cache.isNull()) { showAll(); - _cache = grab(rect().marginsRemoved(st::dropdownPadding)); + _cache = myGrab(this, rect().marginsRemoved(st::dropdownPadding)); } hideAll(); _hiding = true; @@ -621,7 +621,7 @@ void EmojiPan::showStart() { } if (_cache.isNull()) { showAll(); - _cache = grab(rect().marginsRemoved(st::dropdownPadding)); + _cache = myGrab(this, rect().marginsRemoved(st::dropdownPadding)); } hideAll(); _hiding = false; diff --git a/Telegram/SourceFiles/gui/animation.h b/Telegram/SourceFiles/gui/animation.h index 7cd59b704..a86ae4636 100644 --- a/Telegram/SourceFiles/gui/animation.h +++ b/Telegram/SourceFiles/gui/animation.h @@ -178,7 +178,7 @@ namespace anim { class Animated { public: - Animated() : animInProcess(false), animStarted(0) { + Animated() : animStarted(0), animInProcess(false) { } virtual bool animStep(float64 ms) = 0; diff --git a/Telegram/SourceFiles/gui/countryinput.cpp b/Telegram/SourceFiles/gui/countryinput.cpp index 477c7ed85..04f7212da 100644 --- a/Telegram/SourceFiles/gui/countryinput.cpp +++ b/Telegram/SourceFiles/gui/countryinput.cpp @@ -459,7 +459,7 @@ void CountrySelect::prepareAnimation(int to) { a_coord.start(0); af_coord = st::countriesShowFunc; } - _cache = grab(QRect(_innerLeft, _innerTop, _innerWidth, _innerHeight)); + _cache = myGrab(this, QRect(_innerLeft, _innerTop, _innerWidth, _innerHeight)); _scroll.hide(); _doneButton.hide(); _cancelButton.hide(); diff --git a/Telegram/SourceFiles/gui/flatcheckbox.cpp b/Telegram/SourceFiles/gui/flatcheckbox.cpp index e55077a14..bf3a538b8 100644 --- a/Telegram/SourceFiles/gui/flatcheckbox.cpp +++ b/Telegram/SourceFiles/gui/flatcheckbox.cpp @@ -27,7 +27,7 @@ FlatCheckbox::FlatCheckbox(QWidget *parent, const QString &text, bool checked, c connect(this, SIGNAL(stateChanged(int, ButtonStateChangeSource)), this, SLOT(onStateChange(int, ButtonStateChangeSource))); setCursor(_st.cursor); int32 w = _st.width, h = _st.height; - if (w <= 0) w = _st.textLeft + _st.font->m.width(_text); + if (w <= 0) w = _st.textLeft + _st.font->m.width(_text) + 1; if (h <= 0) h = qMax(_st.font->height, _st.imageRect.height()); resize(QSize(w, h)); } @@ -86,6 +86,7 @@ void FlatCheckbox::paintEvent(QPaintEvent *e) { QRect tRect(rect()); tRect.setTop(_st.textTop); tRect.setLeft(_st.textLeft); +// p.drawText(_st.textLeft, _st.textTop + _st.font->ascent, _text); p.drawText(tRect, _text, QTextOption(style::al_topleft)); if (_state & StateDisabled) { diff --git a/Telegram/SourceFiles/gui/flatlabel.cpp b/Telegram/SourceFiles/gui/flatlabel.cpp index 9f6d92097..ca95c4040 100644 --- a/Telegram/SourceFiles/gui/flatlabel.cpp +++ b/Telegram/SourceFiles/gui/flatlabel.cpp @@ -43,6 +43,7 @@ void FlatLabel::setText(const QString &text) { void FlatLabel::setRichText(const QString &text) { textstyleSet(&_tst); + const char *t = text.toUtf8().constData(); _text.setRichText(_st.font, text, _labelOptions); textstyleRestore(); int32 w = _st.width ? _st.width : _text.maxWidth(), h = _text.countHeight(w); diff --git a/Telegram/SourceFiles/gui/images.cpp b/Telegram/SourceFiles/gui/images.cpp index c523f7ee4..b9e807cad 100644 --- a/Telegram/SourceFiles/gui/images.cpp +++ b/Telegram/SourceFiles/gui/images.cpp @@ -59,11 +59,19 @@ const QPixmap &Image::pix(int32 w, int32 h) const { restore(); checkload(); - if (w <= 0 || !width() || !height()) w = width(); + if (w <= 0 || !width() || !height()) { + w = width() * cRetinaFactor(); + } else if (cRetina()) { + w *= cRetinaFactor(); + h *= cRetinaFactor(); + } uint64 k = (uint64(w) << 32) | uint64(h); Sizes::const_iterator i = _sizesCache.constFind(k); if (i == _sizesCache.cend()) { QPixmap p(pixNoCache(w, h, true)); + if (cRetina()) { + p.setDevicePixelRatio(cRetinaFactor()); + } i = _sizesCache.insert(k, p); if (!p.isNull()) { globalAquiredSize += int64(p.width()) * p.height() * 4; diff --git a/Telegram/SourceFiles/gui/images.h b/Telegram/SourceFiles/gui/images.h index 00dbce459..db99a71a1 100644 --- a/Telegram/SourceFiles/gui/images.h +++ b/Telegram/SourceFiles/gui/images.h @@ -22,7 +22,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com class Image { public: - Image(QByteArray format = "PNG") : forgot(false), format(format) { + Image(QByteArray format = "PNG") : format(format), forgot(false) { } virtual bool loaded() const { return true; @@ -33,7 +33,7 @@ public: virtual int32 width() const = 0; virtual int32 height() const = 0; - virtual void load(bool loadFirst = false, bool prior = true) { + virtual void load(bool /*loadFirst*/ = false, bool /*prior*/ = true) { } virtual void checkload() const { diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index 1571d46c6..c68154e0a 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -389,7 +389,7 @@ public: void blockCreated() { sumWidth += _t->_blocks.back()->f_width(); - if (sumWidth.toInt() > stopAfterWidth) { + if (sumWidth.floor().toInt() > stopAfterWidth) { sumFinished = true; } } @@ -1187,8 +1187,8 @@ public: QFixed x = _x; if (_align & Qt::AlignHCenter) { - x += _wLeft.toInt() / 2; - } else if ((_align & Qt::AlignLeft) && _parDirection == Qt::RightToLeft || (_align & Qt::AlignRight) && _parDirection == Qt::LeftToRight) { + x += (_wLeft / 2).toInt(); + } else if (((_align & Qt::AlignLeft) && _parDirection == Qt::RightToLeft) || ((_align & Qt::AlignRight) && _parDirection == Qt::LeftToRight)) { x += _wLeft; } @@ -1475,16 +1475,13 @@ public: return false; } else if (_p) { QTextCharFormat format; -#ifdef Q_OS_WIN QTextItemInt gf(glyphs.mid(glyphsStart, glyphsEnd - glyphsStart), &_e->fnt, engine.layoutData->string.unicode() + itemStart, itemEnd - itemStart, engine.fontEngine(si), format); gf.logClusters = logClusters + itemStart - si.position; gf.width = itemWidth; gf.justified = false; - //TODO gf.initWithScriptItem(si); -#endif if (_localFrom + itemStart < _selectedTo && _localFrom + itemEnd > _selectedFrom) { QFixed selX = x, selWidth = itemWidth; @@ -1526,10 +1523,7 @@ public: _p->fillRect(QRectF(selX.toReal(), _y + _yDelta, selWidth.toReal(), _fontHeight), _textStyle->selectBG->b); } -#ifdef Q_OS_WIN - //TODO _p->drawTextItem(QPointF(x.toReal(), textY), gf); -#endif } x += itemWidth; diff --git a/Telegram/SourceFiles/gui/text.h b/Telegram/SourceFiles/gui/text.h index 5e3bcb1a6..d547dfef9 100644 --- a/Telegram/SourceFiles/gui/text.h +++ b/Telegram/SourceFiles/gui/text.h @@ -126,8 +126,8 @@ private: struct TextWord { TextWord() { } - TextWord(uint16 from, QFixed width, QFixed rbearing, QFixed rpadding = 0) : from(from), width(width), rpadding(rpadding), - _rbearing(rbearing.value() > 0xFFFF ? 0xFFFF : (rbearing.value() < -0xFFFF ? -0xFFFF : rbearing.value())) { + TextWord(uint16 from, QFixed width, QFixed rbearing, QFixed rpadding = 0) : from(from), width(width), + _rbearing(rbearing.value() > 0x7FFF ? 0x7FFF : (rbearing.value() < -0x7FFF ? -0x7FFF : rbearing.value())), rpadding(rpadding) { } QFixed f_rbearing() const { return QFixed::fromFixed(_rbearing); @@ -342,7 +342,7 @@ public: bool hasLinks() const; int32 maxWidth() const { - return _maxWidth.toInt(); + return _maxWidth.ceil().toInt(); } int32 minHeight() const { return _minHeight; @@ -358,7 +358,7 @@ public: QString original(uint16 selectedFrom = 0, uint16 selectedTo = 0xFFFF, bool expandLinks = true) const; - bool lastDots(uint32 dots, uint32 maxdots = 3) { // hack for typing animation + bool lastDots(uint32 dots, int32 maxdots = 3) { // hack for typing animation if (_text.size() < maxdots) return false; int32 nowDots = 0, from = _text.size() - maxdots, to = _text.size(); diff --git a/Telegram/SourceFiles/gui/twidget.cpp b/Telegram/SourceFiles/gui/twidget.cpp index 4dfff59f2..f9ee535a5 100644 --- a/Telegram/SourceFiles/gui/twidget.cpp +++ b/Telegram/SourceFiles/gui/twidget.cpp @@ -16,3 +16,35 @@ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE Copyright (c) 2014 John Preston, https://tdesktop.com */ #include "stdafx.h" + +#include "application.h" + +namespace { + void _sendResizeEvents(QWidget *target) { + QResizeEvent e(target->size(), QSize()); + QApplication::sendEvent(target, &e); + + const QObjectList children = target->children(); + for (int i = 0; i < children.size(); ++i) { + QWidget *child = static_cast(children.at(i)); + if (child->isWidgetType() && !child->isWindow() && child->testAttribute(Qt::WA_PendingResizeEvent)) { + _sendResizeEvents(child); + } + } + } +} + +QPixmap myGrab(QWidget *target, const QRect &rect) { + if (!cRetina()) return target->grab(rect); + + if (target->testAttribute(Qt::WA_PendingResizeEvent) || !target->testAttribute(Qt::WA_WState_Created)) { + _sendResizeEvents(target); + } + + qreal dpr = App::app()->devicePixelRatio(); + QPixmap result(rect.size() * dpr); + result.setDevicePixelRatio(dpr); + result.fill(Qt::transparent); + target->render(&result, QPoint(), QRegion(rect), QWidget::DrawWindowBackground | QWidget::DrawChildren | QWidget::IgnoreMask); + return result; +} diff --git a/Telegram/SourceFiles/gui/twidget.h b/Telegram/SourceFiles/gui/twidget.h index f98dd8c46..559b9e2f9 100644 --- a/Telegram/SourceFiles/gui/twidget.h +++ b/Telegram/SourceFiles/gui/twidget.h @@ -31,7 +31,7 @@ public: return dynamic_cast(parentWidget()); } - virtual void leaveToChildEvent(QEvent *e) { // e -- from enterEvent() of child TWidget + virtual void leaveToChildEvent(QEvent */*e*/) { // e -- from enterEvent() of child TWidget } protected: @@ -44,3 +44,5 @@ protected: private: }; + +QPixmap myGrab(QWidget *target, const QRect &rect); diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index c89588aa8..2f176661e 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -2693,6 +2693,20 @@ void HistoryMessage::drawInDialog(QPainter &p, const QRect &r, bool act, const H } } +QString HistoryMessage::notificationHeader() const { + return _history->peer->chat ? from()->name : QString(); +} + +QString HistoryMessage::notificationText() const { + QString msg(media ? media->inDialogsText() : _text.original(0, 0xFFFF, false)); + if (msg.size() > 0xFF) msg = msg.mid(0, 0xFF) + qsl(".."); +// subtitle used +// if (_history->peer->chat || out()) { +// msg = lang(lng_message_with_from).replace(qsl("[c]"), QString()).replace(qsl("[/c]"), QString()).replace(qsl("{from}"), textRichPrepare((_from == App::self()) ? lang(lng_from_you) : _from->firstName)).replace(qsl("{message}"), textRichPrepare(msg)); +// } + return msg; +} + HistoryMessage::~HistoryMessage() { if (media) media->unregItem(this); delete media; @@ -3103,6 +3117,12 @@ void HistoryServiceMsg::drawInDialog(QPainter &p, const QRect &r, bool act, cons cache.drawElided(p, tr.left(), tr.top(), tr.width(), tr.height() / st::dlgHistFont->height); } +QString HistoryServiceMsg::notificationText() const { + QString msg = _text.original(0, 0xFFFF); + if (msg.size() > 0xFF) msg = msg.mid(0, 0xFF) + qsl(".."); + return msg; +} + HistoryServiceMsg::~HistoryServiceMsg() { delete media; } @@ -3142,3 +3162,8 @@ int32 HistoryUnreadBar::resize(int32 width) { void HistoryUnreadBar::drawInDialog(QPainter &p, const QRect &r, bool act, const HistoryItem *&cacheFor, Text &cache) const { } + +QString HistoryUnreadBar::notificationText() const { + return QString(); +} + diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index 1286c84ae..bb965cc35 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -1026,6 +1026,10 @@ public: } virtual void drawInDialog(QPainter &p, const QRect &r, bool act, const HistoryItem *&cacheFor, Text &cache) const = 0; + virtual QString notificationHeader() const { + return QString(); + } + virtual QString notificationText() const = 0; void markRead(); int32 y, id; @@ -1275,7 +1279,9 @@ public: bool getVideoCoords(VideoData *video, int32 &x, int32 &y, int32 &w) const; void drawInDialog(QPainter &p, const QRect &r, bool act, const HistoryItem *&cacheFor, Text &cache) const; - + QString notificationHeader() const; + QString notificationText() const; + void updateMedia(const MTPMessageMedia &media) { if (this->media) this->media->updateFrom(media); } @@ -1348,6 +1354,8 @@ public: bool getPhotoCoords(PhotoData *photo, int32 &x, int32 &y, int32 &w) const; void drawInDialog(QPainter &p, const QRect &r, bool act, const HistoryItem *&cacheFor, Text &cache) const; + QString notificationText() const; + bool needCheck() const { return false; } @@ -1402,6 +1410,8 @@ public: int32 resize(int32 width); void drawInDialog(QPainter &p, const QRect &r, bool act, const HistoryItem *&cacheFor, Text &cache) const; + QString notificationText() const; + QString selectedText(uint32 selection) const { return QString(); } diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index eeb286ba9..647484984 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -1335,7 +1335,7 @@ void HistoryHider::mousePressEvent(QMouseEvent *e) { void HistoryHider::startHide() { if (hiding) return; hiding = true; - if (offered) cacheForAnim = grab(box); + if (offered) cacheForAnim = myGrab(this, box); if (_forwardRequest) MTP::cancel(_forwardRequest); aOpacity.start(0); anim::start(this); @@ -2028,10 +2028,10 @@ PeerData *HistoryWidget::activePeer() const { void HistoryWidget::animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTopBarCache, bool back) { _bgAnimCache = bgAnimCache; _bgAnimTopBarCache = bgAnimTopBarCache; - _animCache = grab(rect()); - App::main()->topBar()->showAll(); - _animTopBarCache = App::main()->topBar()->grab(QRect(0, 0, width(), st::topBarHeight)); - App::main()->topBar()->hideAll(); + _animCache = myGrab(this, rect()); + App::main()->topBar()->stopAnim(); + _animTopBarCache = myGrab(App::main()->topBar(), QRect(0, 0, width(), st::topBarHeight)); + App::main()->topBar()->startAnim(); _scroll.hide(); _attachDocument.hide(); _attachPhoto.hide(); @@ -2057,7 +2057,7 @@ bool HistoryWidget::animStep(float64 ms) { a_coord.finish(); a_alpha.finish(); _bgAnimCache = _animCache = _animTopBarCache = _bgAnimTopBarCache = QPixmap(); - App::main()->topBar()->showAll(); + App::main()->topBar()->stopAnim(); updateControlsVisibility(); if (hist && hist->unreadLoaded) { _scroll.show(); diff --git a/Telegram/SourceFiles/intro/intro.cpp b/Telegram/SourceFiles/intro/intro.cpp index c6b8b9a7b..6b1eed49a 100644 --- a/Telegram/SourceFiles/intro/intro.cpp +++ b/Telegram/SourceFiles/intro/intro.cpp @@ -122,14 +122,14 @@ void IntroWidget::onDoneStateChanged(int oldState, ButtonStateChangeSource sourc void IntroWidget::makeHideCache(int stage) { if (stage < 0) stage = current; int w = st::introSize.width(), h = st::introSize.height(); - cacheForHide = stages[stage]->grab(QRect(st::introSlideShift, 0, w, h)); + cacheForHide = myGrab(stages[stage], QRect(st::introSlideShift, 0, w, h)); cacheForHideInd = stage; } void IntroWidget::makeShowCache(int stage) { if (stage < 0) stage = current + moving; int w = st::introSize.width(), h = st::introSize.height(); - cacheForShow = stages[stage]->grab(QRect(st::introSlideShift, 0, w, h)); + cacheForShow = myGrab(stages[stage], QRect(st::introSlideShift, 0, w, h)); cacheForShowInd = stage; } @@ -138,7 +138,7 @@ void IntroWidget::animShow(const QPixmap &bgAnimCache, bool back) { anim::stop(this); stages[current]->show(); - _animCache = grab(rect()); + _animCache = myGrab(this, rect()); visibilityChanging = 1; a_coord = back ? anim::ivalue(-st::introSlideShift, 0) : anim::ivalue(st::introSlideShift, 0); @@ -213,9 +213,9 @@ void IntroWidget::paintEvent(QPaintEvent *e) { p.drawPixmap(a_coord.current(), 0, _animCache); } else { p.setOpacity(cAlphaHide.current()); - p.drawPixmap(stages[current]->x() + st::introSlideShift + xCoordHide.current(), stages[current]->y(), cacheForHide.width(), cacheForHide.height(), cacheForHide); + p.drawPixmap(stages[current]->x() + st::introSlideShift + xCoordHide.current(), stages[current]->y(), cacheForHide); p.setOpacity(cAlphaShow.current()); - p.drawPixmap(stages[current + moving]->x() + st::introSlideShift + xCoordShow.current(), stages[current + moving]->y(), cacheForShow.width(), cacheForShow.height(), cacheForShow); + p.drawPixmap(stages[current + moving]->x() + st::introSlideShift + xCoordShow.current(), stages[current + moving]->y(), cacheForShow); } } } diff --git a/Telegram/SourceFiles/intro/introphone.cpp b/Telegram/SourceFiles/intro/introphone.cpp index ae03ddef4..4ee34782f 100644 --- a/Telegram/SourceFiles/intro/introphone.cpp +++ b/Telegram/SourceFiles/intro/introphone.cpp @@ -62,7 +62,7 @@ IntroPhone::IntroPhone(IntroWidget *parent) : IntroStage(parent), changed(false) _signup.setLink(1, TextLinkPtr(new SignUpLink(this))); _signup.hide(); - _signupCache = _signup.grab(_signup.rect()); + _signupCache = myGrab(&_signup, _signup.rect()); if (!country.onChooseCountry(intro()->currentCountry())) { country.onChooseCountry(qsl("US")); diff --git a/Telegram/SourceFiles/logs.cpp b/Telegram/SourceFiles/logs.cpp index 4c81c504d..8d281b13d 100644 --- a/Telegram/SourceFiles/logs.cpp +++ b/Telegram/SourceFiles/logs.cpp @@ -69,6 +69,9 @@ void debugLogWrite(const char *file, int32 line, const QString &v) { debugLogStream->flush(); #ifdef Q_OS_WIN OutputDebugString(reinterpret_cast(msg.utf16())); +#endif +#ifdef Q_OS_MAC + _outputDebugString(msg.toUtf8().constData()); #endif } } @@ -113,6 +116,12 @@ void logWrite(const QString &v) { void logsInit() { static _StreamCreator streamCreator; if (mainLogStream) return; + +#ifdef Q_OS_MAC + if (QDir(cWorkingDir()).absolutePath() == qsl("/")) { + cSetWorkingDir(cExeDir()); + } +#endif QString oldDir = cWorkingDir(); mainLog.setFileName(cWorkingDir() + "log.txt"); diff --git a/Telegram/SourceFiles/main.cpp b/Telegram/SourceFiles/main.cpp index d6ecc5058..8174807e2 100644 --- a/Telegram/SourceFiles/main.cpp +++ b/Telegram/SourceFiles/main.cpp @@ -25,7 +25,7 @@ int main(int argc, char *argv[]) { #endif settingsParseArgs(argc, argv); - for (uint32 i = 0; i < argc; ++i) { + for (int32 i = 0; i < argc; ++i) { if (string("-fixprevious") == argv[i]) { return psFixPrevious(); } else if (string("-cleanup") == argv[i]) { diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index d373f283b..51177d996 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -1,4 +1,4 @@ -/* + /* This file is part of Telegram Desktop, an unofficial desktop messaging app, see https://telegram.org @@ -26,7 +26,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "mainwidget.h" #include "boxes/confirmbox.h" -TopBarWidget::TopBarWidget(MainWidget *w) : QWidget(w), a_over(0), _drawShadow(true), _selCount(0), _selStrWidth(0), +TopBarWidget::TopBarWidget(MainWidget *w) : QWidget(w), + a_over(0), _drawShadow(true), _selCount(0), _selStrWidth(0), _animating(false), _clearSelection(this, lang(lng_selected_clear), st::topBarButton), _forward(this, lang(lng_selected_forward), st::topBarActionButton), _delete(this, lang(lng_selected_delete), st::topBarActionButton), @@ -182,14 +183,27 @@ void TopBarWidget::resizeEvent(QResizeEvent *e) { if (!_addContact.isHidden()) _addContact.move(r -= _addContact.width(), 0); } -void TopBarWidget::hideAll() { +void TopBarWidget::startAnim() { _edit.hide(); _leaveGroup.hide(); _addContact.hide(); _deleteContact.hide(); + _clearSelection.hide(); + _delete.hide(); + _forward.hide(); + _animating = true; +} + +void TopBarWidget::stopAnim() { + _animating = false; + showAll(); } void TopBarWidget::showAll() { + if (_animating) { + resizeEvent(0); + return; + } PeerData *p = App::main() ? App::main()->profilePeer() : 0; if (p && (p->chat || p->asUser()->contact >= 0)) { if (p->chat) { @@ -679,11 +693,11 @@ void MainWidget::showPeer(const PeerId &peerId, bool back, bool force) { dialogs.enableShadow(false); if (peerId) { _topBar.enableShadow(false); - animCache = grab(history.geometry()); + animCache = myGrab(this, history.geometry()); } else { - animCache = grab(QRect(_dialogsWidth, 0, width() - _dialogsWidth, height())); + animCache = myGrab(this, QRect(_dialogsWidth, 0, width() - _dialogsWidth, height())); } - animTopBarCache = grab(QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight)); + animTopBarCache = myGrab(this, QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight)); dialogs.enableShadow(); _topBar.enableShadow(); history.show(); @@ -733,7 +747,7 @@ PeerData *MainWidget::profilePeer() { void MainWidget::showPeerProfile(const PeerData *peer, bool back) { dialogs.enableShadow(false); _topBar.enableShadow(false); - QPixmap animCache = grab(history.geometry()), animTopBarCache = grab(QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight)); + QPixmap animCache = myGrab(this, history.geometry()), animTopBarCache = myGrab(this, QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight)); dialogs.enableShadow(); _topBar.enableShadow(); if (!back) { @@ -958,7 +972,7 @@ void MainWidget::animShow(const QPixmap &bgAnimCache, bool back) { anim::stop(this); showAll(); - _animCache = grab(rect()); + _animCache = myGrab(this, rect()); a_coord = back ? anim::ivalue(-st::introSlideShift, 0) : anim::ivalue(st::introSlideShift, 0); a_alpha = anim::fvalue(0, 1); @@ -1368,6 +1382,7 @@ void MainWidget::setOnline(int windowState) { bool isOnline = App::wnd()->psIsOnline(windowState); if (isOnline || windowState >= 0) { onlineRequest = MTP::send(MTPaccount_UpdateStatus(MTP_bool(!isOnline))); + LOG(("App Info: Updating Online!")); } if (App::self()) App::self()->onlineTill = unixtime() + (isOnline ? 60 : -1); if (profile) { @@ -1385,7 +1400,7 @@ void MainWidget::mainStateChanged(Qt::WindowState state) { void MainWidget::updateReceived(const mtpPrime *from, const mtpPrime *end) { if (end <= from || !MTP::authedId()) return; - if (*from == mtpc_new_session_created) { + if (mtpTypeId(*from) == mtpc_new_session_created) { MTPNewSession newSession(from, end); updSeq = 0; return getDifference(); diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index 801bafd5d..5a2b80a27 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -44,7 +44,8 @@ public: bool animStep(float64 ms); void enableShadow(bool enable = true); - void hideAll(); + void startAnim(); + void stopAnim(); void showAll(); void showSelected(uint32 selCount); @@ -73,6 +74,8 @@ private: uint32 _selCount; QString _selStr; int32 _selStrWidth; + + bool _animating; FlatButton _clearSelection; FlatButton _forward, _delete; diff --git a/Telegram/SourceFiles/mtproto/generate.py b/Telegram/SourceFiles/mtproto/generate.py index 3ce26816c..3cab29832 100644 --- a/Telegram/SourceFiles/mtproto/generate.py +++ b/Telegram/SourceFiles/mtproto/generate.py @@ -189,13 +189,19 @@ with open('scheme.tl') as f: funcsText += '\tmtpTypeId type() const {\n\t\treturn mtpc_' + name + ';\n\t}\n'; # type id - funcsText += '\tvoid read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_' + name + ') {\n'; # read method + if (len(prmsList)): + funcsText += '\tvoid read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_' + name + ') {\n'; # read method + else: + funcsText += '\tvoid read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_' + name + ') {\n'; # read method for k in prmsList: v = prms[k]; funcsText += '\t\tv' + k + '.read(from, end);\n'; funcsText += '\t}\n'; - funcsText += '\tvoid write(mtpBuffer &to) const {\n'; # write method + if (len(prmsList)): + funcsText += '\tvoid write(mtpBuffer &to) const {\n'; # write method + else: + funcsText += '\tvoid write(mtpBuffer &/*to*/) const {\n'; # write method for k in prmsList: v = prms[k]; funcsText += '\t\tv' + k + '.write(to);\n'; @@ -365,10 +371,10 @@ for restype in typesList: getters += '\t}\n'; constructsText += '\texplicit MTP' + restype + '(MTPD' + name + ' *_data);\n'; # by-data type constructor - constructsInline += 'inline MTP' + restype + '::MTP' + restype + '(MTPD' + name + ' *_data) : '; + constructsInline += 'inline MTP' + restype + '::MTP' + restype + '(MTPD' + name + ' *_data) : mtpDataOwner(_data)'; if (withType): - constructsInline += '_type(mtpc_' + name + '), '; - constructsInline += 'mtpDataOwner(_data) {\n}\n'; + constructsInline += ', _type(mtpc_' + name + ')'; + constructsInline += ' {\n}\n'; dataText += '\tMTPD' + name + '('; # params constructor prmsStr = []; @@ -532,7 +538,10 @@ for restype in typesList: inlineMethods += '}\n'; typesText += '\tvoid write(mtpBuffer &to) const;\n'; # write method - inlineMethods += 'inline void MTP' + restype + '::write(mtpBuffer &to) const {\n' + if (len(writer)): + inlineMethods += 'inline void MTP' + restype + '::write(mtpBuffer &to) const {\n'; + else: + inlineMethods += 'inline void MTP' + restype + '::write(mtpBuffer &/*to*/) const {\n'; if (withType): inlineMethods += '\tswitch (_type) {\n'; inlineMethods += writer; @@ -546,9 +555,10 @@ for restype in typesList: typesText += '\nprivate:\n'; # private constructors if (withType): # by-type-id constructor typesText += '\texplicit MTP' + restype + '(mtpTypeId type);\n'; - inlineMethods += 'inline MTP' + restype + '::MTP' + restype + '(mtpTypeId type) : _type(type)'; + inlineMethods += 'inline MTP' + restype + '::MTP' + restype + '(mtpTypeId type) : '; if (withData): - inlineMethods += ', mtpDataOwner(0)'; + inlineMethods += 'mtpDataOwner(0), '; + inlineMethods += '_type(type)'; inlineMethods += ' {\n'; inlineMethods += '\tswitch (type) {\n'; # type id check inlineMethods += switchLines; @@ -583,7 +593,7 @@ textSerializeFull += '\t\t\t++from;\n'; textSerializeFull += '\t\t\t++start;\n'; textSerializeFull += '\t\t}\n\n'; textSerializeFull += '\t\tQString result;\n'; -textSerializeFull += '\t\tswitch (cons) {\n' + textSerialize + '\t\t}\n\n'; +textSerializeFull += '\t\tswitch (mtpTypeId(cons)) {\n' + textSerialize + '\t\t}\n\n'; textSerializeFull += '\t\treturn mtpTextSerializeCore(from, end, cons, level, vcons);\n'; textSerializeFull += '\t} catch (Exception &e) {\n'; textSerializeFull += '\t\tQString result = "(" + QString(e.what()) + QString("), cons: %1").arg(cons);\n'; diff --git a/Telegram/SourceFiles/mtproto/mtp.cpp b/Telegram/SourceFiles/mtproto/mtp.cpp index 5a5516a96..8e875c965 100644 --- a/Telegram/SourceFiles/mtproto/mtp.cpp +++ b/Telegram/SourceFiles/mtproto/mtp.cpp @@ -31,7 +31,6 @@ namespace { AuthExportRequests authExportRequests; bool started = false; - bool loadingConfig = false; uint32 layer; @@ -440,7 +439,9 @@ namespace MTP { _localKey.setKey(key); } - void start() { + void start() { + unixtimeInit(); + if (!localKey().created()) { LOG(("App Error: trying to start MTP without local key!")); return; diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.cpp b/Telegram/SourceFiles/mtproto/mtpConnection.cpp index 29fccb131..c11fac3a0 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.cpp +++ b/Telegram/SourceFiles/mtproto/mtpConnection.cpp @@ -686,6 +686,7 @@ void MTPautoConnection::httpSend(mtpBuffer &buffer) { QNetworkRequest request(address); request.setHeader(QNetworkRequest::ContentLengthHeader, QVariant(requestSize)); + request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant(qsl("application/x-www-form-urlencoded"))); TCP_LOG(("HTTP Info: sending %1 len request %2").arg(requestSize).arg(mb(&buffer[2], requestSize).str())); requests.insert(manager.post(request, QByteArray((const char*)(&buffer[2]), requestSize))); @@ -945,6 +946,7 @@ void MTPhttpConnection::sendData(mtpBuffer &buffer) { QNetworkRequest request(address); request.setHeader(QNetworkRequest::ContentLengthHeader, QVariant(requestSize)); + request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant(qsl("application/x-www-form-urlencoded"))); TCP_LOG(("HTTP Info: sending %1 len request %2").arg(requestSize).arg(mb(&buffer[2], requestSize).str())); requests.insert(manager.post(request, QByteArray((const char*)(&buffer[2]), requestSize))); diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.h b/Telegram/SourceFiles/mtproto/mtpConnection.h index de781ae48..0714c1823 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.h +++ b/Telegram/SourceFiles/mtproto/mtpConnection.h @@ -28,7 +28,7 @@ inline bool mtpRequestData::isSentContainer(const mtpRequest &request) { // "req } inline bool mtpRequestData::isStateRequest(const mtpRequest &request) { if (request->size() < 9) return false; - return ((*request)[8] == mtpc_msgs_state_req); + return (mtpTypeId((*request)[8]) == mtpc_msgs_state_req); } inline bool mtpRequestData::needAck(const mtpRequest &request) { if (request->size() < 9) return false; @@ -392,10 +392,10 @@ private: // Auth key creation fields and methods struct AuthKeyCreateData { AuthKeyCreateData() - : retries(0) - , g(0) - , new_nonce(*(MTPint256*)((uchar*)new_nonce_buf)) + : new_nonce(*(MTPint256*)((uchar*)new_nonce_buf)) , auth_key_aux_hash(*(MTPlong*)((uchar*)new_nonce_buf + 33)) + , retries(0) + , g(0) , req_num(0) , msgs_sent(0) { memset(new_nonce_buf, 0, sizeof(new_nonce_buf)); diff --git a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h index 595d6b713..c19477c7c 100644 --- a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h +++ b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h @@ -51,7 +51,7 @@ typedef uint64 mtpMsgId; typedef uint64 mtpPingId; typedef QVector mtpBuffer; -typedef int32 mtpTypeId; +typedef uint32 mtpTypeId; class mtpRequestData; class mtpRequest : public QSharedPointer { @@ -335,9 +335,9 @@ enum { // mtpc_msg_copy = 0xe06046b2, mtpc_gzip_packed = 0x3072cfa1 }; -static const int32 mtpc_bytes = mtpc_string; -static const int32 mtpc_core_message = -1; // undefined type, but is used -static const uint32 mtpLayers[] = { +static const mtpTypeId mtpc_bytes = mtpc_string; +static const mtpTypeId mtpc_core_message = -1; // undefined type, but is used +static const mtpTypeId mtpLayers[] = { mtpc_invokeWithLayer1, mtpc_invokeWithLayer2, mtpc_invokeWithLayer3, @@ -999,10 +999,10 @@ typedef MTPBoxed MTPNull; QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpPrime cons = 0, uint32 level = 0, mtpPrime vcons = 0); -inline QString mtpTextSerializeCore(const mtpPrime *&from, const mtpPrime *end, mtpPrime cons, uint32 level, mtpPrime vcons = 0) { +inline QString mtpTextSerializeCore(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons, uint32 level, mtpPrime vcons = 0) { QString add = QString(" ").repeated(level * 2); - switch (cons) { + switch (mtpTypeId(cons)) { case mtpc_int: { MTPint value(from, end, cons); return QString("%1 [INT]").arg(value.v); } @@ -1047,7 +1047,7 @@ inline QString mtpTextSerializeCore(const mtpPrime *&from, const mtpPrime *end, QString result; if (cnt) { result += "\n" + add; - for (uint32 i = 0; i < cnt; ++i) { + for (int32 i = 0; i < cnt; ++i) { result += " " + mtpTextSerialize(from, end, vcons, level + 1) + ",\n" + add; } } else { @@ -1091,7 +1091,7 @@ inline QString mtpTextSerializeCore(const mtpPrime *&from, const mtpPrime *end, case mtpc_gzip_packed: { MTPstring packed(from, end); // read packed string as serialized mtp string type - uint32 packedLen = packed.c_string().v.size(), unpackedChunk = packedLen, unpackedLen = 0; + uint32 packedLen = packed.c_string().v.size(), unpackedChunk = packedLen; mtpBuffer result; // * 4 because of mtpPrime type result.resize(0); @@ -1132,7 +1132,7 @@ inline QString mtpTextSerializeCore(const mtpPrime *&from, const mtpPrime *end, return "[GZIPPED] " + mtpTextSerialize(newFrom, newEnd, 0, level); } default: { - for (int i = 1; i < mtpLayerMax; ++i) { + for (uint32 i = 1; i < mtpLayerMax; ++i) { if (cons == mtpLayers[i]) { return QString("[LAYER%1] ").arg(i + 1) + mtpTextSerialize(from, end, 0, level); } diff --git a/Telegram/SourceFiles/mtproto/mtpPublicRSA.h b/Telegram/SourceFiles/mtproto/mtpPublicRSA.h index e6342b0a7..9c28aa940 100644 --- a/Telegram/SourceFiles/mtproto/mtpPublicRSA.h +++ b/Telegram/SourceFiles/mtproto/mtpPublicRSA.h @@ -69,7 +69,7 @@ private: } struct mtpPublicRSAInner { - mtpPublicRSAInner(RSA *_prsa, uint64 _fp) : prsa(_prsa), fp(_fp), cnt(1) { + mtpPublicRSAInner(RSA *_prsa, uint64 _fp) : prsa(_prsa), cnt(1), fp(_fp) { } ~mtpPublicRSAInner() { RSA_free(prsa); diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.h b/Telegram/SourceFiles/mtproto/mtpScheme.h index 53c1c5fca..15a4d4bef 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.h +++ b/Telegram/SourceFiles/mtproto/mtpScheme.h @@ -9829,7 +9829,7 @@ public: mtpTypeId type() const { return mtpc_req_pq; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_req_pq) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_req_pq) { vnonce.read(from, end); } void write(mtpBuffer &to) const { @@ -9873,7 +9873,7 @@ public: mtpTypeId type() const { return mtpc_req_DH_params; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_req_DH_params) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_req_DH_params) { vnonce.read(from, end); vserver_nonce.read(from, end); vp.read(from, end); @@ -9924,7 +9924,7 @@ public: mtpTypeId type() const { return mtpc_set_client_DH_params; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_set_client_DH_params) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_set_client_DH_params) { vnonce.read(from, end); vserver_nonce.read(from, end); vencrypted_data.read(from, end); @@ -9967,7 +9967,7 @@ public: mtpTypeId type() const { return mtpc_rpc_drop_answer; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_rpc_drop_answer) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_rpc_drop_answer) { vreq_msg_id.read(from, end); } void write(mtpBuffer &to) const { @@ -10006,7 +10006,7 @@ public: mtpTypeId type() const { return mtpc_get_future_salts; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_get_future_salts) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_get_future_salts) { vnum.read(from, end); } void write(mtpBuffer &to) const { @@ -10045,7 +10045,7 @@ public: mtpTypeId type() const { return mtpc_ping; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_ping) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_ping) { vping_id.read(from, end); } void write(mtpBuffer &to) const { @@ -10085,7 +10085,7 @@ public: mtpTypeId type() const { return mtpc_ping_delay_disconnect; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_ping_delay_disconnect) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_ping_delay_disconnect) { vping_id.read(from, end); vdisconnect_delay.read(from, end); } @@ -10126,7 +10126,7 @@ public: mtpTypeId type() const { return mtpc_destroy_session; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_destroy_session) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_destroy_session) { vsession_id.read(from, end); } void write(mtpBuffer &to) const { @@ -10169,7 +10169,7 @@ public: mtpTypeId type() const { return mtpc_register_saveDeveloperInfo; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_register_saveDeveloperInfo) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_register_saveDeveloperInfo) { vname.read(from, end); vemail.read(from, end); vphone_number.read(from, end); @@ -10218,7 +10218,7 @@ public: mtpTypeId type() const { return mtpc_invokeAfterMsg; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_invokeAfterMsg) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_invokeAfterMsg) { vmsg_id.read(from, end); vquery.read(from, end); } @@ -10260,7 +10260,7 @@ public: mtpTypeId type() const { return mtpc_invokeAfterMsgs; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_invokeAfterMsgs) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_invokeAfterMsgs) { vmsg_ids.read(from, end); vquery.read(from, end); } @@ -10300,7 +10300,7 @@ public: mtpTypeId type() const { return mtpc_auth_checkPhone; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_checkPhone) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_auth_checkPhone) { vphone_number.read(from, end); } void write(mtpBuffer &to) const { @@ -10343,7 +10343,7 @@ public: mtpTypeId type() const { return mtpc_auth_sendCode; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_sendCode) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_auth_sendCode) { vphone_number.read(from, end); vsms_type.read(from, end); vapi_id.read(from, end); @@ -10391,7 +10391,7 @@ public: mtpTypeId type() const { return mtpc_auth_sendCall; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_sendCall) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_auth_sendCall) { vphone_number.read(from, end); vphone_code_hash.read(from, end); } @@ -10436,7 +10436,7 @@ public: mtpTypeId type() const { return mtpc_auth_signUp; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_signUp) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_auth_signUp) { vphone_number.read(from, end); vphone_code_hash.read(from, end); vphone_code.read(from, end); @@ -10485,7 +10485,7 @@ public: mtpTypeId type() const { return mtpc_auth_signIn; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_signIn) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_auth_signIn) { vphone_number.read(from, end); vphone_code_hash.read(from, end); vphone_code.read(from, end); @@ -10524,9 +10524,9 @@ public: mtpTypeId type() const { return mtpc_auth_logOut; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_logOut) { + void read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_auth_logOut) { } - void write(mtpBuffer &to) const { + void write(mtpBuffer &/*to*/) const { } typedef MTPBool ResponseType; @@ -10555,9 +10555,9 @@ public: mtpTypeId type() const { return mtpc_auth_resetAuthorizations; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_resetAuthorizations) { + void read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_auth_resetAuthorizations) { } - void write(mtpBuffer &to) const { + void write(mtpBuffer &/*to*/) const { } typedef MTPBool ResponseType; @@ -10591,7 +10591,7 @@ public: mtpTypeId type() const { return mtpc_auth_sendInvites; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_sendInvites) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_auth_sendInvites) { vphone_numbers.read(from, end); vmessage.read(from, end); } @@ -10632,7 +10632,7 @@ public: mtpTypeId type() const { return mtpc_auth_exportAuthorization; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_exportAuthorization) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_auth_exportAuthorization) { vdc_id.read(from, end); } void write(mtpBuffer &to) const { @@ -10672,7 +10672,7 @@ public: mtpTypeId type() const { return mtpc_auth_importAuthorization; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_importAuthorization) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_auth_importAuthorization) { vid.read(from, end); vbytes.read(from, end); } @@ -10719,7 +10719,7 @@ public: mtpTypeId type() const { return mtpc_account_registerDevice; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_registerDevice) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_account_registerDevice) { vtoken_type.read(from, end); vtoken.read(from, end); vdevice_model.read(from, end); @@ -10771,7 +10771,7 @@ public: mtpTypeId type() const { return mtpc_account_unregisterDevice; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_unregisterDevice) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_account_unregisterDevice) { vtoken_type.read(from, end); vtoken.read(from, end); } @@ -10813,7 +10813,7 @@ public: mtpTypeId type() const { return mtpc_account_updateNotifySettings; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_updateNotifySettings) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_account_updateNotifySettings) { vpeer.read(from, end); vsettings.read(from, end); } @@ -10854,7 +10854,7 @@ public: mtpTypeId type() const { return mtpc_account_getNotifySettings; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_getNotifySettings) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_account_getNotifySettings) { vpeer.read(from, end); } void write(mtpBuffer &to) const { @@ -10889,9 +10889,9 @@ public: mtpTypeId type() const { return mtpc_account_resetNotifySettings; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_resetNotifySettings) { + void read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_account_resetNotifySettings) { } - void write(mtpBuffer &to) const { + void write(mtpBuffer &/*to*/) const { } typedef MTPBool ResponseType; @@ -10925,7 +10925,7 @@ public: mtpTypeId type() const { return mtpc_account_updateProfile; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_updateProfile) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_account_updateProfile) { vfirst_name.read(from, end); vlast_name.read(from, end); } @@ -10966,7 +10966,7 @@ public: mtpTypeId type() const { return mtpc_account_updateStatus; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_updateStatus) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_account_updateStatus) { voffline.read(from, end); } void write(mtpBuffer &to) const { @@ -11001,9 +11001,9 @@ public: mtpTypeId type() const { return mtpc_account_getWallPapers; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_getWallPapers) { + void read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_account_getWallPapers) { } - void write(mtpBuffer &to) const { + void write(mtpBuffer &/*to*/) const { } typedef MTPVector ResponseType; @@ -11036,7 +11036,7 @@ public: mtpTypeId type() const { return mtpc_users_getUsers; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_users_getUsers) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_users_getUsers) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -11075,7 +11075,7 @@ public: mtpTypeId type() const { return mtpc_users_getFullUser; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_users_getFullUser) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_users_getFullUser) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -11110,9 +11110,9 @@ public: mtpTypeId type() const { return mtpc_contacts_getStatuses; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_getStatuses) { + void read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_contacts_getStatuses) { } - void write(mtpBuffer &to) const { + void write(mtpBuffer &/*to*/) const { } typedef MTPVector ResponseType; @@ -11145,7 +11145,7 @@ public: mtpTypeId type() const { return mtpc_contacts_getContacts; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_getContacts) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_contacts_getContacts) { vhash.read(from, end); } void write(mtpBuffer &to) const { @@ -11185,7 +11185,7 @@ public: mtpTypeId type() const { return mtpc_contacts_importContacts; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_importContacts) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_contacts_importContacts) { vcontacts.read(from, end); vreplace.read(from, end); } @@ -11227,7 +11227,7 @@ public: mtpTypeId type() const { return mtpc_contacts_search; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_search) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_contacts_search) { vq.read(from, end); vlimit.read(from, end); } @@ -11268,7 +11268,7 @@ public: mtpTypeId type() const { return mtpc_contacts_getSuggested; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_getSuggested) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_contacts_getSuggested) { vlimit.read(from, end); } void write(mtpBuffer &to) const { @@ -11307,7 +11307,7 @@ public: mtpTypeId type() const { return mtpc_contacts_deleteContact; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_deleteContact) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_contacts_deleteContact) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -11346,7 +11346,7 @@ public: mtpTypeId type() const { return mtpc_contacts_deleteContacts; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_deleteContacts) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_contacts_deleteContacts) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -11385,7 +11385,7 @@ public: mtpTypeId type() const { return mtpc_contacts_block; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_block) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_contacts_block) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -11424,7 +11424,7 @@ public: mtpTypeId type() const { return mtpc_contacts_unblock; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_unblock) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_contacts_unblock) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -11464,7 +11464,7 @@ public: mtpTypeId type() const { return mtpc_contacts_getBlocked; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_getBlocked) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_contacts_getBlocked) { voffset.read(from, end); vlimit.read(from, end); } @@ -11505,7 +11505,7 @@ public: mtpTypeId type() const { return mtpc_messages_getMessages; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_getMessages) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_getMessages) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -11546,7 +11546,7 @@ public: mtpTypeId type() const { return mtpc_messages_getDialogs; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_getDialogs) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_getDialogs) { voffset.read(from, end); vmax_id.read(from, end); vlimit.read(from, end); @@ -11592,7 +11592,7 @@ public: mtpTypeId type() const { return mtpc_messages_getHistory; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_getHistory) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_getHistory) { vpeer.read(from, end); voffset.read(from, end); vmax_id.read(from, end); @@ -11644,7 +11644,7 @@ public: mtpTypeId type() const { return mtpc_messages_search; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_search) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_search) { vpeer.read(from, end); vq.read(from, end); vfilter.read(from, end); @@ -11699,7 +11699,7 @@ public: mtpTypeId type() const { return mtpc_messages_readHistory; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_readHistory) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_readHistory) { vpeer.read(from, end); vmax_id.read(from, end); voffset.read(from, end); @@ -11743,7 +11743,7 @@ public: mtpTypeId type() const { return mtpc_messages_deleteHistory; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_deleteHistory) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_deleteHistory) { vpeer.read(from, end); voffset.read(from, end); } @@ -11784,7 +11784,7 @@ public: mtpTypeId type() const { return mtpc_messages_deleteMessages; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_deleteMessages) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_deleteMessages) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -11823,7 +11823,7 @@ public: mtpTypeId type() const { return mtpc_messages_restoreMessages; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_restoreMessages) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_restoreMessages) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -11862,7 +11862,7 @@ public: mtpTypeId type() const { return mtpc_messages_receivedMessages; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_receivedMessages) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_receivedMessages) { vmax_id.read(from, end); } void write(mtpBuffer &to) const { @@ -11902,7 +11902,7 @@ public: mtpTypeId type() const { return mtpc_messages_setTyping; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_setTyping) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_setTyping) { vpeer.read(from, end); vtyping.read(from, end); } @@ -11945,7 +11945,7 @@ public: mtpTypeId type() const { return mtpc_messages_sendMessage; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_sendMessage) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_sendMessage) { vpeer.read(from, end); vmessage.read(from, end); vrandom_id.read(from, end); @@ -11990,7 +11990,7 @@ public: mtpTypeId type() const { return mtpc_messages_sendMedia; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_sendMedia) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_sendMedia) { vpeer.read(from, end); vmedia.read(from, end); vrandom_id.read(from, end); @@ -12034,7 +12034,7 @@ public: mtpTypeId type() const { return mtpc_messages_forwardMessages; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_forwardMessages) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_forwardMessages) { vpeer.read(from, end); vid.read(from, end); } @@ -12075,7 +12075,7 @@ public: mtpTypeId type() const { return mtpc_messages_getChats; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_getChats) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_getChats) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -12114,7 +12114,7 @@ public: mtpTypeId type() const { return mtpc_messages_getFullChat; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_getFullChat) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_getFullChat) { vchat_id.read(from, end); } void write(mtpBuffer &to) const { @@ -12154,7 +12154,7 @@ public: mtpTypeId type() const { return mtpc_messages_editChatTitle; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_editChatTitle) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_editChatTitle) { vchat_id.read(from, end); vtitle.read(from, end); } @@ -12196,7 +12196,7 @@ public: mtpTypeId type() const { return mtpc_messages_editChatPhoto; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_editChatPhoto) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_editChatPhoto) { vchat_id.read(from, end); vphoto.read(from, end); } @@ -12239,7 +12239,7 @@ public: mtpTypeId type() const { return mtpc_messages_addChatUser; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_addChatUser) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_addChatUser) { vchat_id.read(from, end); vuser_id.read(from, end); vfwd_limit.read(from, end); @@ -12283,7 +12283,7 @@ public: mtpTypeId type() const { return mtpc_messages_deleteChatUser; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_deleteChatUser) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_deleteChatUser) { vchat_id.read(from, end); vuser_id.read(from, end); } @@ -12325,7 +12325,7 @@ public: mtpTypeId type() const { return mtpc_messages_createChat; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_createChat) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_createChat) { vusers.read(from, end); vtitle.read(from, end); } @@ -12362,9 +12362,9 @@ public: mtpTypeId type() const { return mtpc_updates_getState; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_updates_getState) { + void read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_updates_getState) { } - void write(mtpBuffer &to) const { + void write(mtpBuffer &/*to*/) const { } typedef MTPupdates_State ResponseType; @@ -12399,7 +12399,7 @@ public: mtpTypeId type() const { return mtpc_updates_getDifference; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_updates_getDifference) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_updates_getDifference) { vpts.read(from, end); vdate.read(from, end); vqts.read(from, end); @@ -12443,7 +12443,7 @@ public: mtpTypeId type() const { return mtpc_photos_updateProfilePhoto; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_photos_updateProfilePhoto) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_photos_updateProfilePhoto) { vid.read(from, end); vcrop.read(from, end); } @@ -12487,7 +12487,7 @@ public: mtpTypeId type() const { return mtpc_photos_uploadProfilePhoto; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_photos_uploadProfilePhoto) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_photos_uploadProfilePhoto) { vfile.read(from, end); vcaption.read(from, end); vgeo_point.read(from, end); @@ -12534,7 +12534,7 @@ public: mtpTypeId type() const { return mtpc_upload_saveFilePart; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_upload_saveFilePart) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_upload_saveFilePart) { vfile_id.read(from, end); vfile_part.read(from, end); vbytes.read(from, end); @@ -12579,7 +12579,7 @@ public: mtpTypeId type() const { return mtpc_upload_getFile; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_upload_getFile) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_upload_getFile) { vlocation.read(from, end); voffset.read(from, end); vlimit.read(from, end); @@ -12618,9 +12618,9 @@ public: mtpTypeId type() const { return mtpc_help_getConfig; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getConfig) { + void read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_help_getConfig) { } - void write(mtpBuffer &to) const { + void write(mtpBuffer &/*to*/) const { } typedef MTPConfig ResponseType; @@ -12649,9 +12649,9 @@ public: mtpTypeId type() const { return mtpc_help_getNearestDc; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getNearestDc) { + void read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_help_getNearestDc) { } - void write(mtpBuffer &to) const { + void write(mtpBuffer &/*to*/) const { } typedef MTPNearestDc ResponseType; @@ -12687,7 +12687,7 @@ public: mtpTypeId type() const { return mtpc_help_getAppUpdate; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getAppUpdate) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_help_getAppUpdate) { vdevice_model.read(from, end); vsystem_version.read(from, end); vapp_version.read(from, end); @@ -12732,7 +12732,7 @@ public: mtpTypeId type() const { return mtpc_help_saveAppLog; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_saveAppLog) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_help_saveAppLog) { vevents.read(from, end); } void write(mtpBuffer &to) const { @@ -12771,7 +12771,7 @@ public: mtpTypeId type() const { return mtpc_help_getInviteText; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getInviteText) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_help_getInviteText) { vlang_code.read(from, end); } void write(mtpBuffer &to) const { @@ -12813,7 +12813,7 @@ public: mtpTypeId type() const { return mtpc_photos_getUserPhotos; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_photos_getUserPhotos) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_photos_getUserPhotos) { vuser_id.read(from, end); voffset.read(from, end); vmax_id.read(from, end); @@ -12860,7 +12860,7 @@ public: mtpTypeId type() const { return mtpc_messages_forwardMessage; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_forwardMessage) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_forwardMessage) { vpeer.read(from, end); vid.read(from, end); vrandom_id.read(from, end); @@ -12905,7 +12905,7 @@ public: mtpTypeId type() const { return mtpc_messages_sendBroadcast; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_sendBroadcast) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_sendBroadcast) { vcontacts.read(from, end); vmessage.read(from, end); vmedia.read(from, end); @@ -12950,7 +12950,7 @@ public: mtpTypeId type() const { return mtpc_geochats_getLocated; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_getLocated) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_getLocated) { vgeo_point.read(from, end); vradius.read(from, end); vlimit.read(from, end); @@ -12994,7 +12994,7 @@ public: mtpTypeId type() const { return mtpc_geochats_getRecents; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_getRecents) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_getRecents) { voffset.read(from, end); vlimit.read(from, end); } @@ -13035,7 +13035,7 @@ public: mtpTypeId type() const { return mtpc_geochats_checkin; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_checkin) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_checkin) { vpeer.read(from, end); } void write(mtpBuffer &to) const { @@ -13074,7 +13074,7 @@ public: mtpTypeId type() const { return mtpc_geochats_getFullChat; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_getFullChat) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_getFullChat) { vpeer.read(from, end); } void write(mtpBuffer &to) const { @@ -13115,7 +13115,7 @@ public: mtpTypeId type() const { return mtpc_geochats_editChatTitle; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_editChatTitle) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_editChatTitle) { vpeer.read(from, end); vtitle.read(from, end); vaddress.read(from, end); @@ -13159,7 +13159,7 @@ public: mtpTypeId type() const { return mtpc_geochats_editChatPhoto; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_editChatPhoto) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_editChatPhoto) { vpeer.read(from, end); vphoto.read(from, end); } @@ -13207,7 +13207,7 @@ public: mtpTypeId type() const { return mtpc_geochats_search; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_search) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_search) { vpeer.read(from, end); vq.read(from, end); vfilter.read(from, end); @@ -13263,7 +13263,7 @@ public: mtpTypeId type() const { return mtpc_geochats_getHistory; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_getHistory) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_getHistory) { vpeer.read(from, end); voffset.read(from, end); vmax_id.read(from, end); @@ -13309,7 +13309,7 @@ public: mtpTypeId type() const { return mtpc_geochats_setTyping; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_setTyping) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_setTyping) { vpeer.read(from, end); vtyping.read(from, end); } @@ -13352,7 +13352,7 @@ public: mtpTypeId type() const { return mtpc_geochats_sendMessage; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_sendMessage) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_sendMessage) { vpeer.read(from, end); vmessage.read(from, end); vrandom_id.read(from, end); @@ -13397,7 +13397,7 @@ public: mtpTypeId type() const { return mtpc_geochats_sendMedia; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_sendMedia) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_sendMedia) { vpeer.read(from, end); vmedia.read(from, end); vrandom_id.read(from, end); @@ -13443,7 +13443,7 @@ public: mtpTypeId type() const { return mtpc_geochats_createGeoChat; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_createGeoChat) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_createGeoChat) { vtitle.read(from, end); vgeo_point.read(from, end); vaddress.read(from, end); @@ -13489,7 +13489,7 @@ public: mtpTypeId type() const { return mtpc_messages_getDhConfig; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_getDhConfig) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_getDhConfig) { vversion.read(from, end); vrandom_length.read(from, end); } @@ -13532,7 +13532,7 @@ public: mtpTypeId type() const { return mtpc_messages_requestEncryption; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_requestEncryption) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_requestEncryption) { vuser_id.read(from, end); vrandom_id.read(from, end); vg_a.read(from, end); @@ -13577,7 +13577,7 @@ public: mtpTypeId type() const { return mtpc_messages_acceptEncryption; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_acceptEncryption) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_acceptEncryption) { vpeer.read(from, end); vg_b.read(from, end); vkey_fingerprint.read(from, end); @@ -13620,7 +13620,7 @@ public: mtpTypeId type() const { return mtpc_messages_discardEncryption; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_discardEncryption) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_discardEncryption) { vchat_id.read(from, end); } void write(mtpBuffer &to) const { @@ -13660,7 +13660,7 @@ public: mtpTypeId type() const { return mtpc_messages_setEncryptedTyping; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_setEncryptedTyping) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_setEncryptedTyping) { vpeer.read(from, end); vtyping.read(from, end); } @@ -13702,7 +13702,7 @@ public: mtpTypeId type() const { return mtpc_messages_readEncryptedHistory; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_readEncryptedHistory) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_readEncryptedHistory) { vpeer.read(from, end); vmax_date.read(from, end); } @@ -13745,7 +13745,7 @@ public: mtpTypeId type() const { return mtpc_messages_sendEncrypted; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_sendEncrypted) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_sendEncrypted) { vpeer.read(from, end); vrandom_id.read(from, end); vdata.read(from, end); @@ -13791,7 +13791,7 @@ public: mtpTypeId type() const { return mtpc_messages_sendEncryptedFile; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_sendEncryptedFile) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_sendEncryptedFile) { vpeer.read(from, end); vrandom_id.read(from, end); vdata.read(from, end); @@ -13838,7 +13838,7 @@ public: mtpTypeId type() const { return mtpc_messages_sendEncryptedService; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_sendEncryptedService) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_sendEncryptedService) { vpeer.read(from, end); vrandom_id.read(from, end); vdata.read(from, end); @@ -13881,7 +13881,7 @@ public: mtpTypeId type() const { return mtpc_messages_receivedQueue; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_receivedQueue) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_receivedQueue) { vmax_qts.read(from, end); } void write(mtpBuffer &to) const { @@ -13923,7 +13923,7 @@ public: mtpTypeId type() const { return mtpc_upload_saveBigFilePart; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_upload_saveBigFilePart) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_upload_saveBigFilePart) { vfile_id.read(from, end); vfile_part.read(from, end); vfile_total_parts.read(from, end); @@ -13974,7 +13974,7 @@ public: mtpTypeId type() const { return mtpc_initConnection; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_initConnection) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_initConnection) { vapi_id.read(from, end); vdevice_model.read(from, end); vsystem_version.read(from, end); @@ -14018,9 +14018,9 @@ public: mtpTypeId type() const { return mtpc_help_getSupport; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getSupport) { + void read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_help_getSupport) { } - void write(mtpBuffer &to) const { + void write(mtpBuffer &/*to*/) const { } typedef MTPhelp_Support ResponseType; @@ -14160,16 +14160,16 @@ inline void MTPserver_DH_Params::write(mtpBuffer &to) const { } break; } } -inline MTPserver_DH_Params::MTPserver_DH_Params(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPserver_DH_Params::MTPserver_DH_Params(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_server_DH_params_fail: setData(new MTPDserver_DH_params_fail()); break; case mtpc_server_DH_params_ok: setData(new MTPDserver_DH_params_ok()); break; default: throw mtpErrorBadTypeId(type, "MTPserver_DH_Params"); } } -inline MTPserver_DH_Params::MTPserver_DH_Params(MTPDserver_DH_params_fail *_data) : _type(mtpc_server_DH_params_fail), mtpDataOwner(_data) { +inline MTPserver_DH_Params::MTPserver_DH_Params(MTPDserver_DH_params_fail *_data) : mtpDataOwner(_data), _type(mtpc_server_DH_params_fail) { } -inline MTPserver_DH_Params::MTPserver_DH_Params(MTPDserver_DH_params_ok *_data) : _type(mtpc_server_DH_params_ok), mtpDataOwner(_data) { +inline MTPserver_DH_Params::MTPserver_DH_Params(MTPDserver_DH_params_ok *_data) : mtpDataOwner(_data), _type(mtpc_server_DH_params_ok) { } inline MTPserver_DH_Params MTP_server_DH_params_fail(const MTPint128 &_nonce, const MTPint128 &_server_nonce, const MTPint128 &_new_nonce_hash) { return MTPserver_DH_Params(new MTPDserver_DH_params_fail(_nonce, _server_nonce, _new_nonce_hash)); @@ -14318,7 +14318,7 @@ inline void MTPset_client_DH_params_answer::write(mtpBuffer &to) const { } break; } } -inline MTPset_client_DH_params_answer::MTPset_client_DH_params_answer(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPset_client_DH_params_answer::MTPset_client_DH_params_answer(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_dh_gen_ok: setData(new MTPDdh_gen_ok()); break; case mtpc_dh_gen_retry: setData(new MTPDdh_gen_retry()); break; @@ -14326,11 +14326,11 @@ inline MTPset_client_DH_params_answer::MTPset_client_DH_params_answer(mtpTypeId default: throw mtpErrorBadTypeId(type, "MTPset_client_DH_params_answer"); } } -inline MTPset_client_DH_params_answer::MTPset_client_DH_params_answer(MTPDdh_gen_ok *_data) : _type(mtpc_dh_gen_ok), mtpDataOwner(_data) { +inline MTPset_client_DH_params_answer::MTPset_client_DH_params_answer(MTPDdh_gen_ok *_data) : mtpDataOwner(_data), _type(mtpc_dh_gen_ok) { } -inline MTPset_client_DH_params_answer::MTPset_client_DH_params_answer(MTPDdh_gen_retry *_data) : _type(mtpc_dh_gen_retry), mtpDataOwner(_data) { +inline MTPset_client_DH_params_answer::MTPset_client_DH_params_answer(MTPDdh_gen_retry *_data) : mtpDataOwner(_data), _type(mtpc_dh_gen_retry) { } -inline MTPset_client_DH_params_answer::MTPset_client_DH_params_answer(MTPDdh_gen_fail *_data) : _type(mtpc_dh_gen_fail), mtpDataOwner(_data) { +inline MTPset_client_DH_params_answer::MTPset_client_DH_params_answer(MTPDdh_gen_fail *_data) : mtpDataOwner(_data), _type(mtpc_dh_gen_fail) { } inline MTPset_client_DH_params_answer MTP_dh_gen_ok(const MTPint128 &_nonce, const MTPint128 &_server_nonce, const MTPint128 &_new_nonce_hash1) { return MTPset_client_DH_params_answer(new MTPDdh_gen_ok(_nonce, _server_nonce, _new_nonce_hash1)); @@ -14424,16 +14424,16 @@ inline void MTPbadMsgNotification::write(mtpBuffer &to) const { } break; } } -inline MTPbadMsgNotification::MTPbadMsgNotification(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPbadMsgNotification::MTPbadMsgNotification(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_bad_msg_notification: setData(new MTPDbad_msg_notification()); break; case mtpc_bad_server_salt: setData(new MTPDbad_server_salt()); break; default: throw mtpErrorBadTypeId(type, "MTPbadMsgNotification"); } } -inline MTPbadMsgNotification::MTPbadMsgNotification(MTPDbad_msg_notification *_data) : _type(mtpc_bad_msg_notification), mtpDataOwner(_data) { +inline MTPbadMsgNotification::MTPbadMsgNotification(MTPDbad_msg_notification *_data) : mtpDataOwner(_data), _type(mtpc_bad_msg_notification) { } -inline MTPbadMsgNotification::MTPbadMsgNotification(MTPDbad_server_salt *_data) : _type(mtpc_bad_server_salt), mtpDataOwner(_data) { +inline MTPbadMsgNotification::MTPbadMsgNotification(MTPDbad_server_salt *_data) : mtpDataOwner(_data), _type(mtpc_bad_server_salt) { } inline MTPbadMsgNotification MTP_bad_msg_notification(const MTPlong &_bad_msg_id, MTPint _bad_msg_seqno, MTPint _error_code) { return MTPbadMsgNotification(new MTPDbad_msg_notification(_bad_msg_id, _bad_msg_seqno, _error_code)); @@ -14582,16 +14582,16 @@ inline void MTPmsgDetailedInfo::write(mtpBuffer &to) const { } break; } } -inline MTPmsgDetailedInfo::MTPmsgDetailedInfo(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPmsgDetailedInfo::MTPmsgDetailedInfo(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_msg_detailed_info: setData(new MTPDmsg_detailed_info()); break; case mtpc_msg_new_detailed_info: setData(new MTPDmsg_new_detailed_info()); break; default: throw mtpErrorBadTypeId(type, "MTPmsgDetailedInfo"); } } -inline MTPmsgDetailedInfo::MTPmsgDetailedInfo(MTPDmsg_detailed_info *_data) : _type(mtpc_msg_detailed_info), mtpDataOwner(_data) { +inline MTPmsgDetailedInfo::MTPmsgDetailedInfo(MTPDmsg_detailed_info *_data) : mtpDataOwner(_data), _type(mtpc_msg_detailed_info) { } -inline MTPmsgDetailedInfo::MTPmsgDetailedInfo(MTPDmsg_new_detailed_info *_data) : _type(mtpc_msg_new_detailed_info), mtpDataOwner(_data) { +inline MTPmsgDetailedInfo::MTPmsgDetailedInfo(MTPDmsg_new_detailed_info *_data) : mtpDataOwner(_data), _type(mtpc_msg_new_detailed_info) { } inline MTPmsgDetailedInfo MTP_msg_detailed_info(const MTPlong &_msg_id, const MTPlong &_answer_msg_id, MTPint _bytes, MTPint _status) { return MTPmsgDetailedInfo(new MTPDmsg_detailed_info(_msg_id, _answer_msg_id, _bytes, _status)); @@ -14694,7 +14694,7 @@ inline void MTPrpcDropAnswer::write(mtpBuffer &to) const { } break; } } -inline MTPrpcDropAnswer::MTPrpcDropAnswer(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPrpcDropAnswer::MTPrpcDropAnswer(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_rpc_answer_unknown: break; case mtpc_rpc_answer_dropped_running: break; @@ -14702,7 +14702,7 @@ inline MTPrpcDropAnswer::MTPrpcDropAnswer(mtpTypeId type) : _type(type), mtpData default: throw mtpErrorBadTypeId(type, "MTPrpcDropAnswer"); } } -inline MTPrpcDropAnswer::MTPrpcDropAnswer(MTPDrpc_answer_dropped *_data) : _type(mtpc_rpc_answer_dropped), mtpDataOwner(_data) { +inline MTPrpcDropAnswer::MTPrpcDropAnswer(MTPDrpc_answer_dropped *_data) : mtpDataOwner(_data), _type(mtpc_rpc_answer_dropped) { } inline MTPrpcDropAnswer MTP_rpc_answer_unknown() { return MTPrpcDropAnswer(mtpc_rpc_answer_unknown); @@ -14850,16 +14850,16 @@ inline void MTPdestroySessionRes::write(mtpBuffer &to) const { } break; } } -inline MTPdestroySessionRes::MTPdestroySessionRes(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPdestroySessionRes::MTPdestroySessionRes(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_destroy_session_ok: setData(new MTPDdestroy_session_ok()); break; case mtpc_destroy_session_none: setData(new MTPDdestroy_session_none()); break; default: throw mtpErrorBadTypeId(type, "MTPdestroySessionRes"); } } -inline MTPdestroySessionRes::MTPdestroySessionRes(MTPDdestroy_session_ok *_data) : _type(mtpc_destroy_session_ok), mtpDataOwner(_data) { +inline MTPdestroySessionRes::MTPdestroySessionRes(MTPDdestroy_session_ok *_data) : mtpDataOwner(_data), _type(mtpc_destroy_session_ok) { } -inline MTPdestroySessionRes::MTPdestroySessionRes(MTPDdestroy_session_none *_data) : _type(mtpc_destroy_session_none), mtpDataOwner(_data) { +inline MTPdestroySessionRes::MTPdestroySessionRes(MTPDdestroy_session_none *_data) : mtpDataOwner(_data), _type(mtpc_destroy_session_none) { } inline MTPdestroySessionRes MTP_destroy_session_ok(const MTPlong &_session_id) { return MTPdestroySessionRes(new MTPDdestroy_session_ok(_session_id)); @@ -14992,7 +14992,7 @@ inline void MTPinputPeer::write(mtpBuffer &to) const { } break; } } -inline MTPinputPeer::MTPinputPeer(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPinputPeer::MTPinputPeer(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_inputPeerEmpty: break; case mtpc_inputPeerSelf: break; @@ -15002,11 +15002,11 @@ inline MTPinputPeer::MTPinputPeer(mtpTypeId type) : _type(type), mtpDataOwner(0) default: throw mtpErrorBadTypeId(type, "MTPinputPeer"); } } -inline MTPinputPeer::MTPinputPeer(MTPDinputPeerContact *_data) : _type(mtpc_inputPeerContact), mtpDataOwner(_data) { +inline MTPinputPeer::MTPinputPeer(MTPDinputPeerContact *_data) : mtpDataOwner(_data), _type(mtpc_inputPeerContact) { } -inline MTPinputPeer::MTPinputPeer(MTPDinputPeerForeign *_data) : _type(mtpc_inputPeerForeign), mtpDataOwner(_data) { +inline MTPinputPeer::MTPinputPeer(MTPDinputPeerForeign *_data) : mtpDataOwner(_data), _type(mtpc_inputPeerForeign) { } -inline MTPinputPeer::MTPinputPeer(MTPDinputPeerChat *_data) : _type(mtpc_inputPeerChat), mtpDataOwner(_data) { +inline MTPinputPeer::MTPinputPeer(MTPDinputPeerChat *_data) : mtpDataOwner(_data), _type(mtpc_inputPeerChat) { } inline MTPinputPeer MTP_inputPeerEmpty() { return MTPinputPeer(mtpc_inputPeerEmpty); @@ -15073,7 +15073,7 @@ inline void MTPinputUser::write(mtpBuffer &to) const { } break; } } -inline MTPinputUser::MTPinputUser(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPinputUser::MTPinputUser(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_inputUserEmpty: break; case mtpc_inputUserSelf: break; @@ -15082,9 +15082,9 @@ inline MTPinputUser::MTPinputUser(mtpTypeId type) : _type(type), mtpDataOwner(0) default: throw mtpErrorBadTypeId(type, "MTPinputUser"); } } -inline MTPinputUser::MTPinputUser(MTPDinputUserContact *_data) : _type(mtpc_inputUserContact), mtpDataOwner(_data) { +inline MTPinputUser::MTPinputUser(MTPDinputUserContact *_data) : mtpDataOwner(_data), _type(mtpc_inputUserContact) { } -inline MTPinputUser::MTPinputUser(MTPDinputUserForeign *_data) : _type(mtpc_inputUserForeign), mtpDataOwner(_data) { +inline MTPinputUser::MTPinputUser(MTPDinputUserForeign *_data) : mtpDataOwner(_data), _type(mtpc_inputUserForeign) { } inline MTPinputUser MTP_inputUserEmpty() { return MTPinputUser(mtpc_inputUserEmpty); @@ -15187,16 +15187,16 @@ inline void MTPinputFile::write(mtpBuffer &to) const { } break; } } -inline MTPinputFile::MTPinputFile(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPinputFile::MTPinputFile(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_inputFile: setData(new MTPDinputFile()); break; case mtpc_inputFileBig: setData(new MTPDinputFileBig()); break; default: throw mtpErrorBadTypeId(type, "MTPinputFile"); } } -inline MTPinputFile::MTPinputFile(MTPDinputFile *_data) : _type(mtpc_inputFile), mtpDataOwner(_data) { +inline MTPinputFile::MTPinputFile(MTPDinputFile *_data) : mtpDataOwner(_data), _type(mtpc_inputFile) { } -inline MTPinputFile::MTPinputFile(MTPDinputFileBig *_data) : _type(mtpc_inputFileBig), mtpDataOwner(_data) { +inline MTPinputFile::MTPinputFile(MTPDinputFileBig *_data) : mtpDataOwner(_data), _type(mtpc_inputFileBig) { } inline MTPinputFile MTP_inputFile(const MTPlong &_id, MTPint _parts, const MTPstring &_name, const MTPstring &_md5_checksum) { return MTPinputFile(new MTPDinputFile(_id, _parts, _name, _md5_checksum)); @@ -15417,7 +15417,7 @@ inline void MTPinputMedia::write(mtpBuffer &to) const { } break; } } -inline MTPinputMedia::MTPinputMedia(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPinputMedia::MTPinputMedia(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_inputMediaEmpty: break; case mtpc_inputMediaUploadedPhoto: setData(new MTPDinputMediaUploadedPhoto()); break; @@ -15435,29 +15435,29 @@ inline MTPinputMedia::MTPinputMedia(mtpTypeId type) : _type(type), mtpDataOwner( default: throw mtpErrorBadTypeId(type, "MTPinputMedia"); } } -inline MTPinputMedia::MTPinputMedia(MTPDinputMediaUploadedPhoto *_data) : _type(mtpc_inputMediaUploadedPhoto), mtpDataOwner(_data) { +inline MTPinputMedia::MTPinputMedia(MTPDinputMediaUploadedPhoto *_data) : mtpDataOwner(_data), _type(mtpc_inputMediaUploadedPhoto) { } -inline MTPinputMedia::MTPinputMedia(MTPDinputMediaPhoto *_data) : _type(mtpc_inputMediaPhoto), mtpDataOwner(_data) { +inline MTPinputMedia::MTPinputMedia(MTPDinputMediaPhoto *_data) : mtpDataOwner(_data), _type(mtpc_inputMediaPhoto) { } -inline MTPinputMedia::MTPinputMedia(MTPDinputMediaGeoPoint *_data) : _type(mtpc_inputMediaGeoPoint), mtpDataOwner(_data) { +inline MTPinputMedia::MTPinputMedia(MTPDinputMediaGeoPoint *_data) : mtpDataOwner(_data), _type(mtpc_inputMediaGeoPoint) { } -inline MTPinputMedia::MTPinputMedia(MTPDinputMediaContact *_data) : _type(mtpc_inputMediaContact), mtpDataOwner(_data) { +inline MTPinputMedia::MTPinputMedia(MTPDinputMediaContact *_data) : mtpDataOwner(_data), _type(mtpc_inputMediaContact) { } -inline MTPinputMedia::MTPinputMedia(MTPDinputMediaUploadedVideo *_data) : _type(mtpc_inputMediaUploadedVideo), mtpDataOwner(_data) { +inline MTPinputMedia::MTPinputMedia(MTPDinputMediaUploadedVideo *_data) : mtpDataOwner(_data), _type(mtpc_inputMediaUploadedVideo) { } -inline MTPinputMedia::MTPinputMedia(MTPDinputMediaUploadedThumbVideo *_data) : _type(mtpc_inputMediaUploadedThumbVideo), mtpDataOwner(_data) { +inline MTPinputMedia::MTPinputMedia(MTPDinputMediaUploadedThumbVideo *_data) : mtpDataOwner(_data), _type(mtpc_inputMediaUploadedThumbVideo) { } -inline MTPinputMedia::MTPinputMedia(MTPDinputMediaVideo *_data) : _type(mtpc_inputMediaVideo), mtpDataOwner(_data) { +inline MTPinputMedia::MTPinputMedia(MTPDinputMediaVideo *_data) : mtpDataOwner(_data), _type(mtpc_inputMediaVideo) { } -inline MTPinputMedia::MTPinputMedia(MTPDinputMediaUploadedAudio *_data) : _type(mtpc_inputMediaUploadedAudio), mtpDataOwner(_data) { +inline MTPinputMedia::MTPinputMedia(MTPDinputMediaUploadedAudio *_data) : mtpDataOwner(_data), _type(mtpc_inputMediaUploadedAudio) { } -inline MTPinputMedia::MTPinputMedia(MTPDinputMediaAudio *_data) : _type(mtpc_inputMediaAudio), mtpDataOwner(_data) { +inline MTPinputMedia::MTPinputMedia(MTPDinputMediaAudio *_data) : mtpDataOwner(_data), _type(mtpc_inputMediaAudio) { } -inline MTPinputMedia::MTPinputMedia(MTPDinputMediaUploadedDocument *_data) : _type(mtpc_inputMediaUploadedDocument), mtpDataOwner(_data) { +inline MTPinputMedia::MTPinputMedia(MTPDinputMediaUploadedDocument *_data) : mtpDataOwner(_data), _type(mtpc_inputMediaUploadedDocument) { } -inline MTPinputMedia::MTPinputMedia(MTPDinputMediaUploadedThumbDocument *_data) : _type(mtpc_inputMediaUploadedThumbDocument), mtpDataOwner(_data) { +inline MTPinputMedia::MTPinputMedia(MTPDinputMediaUploadedThumbDocument *_data) : mtpDataOwner(_data), _type(mtpc_inputMediaUploadedThumbDocument) { } -inline MTPinputMedia::MTPinputMedia(MTPDinputMediaDocument *_data) : _type(mtpc_inputMediaDocument), mtpDataOwner(_data) { +inline MTPinputMedia::MTPinputMedia(MTPDinputMediaDocument *_data) : mtpDataOwner(_data), _type(mtpc_inputMediaDocument) { } inline MTPinputMedia MTP_inputMediaEmpty() { return MTPinputMedia(mtpc_inputMediaEmpty); @@ -15549,7 +15549,7 @@ inline void MTPinputChatPhoto::write(mtpBuffer &to) const { } break; } } -inline MTPinputChatPhoto::MTPinputChatPhoto(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPinputChatPhoto::MTPinputChatPhoto(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_inputChatPhotoEmpty: break; case mtpc_inputChatUploadedPhoto: setData(new MTPDinputChatUploadedPhoto()); break; @@ -15557,9 +15557,9 @@ inline MTPinputChatPhoto::MTPinputChatPhoto(mtpTypeId type) : _type(type), mtpDa default: throw mtpErrorBadTypeId(type, "MTPinputChatPhoto"); } } -inline MTPinputChatPhoto::MTPinputChatPhoto(MTPDinputChatUploadedPhoto *_data) : _type(mtpc_inputChatUploadedPhoto), mtpDataOwner(_data) { +inline MTPinputChatPhoto::MTPinputChatPhoto(MTPDinputChatUploadedPhoto *_data) : mtpDataOwner(_data), _type(mtpc_inputChatUploadedPhoto) { } -inline MTPinputChatPhoto::MTPinputChatPhoto(MTPDinputChatPhoto *_data) : _type(mtpc_inputChatPhoto), mtpDataOwner(_data) { +inline MTPinputChatPhoto::MTPinputChatPhoto(MTPDinputChatPhoto *_data) : mtpDataOwner(_data), _type(mtpc_inputChatPhoto) { } inline MTPinputChatPhoto MTP_inputChatPhotoEmpty() { return MTPinputChatPhoto(mtpc_inputChatPhotoEmpty); @@ -15606,14 +15606,14 @@ inline void MTPinputGeoPoint::write(mtpBuffer &to) const { } break; } } -inline MTPinputGeoPoint::MTPinputGeoPoint(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPinputGeoPoint::MTPinputGeoPoint(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_inputGeoPointEmpty: break; case mtpc_inputGeoPoint: setData(new MTPDinputGeoPoint()); break; default: throw mtpErrorBadTypeId(type, "MTPinputGeoPoint"); } } -inline MTPinputGeoPoint::MTPinputGeoPoint(MTPDinputGeoPoint *_data) : _type(mtpc_inputGeoPoint), mtpDataOwner(_data) { +inline MTPinputGeoPoint::MTPinputGeoPoint(MTPDinputGeoPoint *_data) : mtpDataOwner(_data), _type(mtpc_inputGeoPoint) { } inline MTPinputGeoPoint MTP_inputGeoPointEmpty() { return MTPinputGeoPoint(mtpc_inputGeoPointEmpty); @@ -15657,14 +15657,14 @@ inline void MTPinputPhoto::write(mtpBuffer &to) const { } break; } } -inline MTPinputPhoto::MTPinputPhoto(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPinputPhoto::MTPinputPhoto(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_inputPhotoEmpty: break; case mtpc_inputPhoto: setData(new MTPDinputPhoto()); break; default: throw mtpErrorBadTypeId(type, "MTPinputPhoto"); } } -inline MTPinputPhoto::MTPinputPhoto(MTPDinputPhoto *_data) : _type(mtpc_inputPhoto), mtpDataOwner(_data) { +inline MTPinputPhoto::MTPinputPhoto(MTPDinputPhoto *_data) : mtpDataOwner(_data), _type(mtpc_inputPhoto) { } inline MTPinputPhoto MTP_inputPhotoEmpty() { return MTPinputPhoto(mtpc_inputPhotoEmpty); @@ -15708,14 +15708,14 @@ inline void MTPinputVideo::write(mtpBuffer &to) const { } break; } } -inline MTPinputVideo::MTPinputVideo(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPinputVideo::MTPinputVideo(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_inputVideoEmpty: break; case mtpc_inputVideo: setData(new MTPDinputVideo()); break; default: throw mtpErrorBadTypeId(type, "MTPinputVideo"); } } -inline MTPinputVideo::MTPinputVideo(MTPDinputVideo *_data) : _type(mtpc_inputVideo), mtpDataOwner(_data) { +inline MTPinputVideo::MTPinputVideo(MTPDinputVideo *_data) : mtpDataOwner(_data), _type(mtpc_inputVideo) { } inline MTPinputVideo MTP_inputVideoEmpty() { return MTPinputVideo(mtpc_inputVideoEmpty); @@ -15820,7 +15820,7 @@ inline void MTPinputFileLocation::write(mtpBuffer &to) const { } break; } } -inline MTPinputFileLocation::MTPinputFileLocation(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPinputFileLocation::MTPinputFileLocation(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_inputFileLocation: setData(new MTPDinputFileLocation()); break; case mtpc_inputVideoFileLocation: setData(new MTPDinputVideoFileLocation()); break; @@ -15830,15 +15830,15 @@ inline MTPinputFileLocation::MTPinputFileLocation(mtpTypeId type) : _type(type), default: throw mtpErrorBadTypeId(type, "MTPinputFileLocation"); } } -inline MTPinputFileLocation::MTPinputFileLocation(MTPDinputFileLocation *_data) : _type(mtpc_inputFileLocation), mtpDataOwner(_data) { +inline MTPinputFileLocation::MTPinputFileLocation(MTPDinputFileLocation *_data) : mtpDataOwner(_data), _type(mtpc_inputFileLocation) { } -inline MTPinputFileLocation::MTPinputFileLocation(MTPDinputVideoFileLocation *_data) : _type(mtpc_inputVideoFileLocation), mtpDataOwner(_data) { +inline MTPinputFileLocation::MTPinputFileLocation(MTPDinputVideoFileLocation *_data) : mtpDataOwner(_data), _type(mtpc_inputVideoFileLocation) { } -inline MTPinputFileLocation::MTPinputFileLocation(MTPDinputEncryptedFileLocation *_data) : _type(mtpc_inputEncryptedFileLocation), mtpDataOwner(_data) { +inline MTPinputFileLocation::MTPinputFileLocation(MTPDinputEncryptedFileLocation *_data) : mtpDataOwner(_data), _type(mtpc_inputEncryptedFileLocation) { } -inline MTPinputFileLocation::MTPinputFileLocation(MTPDinputAudioFileLocation *_data) : _type(mtpc_inputAudioFileLocation), mtpDataOwner(_data) { +inline MTPinputFileLocation::MTPinputFileLocation(MTPDinputAudioFileLocation *_data) : mtpDataOwner(_data), _type(mtpc_inputAudioFileLocation) { } -inline MTPinputFileLocation::MTPinputFileLocation(MTPDinputDocumentFileLocation *_data) : _type(mtpc_inputDocumentFileLocation), mtpDataOwner(_data) { +inline MTPinputFileLocation::MTPinputFileLocation(MTPDinputDocumentFileLocation *_data) : mtpDataOwner(_data), _type(mtpc_inputDocumentFileLocation) { } inline MTPinputFileLocation MTP_inputFileLocation(const MTPlong &_volume_id, MTPint _local_id, const MTPlong &_secret) { return MTPinputFileLocation(new MTPDinputFileLocation(_volume_id, _local_id, _secret)); @@ -15893,14 +15893,14 @@ inline void MTPinputPhotoCrop::write(mtpBuffer &to) const { } break; } } -inline MTPinputPhotoCrop::MTPinputPhotoCrop(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPinputPhotoCrop::MTPinputPhotoCrop(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_inputPhotoCropAuto: break; case mtpc_inputPhotoCrop: setData(new MTPDinputPhotoCrop()); break; default: throw mtpErrorBadTypeId(type, "MTPinputPhotoCrop"); } } -inline MTPinputPhotoCrop::MTPinputPhotoCrop(MTPDinputPhotoCrop *_data) : _type(mtpc_inputPhotoCrop), mtpDataOwner(_data) { +inline MTPinputPhotoCrop::MTPinputPhotoCrop(MTPDinputPhotoCrop *_data) : mtpDataOwner(_data), _type(mtpc_inputPhotoCrop) { } inline MTPinputPhotoCrop MTP_inputPhotoCropAuto() { return MTPinputPhotoCrop(mtpc_inputPhotoCropAuto); @@ -15987,16 +15987,16 @@ inline void MTPpeer::write(mtpBuffer &to) const { } break; } } -inline MTPpeer::MTPpeer(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPpeer::MTPpeer(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_peerUser: setData(new MTPDpeerUser()); break; case mtpc_peerChat: setData(new MTPDpeerChat()); break; default: throw mtpErrorBadTypeId(type, "MTPpeer"); } } -inline MTPpeer::MTPpeer(MTPDpeerUser *_data) : _type(mtpc_peerUser), mtpDataOwner(_data) { +inline MTPpeer::MTPpeer(MTPDpeerUser *_data) : mtpDataOwner(_data), _type(mtpc_peerUser) { } -inline MTPpeer::MTPpeer(MTPDpeerChat *_data) : _type(mtpc_peerChat), mtpDataOwner(_data) { +inline MTPpeer::MTPpeer(MTPDpeerChat *_data) : mtpDataOwner(_data), _type(mtpc_peerChat) { } inline MTPpeer MTP_peerUser(MTPint _user_id) { return MTPpeer(new MTPDpeerUser(_user_id)); @@ -16027,7 +16027,7 @@ inline void MTPstorage_fileType::read(const mtpPrime *&from, const mtpPrime *end default: throw mtpErrorUnexpected(cons, "MTPstorage_fileType"); } } -inline void MTPstorage_fileType::write(mtpBuffer &to) const { +inline void MTPstorage_fileType::write(mtpBuffer &/*to*/) const { switch (_type) { } } @@ -16132,16 +16132,16 @@ inline void MTPfileLocation::write(mtpBuffer &to) const { } break; } } -inline MTPfileLocation::MTPfileLocation(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPfileLocation::MTPfileLocation(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_fileLocationUnavailable: setData(new MTPDfileLocationUnavailable()); break; case mtpc_fileLocation: setData(new MTPDfileLocation()); break; default: throw mtpErrorBadTypeId(type, "MTPfileLocation"); } } -inline MTPfileLocation::MTPfileLocation(MTPDfileLocationUnavailable *_data) : _type(mtpc_fileLocationUnavailable), mtpDataOwner(_data) { +inline MTPfileLocation::MTPfileLocation(MTPDfileLocationUnavailable *_data) : mtpDataOwner(_data), _type(mtpc_fileLocationUnavailable) { } -inline MTPfileLocation::MTPfileLocation(MTPDfileLocation *_data) : _type(mtpc_fileLocation), mtpDataOwner(_data) { +inline MTPfileLocation::MTPfileLocation(MTPDfileLocation *_data) : mtpDataOwner(_data), _type(mtpc_fileLocation) { } inline MTPfileLocation MTP_fileLocationUnavailable(const MTPlong &_volume_id, MTPint _local_id, const MTPlong &_secret) { return MTPfileLocation(new MTPDfileLocationUnavailable(_volume_id, _local_id, _secret)); @@ -16297,7 +16297,7 @@ inline void MTPuser::write(mtpBuffer &to) const { } break; } } -inline MTPuser::MTPuser(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPuser::MTPuser(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_userEmpty: setData(new MTPDuserEmpty()); break; case mtpc_userSelf: setData(new MTPDuserSelf()); break; @@ -16308,17 +16308,17 @@ inline MTPuser::MTPuser(mtpTypeId type) : _type(type), mtpDataOwner(0) { default: throw mtpErrorBadTypeId(type, "MTPuser"); } } -inline MTPuser::MTPuser(MTPDuserEmpty *_data) : _type(mtpc_userEmpty), mtpDataOwner(_data) { +inline MTPuser::MTPuser(MTPDuserEmpty *_data) : mtpDataOwner(_data), _type(mtpc_userEmpty) { } -inline MTPuser::MTPuser(MTPDuserSelf *_data) : _type(mtpc_userSelf), mtpDataOwner(_data) { +inline MTPuser::MTPuser(MTPDuserSelf *_data) : mtpDataOwner(_data), _type(mtpc_userSelf) { } -inline MTPuser::MTPuser(MTPDuserContact *_data) : _type(mtpc_userContact), mtpDataOwner(_data) { +inline MTPuser::MTPuser(MTPDuserContact *_data) : mtpDataOwner(_data), _type(mtpc_userContact) { } -inline MTPuser::MTPuser(MTPDuserRequest *_data) : _type(mtpc_userRequest), mtpDataOwner(_data) { +inline MTPuser::MTPuser(MTPDuserRequest *_data) : mtpDataOwner(_data), _type(mtpc_userRequest) { } -inline MTPuser::MTPuser(MTPDuserForeign *_data) : _type(mtpc_userForeign), mtpDataOwner(_data) { +inline MTPuser::MTPuser(MTPDuserForeign *_data) : mtpDataOwner(_data), _type(mtpc_userForeign) { } -inline MTPuser::MTPuser(MTPDuserDeleted *_data) : _type(mtpc_userDeleted), mtpDataOwner(_data) { +inline MTPuser::MTPuser(MTPDuserDeleted *_data) : mtpDataOwner(_data), _type(mtpc_userDeleted) { } inline MTPuser MTP_userEmpty(MTPint _id) { return MTPuser(new MTPDuserEmpty(_id)); @@ -16376,14 +16376,14 @@ inline void MTPuserProfilePhoto::write(mtpBuffer &to) const { } break; } } -inline MTPuserProfilePhoto::MTPuserProfilePhoto(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPuserProfilePhoto::MTPuserProfilePhoto(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_userProfilePhotoEmpty: break; case mtpc_userProfilePhoto: setData(new MTPDuserProfilePhoto()); break; default: throw mtpErrorBadTypeId(type, "MTPuserProfilePhoto"); } } -inline MTPuserProfilePhoto::MTPuserProfilePhoto(MTPDuserProfilePhoto *_data) : _type(mtpc_userProfilePhoto), mtpDataOwner(_data) { +inline MTPuserProfilePhoto::MTPuserProfilePhoto(MTPDuserProfilePhoto *_data) : mtpDataOwner(_data), _type(mtpc_userProfilePhoto) { } inline MTPuserProfilePhoto MTP_userProfilePhotoEmpty() { return MTPuserProfilePhoto(mtpc_userProfilePhotoEmpty); @@ -16438,7 +16438,7 @@ inline void MTPuserStatus::write(mtpBuffer &to) const { } break; } } -inline MTPuserStatus::MTPuserStatus(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPuserStatus::MTPuserStatus(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_userStatusEmpty: break; case mtpc_userStatusOnline: setData(new MTPDuserStatusOnline()); break; @@ -16446,9 +16446,9 @@ inline MTPuserStatus::MTPuserStatus(mtpTypeId type) : _type(type), mtpDataOwner( default: throw mtpErrorBadTypeId(type, "MTPuserStatus"); } } -inline MTPuserStatus::MTPuserStatus(MTPDuserStatusOnline *_data) : _type(mtpc_userStatusOnline), mtpDataOwner(_data) { +inline MTPuserStatus::MTPuserStatus(MTPDuserStatusOnline *_data) : mtpDataOwner(_data), _type(mtpc_userStatusOnline) { } -inline MTPuserStatus::MTPuserStatus(MTPDuserStatusOffline *_data) : _type(mtpc_userStatusOffline), mtpDataOwner(_data) { +inline MTPuserStatus::MTPuserStatus(MTPDuserStatusOffline *_data) : mtpDataOwner(_data), _type(mtpc_userStatusOffline) { } inline MTPuserStatus MTP_userStatusEmpty() { return MTPuserStatus(mtpc_userStatusEmpty); @@ -16567,7 +16567,7 @@ inline void MTPchat::write(mtpBuffer &to) const { } break; } } -inline MTPchat::MTPchat(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPchat::MTPchat(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_chatEmpty: setData(new MTPDchatEmpty()); break; case mtpc_chat: setData(new MTPDchat()); break; @@ -16576,13 +16576,13 @@ inline MTPchat::MTPchat(mtpTypeId type) : _type(type), mtpDataOwner(0) { default: throw mtpErrorBadTypeId(type, "MTPchat"); } } -inline MTPchat::MTPchat(MTPDchatEmpty *_data) : _type(mtpc_chatEmpty), mtpDataOwner(_data) { +inline MTPchat::MTPchat(MTPDchatEmpty *_data) : mtpDataOwner(_data), _type(mtpc_chatEmpty) { } -inline MTPchat::MTPchat(MTPDchat *_data) : _type(mtpc_chat), mtpDataOwner(_data) { +inline MTPchat::MTPchat(MTPDchat *_data) : mtpDataOwner(_data), _type(mtpc_chat) { } -inline MTPchat::MTPchat(MTPDchatForbidden *_data) : _type(mtpc_chatForbidden), mtpDataOwner(_data) { +inline MTPchat::MTPchat(MTPDchatForbidden *_data) : mtpDataOwner(_data), _type(mtpc_chatForbidden) { } -inline MTPchat::MTPchat(MTPDgeoChat *_data) : _type(mtpc_geoChat), mtpDataOwner(_data) { +inline MTPchat::MTPchat(MTPDgeoChat *_data) : mtpDataOwner(_data), _type(mtpc_geoChat) { } inline MTPchat MTP_chatEmpty(MTPint _id) { return MTPchat(new MTPDchatEmpty(_id)); @@ -16712,16 +16712,16 @@ inline void MTPchatParticipants::write(mtpBuffer &to) const { } break; } } -inline MTPchatParticipants::MTPchatParticipants(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPchatParticipants::MTPchatParticipants(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_chatParticipantsForbidden: setData(new MTPDchatParticipantsForbidden()); break; case mtpc_chatParticipants: setData(new MTPDchatParticipants()); break; default: throw mtpErrorBadTypeId(type, "MTPchatParticipants"); } } -inline MTPchatParticipants::MTPchatParticipants(MTPDchatParticipantsForbidden *_data) : _type(mtpc_chatParticipantsForbidden), mtpDataOwner(_data) { +inline MTPchatParticipants::MTPchatParticipants(MTPDchatParticipantsForbidden *_data) : mtpDataOwner(_data), _type(mtpc_chatParticipantsForbidden) { } -inline MTPchatParticipants::MTPchatParticipants(MTPDchatParticipants *_data) : _type(mtpc_chatParticipants), mtpDataOwner(_data) { +inline MTPchatParticipants::MTPchatParticipants(MTPDchatParticipants *_data) : mtpDataOwner(_data), _type(mtpc_chatParticipants) { } inline MTPchatParticipants MTP_chatParticipantsForbidden(MTPint _chat_id) { return MTPchatParticipants(new MTPDchatParticipantsForbidden(_chat_id)); @@ -16765,14 +16765,14 @@ inline void MTPchatPhoto::write(mtpBuffer &to) const { } break; } } -inline MTPchatPhoto::MTPchatPhoto(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPchatPhoto::MTPchatPhoto(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_chatPhotoEmpty: break; case mtpc_chatPhoto: setData(new MTPDchatPhoto()); break; default: throw mtpErrorBadTypeId(type, "MTPchatPhoto"); } } -inline MTPchatPhoto::MTPchatPhoto(MTPDchatPhoto *_data) : _type(mtpc_chatPhoto), mtpDataOwner(_data) { +inline MTPchatPhoto::MTPchatPhoto(MTPDchatPhoto *_data) : mtpDataOwner(_data), _type(mtpc_chatPhoto) { } inline MTPchatPhoto MTP_chatPhotoEmpty() { return MTPchatPhoto(mtpc_chatPhotoEmpty); @@ -16896,7 +16896,7 @@ inline void MTPmessage::write(mtpBuffer &to) const { } break; } } -inline MTPmessage::MTPmessage(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPmessage::MTPmessage(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_messageEmpty: setData(new MTPDmessageEmpty()); break; case mtpc_message: setData(new MTPDmessage()); break; @@ -16905,13 +16905,13 @@ inline MTPmessage::MTPmessage(mtpTypeId type) : _type(type), mtpDataOwner(0) { default: throw mtpErrorBadTypeId(type, "MTPmessage"); } } -inline MTPmessage::MTPmessage(MTPDmessageEmpty *_data) : _type(mtpc_messageEmpty), mtpDataOwner(_data) { +inline MTPmessage::MTPmessage(MTPDmessageEmpty *_data) : mtpDataOwner(_data), _type(mtpc_messageEmpty) { } -inline MTPmessage::MTPmessage(MTPDmessage *_data) : _type(mtpc_message), mtpDataOwner(_data) { +inline MTPmessage::MTPmessage(MTPDmessage *_data) : mtpDataOwner(_data), _type(mtpc_message) { } -inline MTPmessage::MTPmessage(MTPDmessageForwarded *_data) : _type(mtpc_messageForwarded), mtpDataOwner(_data) { +inline MTPmessage::MTPmessage(MTPDmessageForwarded *_data) : mtpDataOwner(_data), _type(mtpc_messageForwarded) { } -inline MTPmessage::MTPmessage(MTPDmessageService *_data) : _type(mtpc_messageService), mtpDataOwner(_data) { +inline MTPmessage::MTPmessage(MTPDmessageService *_data) : mtpDataOwner(_data), _type(mtpc_messageService) { } inline MTPmessage MTP_messageEmpty(MTPint _id) { return MTPmessage(new MTPDmessageEmpty(_id)); @@ -17043,7 +17043,7 @@ inline void MTPmessageMedia::write(mtpBuffer &to) const { } break; } } -inline MTPmessageMedia::MTPmessageMedia(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPmessageMedia::MTPmessageMedia(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_messageMediaEmpty: break; case mtpc_messageMediaPhoto: setData(new MTPDmessageMediaPhoto()); break; @@ -17056,19 +17056,19 @@ inline MTPmessageMedia::MTPmessageMedia(mtpTypeId type) : _type(type), mtpDataOw default: throw mtpErrorBadTypeId(type, "MTPmessageMedia"); } } -inline MTPmessageMedia::MTPmessageMedia(MTPDmessageMediaPhoto *_data) : _type(mtpc_messageMediaPhoto), mtpDataOwner(_data) { +inline MTPmessageMedia::MTPmessageMedia(MTPDmessageMediaPhoto *_data) : mtpDataOwner(_data), _type(mtpc_messageMediaPhoto) { } -inline MTPmessageMedia::MTPmessageMedia(MTPDmessageMediaVideo *_data) : _type(mtpc_messageMediaVideo), mtpDataOwner(_data) { +inline MTPmessageMedia::MTPmessageMedia(MTPDmessageMediaVideo *_data) : mtpDataOwner(_data), _type(mtpc_messageMediaVideo) { } -inline MTPmessageMedia::MTPmessageMedia(MTPDmessageMediaGeo *_data) : _type(mtpc_messageMediaGeo), mtpDataOwner(_data) { +inline MTPmessageMedia::MTPmessageMedia(MTPDmessageMediaGeo *_data) : mtpDataOwner(_data), _type(mtpc_messageMediaGeo) { } -inline MTPmessageMedia::MTPmessageMedia(MTPDmessageMediaContact *_data) : _type(mtpc_messageMediaContact), mtpDataOwner(_data) { +inline MTPmessageMedia::MTPmessageMedia(MTPDmessageMediaContact *_data) : mtpDataOwner(_data), _type(mtpc_messageMediaContact) { } -inline MTPmessageMedia::MTPmessageMedia(MTPDmessageMediaUnsupported *_data) : _type(mtpc_messageMediaUnsupported), mtpDataOwner(_data) { +inline MTPmessageMedia::MTPmessageMedia(MTPDmessageMediaUnsupported *_data) : mtpDataOwner(_data), _type(mtpc_messageMediaUnsupported) { } -inline MTPmessageMedia::MTPmessageMedia(MTPDmessageMediaDocument *_data) : _type(mtpc_messageMediaDocument), mtpDataOwner(_data) { +inline MTPmessageMedia::MTPmessageMedia(MTPDmessageMediaDocument *_data) : mtpDataOwner(_data), _type(mtpc_messageMediaDocument) { } -inline MTPmessageMedia::MTPmessageMedia(MTPDmessageMediaAudio *_data) : _type(mtpc_messageMediaAudio), mtpDataOwner(_data) { +inline MTPmessageMedia::MTPmessageMedia(MTPDmessageMediaAudio *_data) : mtpDataOwner(_data), _type(mtpc_messageMediaAudio) { } inline MTPmessageMedia MTP_messageMediaEmpty() { return MTPmessageMedia(mtpc_messageMediaEmpty); @@ -17199,7 +17199,7 @@ inline void MTPmessageAction::write(mtpBuffer &to) const { } break; } } -inline MTPmessageAction::MTPmessageAction(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPmessageAction::MTPmessageAction(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_messageActionEmpty: break; case mtpc_messageActionChatCreate: setData(new MTPDmessageActionChatCreate()); break; @@ -17213,17 +17213,17 @@ inline MTPmessageAction::MTPmessageAction(mtpTypeId type) : _type(type), mtpData default: throw mtpErrorBadTypeId(type, "MTPmessageAction"); } } -inline MTPmessageAction::MTPmessageAction(MTPDmessageActionChatCreate *_data) : _type(mtpc_messageActionChatCreate), mtpDataOwner(_data) { +inline MTPmessageAction::MTPmessageAction(MTPDmessageActionChatCreate *_data) : mtpDataOwner(_data), _type(mtpc_messageActionChatCreate) { } -inline MTPmessageAction::MTPmessageAction(MTPDmessageActionChatEditTitle *_data) : _type(mtpc_messageActionChatEditTitle), mtpDataOwner(_data) { +inline MTPmessageAction::MTPmessageAction(MTPDmessageActionChatEditTitle *_data) : mtpDataOwner(_data), _type(mtpc_messageActionChatEditTitle) { } -inline MTPmessageAction::MTPmessageAction(MTPDmessageActionChatEditPhoto *_data) : _type(mtpc_messageActionChatEditPhoto), mtpDataOwner(_data) { +inline MTPmessageAction::MTPmessageAction(MTPDmessageActionChatEditPhoto *_data) : mtpDataOwner(_data), _type(mtpc_messageActionChatEditPhoto) { } -inline MTPmessageAction::MTPmessageAction(MTPDmessageActionChatAddUser *_data) : _type(mtpc_messageActionChatAddUser), mtpDataOwner(_data) { +inline MTPmessageAction::MTPmessageAction(MTPDmessageActionChatAddUser *_data) : mtpDataOwner(_data), _type(mtpc_messageActionChatAddUser) { } -inline MTPmessageAction::MTPmessageAction(MTPDmessageActionChatDeleteUser *_data) : _type(mtpc_messageActionChatDeleteUser), mtpDataOwner(_data) { +inline MTPmessageAction::MTPmessageAction(MTPDmessageActionChatDeleteUser *_data) : mtpDataOwner(_data), _type(mtpc_messageActionChatDeleteUser) { } -inline MTPmessageAction::MTPmessageAction(MTPDmessageActionGeoChatCreate *_data) : _type(mtpc_messageActionGeoChatCreate), mtpDataOwner(_data) { +inline MTPmessageAction::MTPmessageAction(MTPDmessageActionGeoChatCreate *_data) : mtpDataOwner(_data), _type(mtpc_messageActionGeoChatCreate) { } inline MTPmessageAction MTP_messageActionEmpty() { return MTPmessageAction(mtpc_messageActionEmpty); @@ -17343,16 +17343,16 @@ inline void MTPphoto::write(mtpBuffer &to) const { } break; } } -inline MTPphoto::MTPphoto(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPphoto::MTPphoto(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_photoEmpty: setData(new MTPDphotoEmpty()); break; case mtpc_photo: setData(new MTPDphoto()); break; default: throw mtpErrorBadTypeId(type, "MTPphoto"); } } -inline MTPphoto::MTPphoto(MTPDphotoEmpty *_data) : _type(mtpc_photoEmpty), mtpDataOwner(_data) { +inline MTPphoto::MTPphoto(MTPDphotoEmpty *_data) : mtpDataOwner(_data), _type(mtpc_photoEmpty) { } -inline MTPphoto::MTPphoto(MTPDphoto *_data) : _type(mtpc_photo), mtpDataOwner(_data) { +inline MTPphoto::MTPphoto(MTPDphoto *_data) : mtpDataOwner(_data), _type(mtpc_photo) { } inline MTPphoto MTP_photoEmpty(const MTPlong &_id) { return MTPphoto(new MTPDphotoEmpty(_id)); @@ -17435,7 +17435,7 @@ inline void MTPphotoSize::write(mtpBuffer &to) const { } break; } } -inline MTPphotoSize::MTPphotoSize(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPphotoSize::MTPphotoSize(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_photoSizeEmpty: setData(new MTPDphotoSizeEmpty()); break; case mtpc_photoSize: setData(new MTPDphotoSize()); break; @@ -17443,11 +17443,11 @@ inline MTPphotoSize::MTPphotoSize(mtpTypeId type) : _type(type), mtpDataOwner(0) default: throw mtpErrorBadTypeId(type, "MTPphotoSize"); } } -inline MTPphotoSize::MTPphotoSize(MTPDphotoSizeEmpty *_data) : _type(mtpc_photoSizeEmpty), mtpDataOwner(_data) { +inline MTPphotoSize::MTPphotoSize(MTPDphotoSizeEmpty *_data) : mtpDataOwner(_data), _type(mtpc_photoSizeEmpty) { } -inline MTPphotoSize::MTPphotoSize(MTPDphotoSize *_data) : _type(mtpc_photoSize), mtpDataOwner(_data) { +inline MTPphotoSize::MTPphotoSize(MTPDphotoSize *_data) : mtpDataOwner(_data), _type(mtpc_photoSize) { } -inline MTPphotoSize::MTPphotoSize(MTPDphotoCachedSize *_data) : _type(mtpc_photoCachedSize), mtpDataOwner(_data) { +inline MTPphotoSize::MTPphotoSize(MTPDphotoCachedSize *_data) : mtpDataOwner(_data), _type(mtpc_photoCachedSize) { } inline MTPphotoSize MTP_photoSizeEmpty(const MTPstring &_type) { return MTPphotoSize(new MTPDphotoSizeEmpty(_type)); @@ -17526,16 +17526,16 @@ inline void MTPvideo::write(mtpBuffer &to) const { } break; } } -inline MTPvideo::MTPvideo(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPvideo::MTPvideo(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_videoEmpty: setData(new MTPDvideoEmpty()); break; case mtpc_video: setData(new MTPDvideo()); break; default: throw mtpErrorBadTypeId(type, "MTPvideo"); } } -inline MTPvideo::MTPvideo(MTPDvideoEmpty *_data) : _type(mtpc_videoEmpty), mtpDataOwner(_data) { +inline MTPvideo::MTPvideo(MTPDvideoEmpty *_data) : mtpDataOwner(_data), _type(mtpc_videoEmpty) { } -inline MTPvideo::MTPvideo(MTPDvideo *_data) : _type(mtpc_video), mtpDataOwner(_data) { +inline MTPvideo::MTPvideo(MTPDvideo *_data) : mtpDataOwner(_data), _type(mtpc_video) { } inline MTPvideo MTP_videoEmpty(const MTPlong &_id) { return MTPvideo(new MTPDvideoEmpty(_id)); @@ -17579,14 +17579,14 @@ inline void MTPgeoPoint::write(mtpBuffer &to) const { } break; } } -inline MTPgeoPoint::MTPgeoPoint(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPgeoPoint::MTPgeoPoint(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_geoPointEmpty: break; case mtpc_geoPoint: setData(new MTPDgeoPoint()); break; default: throw mtpErrorBadTypeId(type, "MTPgeoPoint"); } } -inline MTPgeoPoint::MTPgeoPoint(MTPDgeoPoint *_data) : _type(mtpc_geoPoint), mtpDataOwner(_data) { +inline MTPgeoPoint::MTPgeoPoint(MTPDgeoPoint *_data) : mtpDataOwner(_data), _type(mtpc_geoPoint) { } inline MTPgeoPoint MTP_geoPointEmpty() { return MTPgeoPoint(mtpc_geoPointEmpty); @@ -17763,7 +17763,7 @@ inline void MTPinputNotifyPeer::write(mtpBuffer &to) const { } break; } } -inline MTPinputNotifyPeer::MTPinputNotifyPeer(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPinputNotifyPeer::MTPinputNotifyPeer(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_inputNotifyPeer: setData(new MTPDinputNotifyPeer()); break; case mtpc_inputNotifyUsers: break; @@ -17773,9 +17773,9 @@ inline MTPinputNotifyPeer::MTPinputNotifyPeer(mtpTypeId type) : _type(type), mtp default: throw mtpErrorBadTypeId(type, "MTPinputNotifyPeer"); } } -inline MTPinputNotifyPeer::MTPinputNotifyPeer(MTPDinputNotifyPeer *_data) : _type(mtpc_inputNotifyPeer), mtpDataOwner(_data) { +inline MTPinputNotifyPeer::MTPinputNotifyPeer(MTPDinputNotifyPeer *_data) : mtpDataOwner(_data), _type(mtpc_inputNotifyPeer) { } -inline MTPinputNotifyPeer::MTPinputNotifyPeer(MTPDinputNotifyGeoChatPeer *_data) : _type(mtpc_inputNotifyGeoChatPeer), mtpDataOwner(_data) { +inline MTPinputNotifyPeer::MTPinputNotifyPeer(MTPDinputNotifyGeoChatPeer *_data) : mtpDataOwner(_data), _type(mtpc_inputNotifyGeoChatPeer) { } inline MTPinputNotifyPeer MTP_inputNotifyPeer(const MTPInputPeer &_peer) { return MTPinputNotifyPeer(new MTPDinputNotifyPeer(_peer)); @@ -17807,7 +17807,7 @@ inline void MTPinputPeerNotifyEvents::read(const mtpPrime *&from, const mtpPrime default: throw mtpErrorUnexpected(cons, "MTPinputPeerNotifyEvents"); } } -inline void MTPinputPeerNotifyEvents::write(mtpBuffer &to) const { +inline void MTPinputPeerNotifyEvents::write(mtpBuffer &/*to*/) const { switch (_type) { } } @@ -17872,7 +17872,7 @@ inline void MTPpeerNotifyEvents::read(const mtpPrime *&from, const mtpPrime *end default: throw mtpErrorUnexpected(cons, "MTPpeerNotifyEvents"); } } -inline void MTPpeerNotifyEvents::write(mtpBuffer &to) const { +inline void MTPpeerNotifyEvents::write(mtpBuffer &/*to*/) const { switch (_type) { } } @@ -17929,14 +17929,14 @@ inline void MTPpeerNotifySettings::write(mtpBuffer &to) const { } break; } } -inline MTPpeerNotifySettings::MTPpeerNotifySettings(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPpeerNotifySettings::MTPpeerNotifySettings(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_peerNotifySettingsEmpty: break; case mtpc_peerNotifySettings: setData(new MTPDpeerNotifySettings()); break; default: throw mtpErrorBadTypeId(type, "MTPpeerNotifySettings"); } } -inline MTPpeerNotifySettings::MTPpeerNotifySettings(MTPDpeerNotifySettings *_data) : _type(mtpc_peerNotifySettings), mtpDataOwner(_data) { +inline MTPpeerNotifySettings::MTPpeerNotifySettings(MTPDpeerNotifySettings *_data) : mtpDataOwner(_data), _type(mtpc_peerNotifySettings) { } inline MTPpeerNotifySettings MTP_peerNotifySettingsEmpty() { return MTPpeerNotifySettings(mtpc_peerNotifySettingsEmpty); @@ -18002,16 +18002,16 @@ inline void MTPwallPaper::write(mtpBuffer &to) const { } break; } } -inline MTPwallPaper::MTPwallPaper(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPwallPaper::MTPwallPaper(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_wallPaper: setData(new MTPDwallPaper()); break; case mtpc_wallPaperSolid: setData(new MTPDwallPaperSolid()); break; default: throw mtpErrorBadTypeId(type, "MTPwallPaper"); } } -inline MTPwallPaper::MTPwallPaper(MTPDwallPaper *_data) : _type(mtpc_wallPaper), mtpDataOwner(_data) { +inline MTPwallPaper::MTPwallPaper(MTPDwallPaper *_data) : mtpDataOwner(_data), _type(mtpc_wallPaper) { } -inline MTPwallPaper::MTPwallPaper(MTPDwallPaperSolid *_data) : _type(mtpc_wallPaperSolid), mtpDataOwner(_data) { +inline MTPwallPaper::MTPwallPaper(MTPDwallPaperSolid *_data) : mtpDataOwner(_data), _type(mtpc_wallPaperSolid) { } inline MTPwallPaper MTP_wallPaper(MTPint _id, const MTPstring &_title, const MTPVector &_sizes, MTPint _color) { return MTPwallPaper(new MTPDwallPaper(_id, _title, _sizes, _color)); @@ -18294,7 +18294,7 @@ inline void MTPcontacts_foreignLink::write(mtpBuffer &to) const { } break; } } -inline MTPcontacts_foreignLink::MTPcontacts_foreignLink(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPcontacts_foreignLink::MTPcontacts_foreignLink(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_contacts_foreignLinkUnknown: break; case mtpc_contacts_foreignLinkRequested: setData(new MTPDcontacts_foreignLinkRequested()); break; @@ -18302,7 +18302,7 @@ inline MTPcontacts_foreignLink::MTPcontacts_foreignLink(mtpTypeId type) : _type( default: throw mtpErrorBadTypeId(type, "MTPcontacts_foreignLink"); } } -inline MTPcontacts_foreignLink::MTPcontacts_foreignLink(MTPDcontacts_foreignLinkRequested *_data) : _type(mtpc_contacts_foreignLinkRequested), mtpDataOwner(_data) { +inline MTPcontacts_foreignLink::MTPcontacts_foreignLink(MTPDcontacts_foreignLinkRequested *_data) : mtpDataOwner(_data), _type(mtpc_contacts_foreignLinkRequested) { } inline MTPcontacts_foreignLink MTP_contacts_foreignLinkUnknown() { return MTPcontacts_foreignLink(mtpc_contacts_foreignLinkUnknown); @@ -18348,7 +18348,7 @@ inline void MTPcontacts_myLink::write(mtpBuffer &to) const { } break; } } -inline MTPcontacts_myLink::MTPcontacts_myLink(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPcontacts_myLink::MTPcontacts_myLink(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_contacts_myLinkEmpty: break; case mtpc_contacts_myLinkRequested: setData(new MTPDcontacts_myLinkRequested()); break; @@ -18356,7 +18356,7 @@ inline MTPcontacts_myLink::MTPcontacts_myLink(mtpTypeId type) : _type(type), mtp default: throw mtpErrorBadTypeId(type, "MTPcontacts_myLink"); } } -inline MTPcontacts_myLink::MTPcontacts_myLink(MTPDcontacts_myLinkRequested *_data) : _type(mtpc_contacts_myLinkRequested), mtpDataOwner(_data) { +inline MTPcontacts_myLink::MTPcontacts_myLink(MTPDcontacts_myLinkRequested *_data) : mtpDataOwner(_data), _type(mtpc_contacts_myLinkRequested) { } inline MTPcontacts_myLink MTP_contacts_myLinkEmpty() { return MTPcontacts_myLink(mtpc_contacts_myLinkEmpty); @@ -18434,14 +18434,14 @@ inline void MTPcontacts_contacts::write(mtpBuffer &to) const { } break; } } -inline MTPcontacts_contacts::MTPcontacts_contacts(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPcontacts_contacts::MTPcontacts_contacts(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_contacts_contacts: setData(new MTPDcontacts_contacts()); break; case mtpc_contacts_contactsNotModified: break; default: throw mtpErrorBadTypeId(type, "MTPcontacts_contacts"); } } -inline MTPcontacts_contacts::MTPcontacts_contacts(MTPDcontacts_contacts *_data) : _type(mtpc_contacts_contacts), mtpDataOwner(_data) { +inline MTPcontacts_contacts::MTPcontacts_contacts(MTPDcontacts_contacts *_data) : mtpDataOwner(_data), _type(mtpc_contacts_contacts) { } inline MTPcontacts_contacts MTP_contacts_contacts(const MTPVector &_contacts, const MTPVector &_users) { return MTPcontacts_contacts(new MTPDcontacts_contacts(_contacts, _users)); @@ -18532,16 +18532,16 @@ inline void MTPcontacts_blocked::write(mtpBuffer &to) const { } break; } } -inline MTPcontacts_blocked::MTPcontacts_blocked(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPcontacts_blocked::MTPcontacts_blocked(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_contacts_blocked: setData(new MTPDcontacts_blocked()); break; case mtpc_contacts_blockedSlice: setData(new MTPDcontacts_blockedSlice()); break; default: throw mtpErrorBadTypeId(type, "MTPcontacts_blocked"); } } -inline MTPcontacts_blocked::MTPcontacts_blocked(MTPDcontacts_blocked *_data) : _type(mtpc_contacts_blocked), mtpDataOwner(_data) { +inline MTPcontacts_blocked::MTPcontacts_blocked(MTPDcontacts_blocked *_data) : mtpDataOwner(_data), _type(mtpc_contacts_blocked) { } -inline MTPcontacts_blocked::MTPcontacts_blocked(MTPDcontacts_blockedSlice *_data) : _type(mtpc_contacts_blockedSlice), mtpDataOwner(_data) { +inline MTPcontacts_blocked::MTPcontacts_blocked(MTPDcontacts_blockedSlice *_data) : mtpDataOwner(_data), _type(mtpc_contacts_blockedSlice) { } inline MTPcontacts_blocked MTP_contacts_blocked(const MTPVector &_blocked, const MTPVector &_users) { return MTPcontacts_blocked(new MTPDcontacts_blocked(_blocked, _users)); @@ -18667,16 +18667,16 @@ inline void MTPmessages_dialogs::write(mtpBuffer &to) const { } break; } } -inline MTPmessages_dialogs::MTPmessages_dialogs(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPmessages_dialogs::MTPmessages_dialogs(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_messages_dialogs: setData(new MTPDmessages_dialogs()); break; case mtpc_messages_dialogsSlice: setData(new MTPDmessages_dialogsSlice()); break; default: throw mtpErrorBadTypeId(type, "MTPmessages_dialogs"); } } -inline MTPmessages_dialogs::MTPmessages_dialogs(MTPDmessages_dialogs *_data) : _type(mtpc_messages_dialogs), mtpDataOwner(_data) { +inline MTPmessages_dialogs::MTPmessages_dialogs(MTPDmessages_dialogs *_data) : mtpDataOwner(_data), _type(mtpc_messages_dialogs) { } -inline MTPmessages_dialogs::MTPmessages_dialogs(MTPDmessages_dialogsSlice *_data) : _type(mtpc_messages_dialogsSlice), mtpDataOwner(_data) { +inline MTPmessages_dialogs::MTPmessages_dialogs(MTPDmessages_dialogsSlice *_data) : mtpDataOwner(_data), _type(mtpc_messages_dialogsSlice) { } inline MTPmessages_dialogs MTP_messages_dialogs(const MTPVector &_dialogs, const MTPVector &_messages, const MTPVector &_chats, const MTPVector &_users) { return MTPmessages_dialogs(new MTPDmessages_dialogs(_dialogs, _messages, _chats, _users)); @@ -18740,16 +18740,16 @@ inline void MTPmessages_messages::write(mtpBuffer &to) const { } break; } } -inline MTPmessages_messages::MTPmessages_messages(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPmessages_messages::MTPmessages_messages(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_messages_messages: setData(new MTPDmessages_messages()); break; case mtpc_messages_messagesSlice: setData(new MTPDmessages_messagesSlice()); break; default: throw mtpErrorBadTypeId(type, "MTPmessages_messages"); } } -inline MTPmessages_messages::MTPmessages_messages(MTPDmessages_messages *_data) : _type(mtpc_messages_messages), mtpDataOwner(_data) { +inline MTPmessages_messages::MTPmessages_messages(MTPDmessages_messages *_data) : mtpDataOwner(_data), _type(mtpc_messages_messages) { } -inline MTPmessages_messages::MTPmessages_messages(MTPDmessages_messagesSlice *_data) : _type(mtpc_messages_messagesSlice), mtpDataOwner(_data) { +inline MTPmessages_messages::MTPmessages_messages(MTPDmessages_messagesSlice *_data) : mtpDataOwner(_data), _type(mtpc_messages_messagesSlice) { } inline MTPmessages_messages MTP_messages_messages(const MTPVector &_messages, const MTPVector &_chats, const MTPVector &_users) { return MTPmessages_messages(new MTPDmessages_messages(_messages, _chats, _users)); @@ -18795,14 +18795,14 @@ inline void MTPmessages_message::write(mtpBuffer &to) const { } break; } } -inline MTPmessages_message::MTPmessages_message(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPmessages_message::MTPmessages_message(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_messages_messageEmpty: break; case mtpc_messages_message: setData(new MTPDmessages_message()); break; default: throw mtpErrorBadTypeId(type, "MTPmessages_message"); } } -inline MTPmessages_message::MTPmessages_message(MTPDmessages_message *_data) : _type(mtpc_messages_message), mtpDataOwner(_data) { +inline MTPmessages_message::MTPmessages_message(MTPDmessages_message *_data) : mtpDataOwner(_data), _type(mtpc_messages_message) { } inline MTPmessages_message MTP_messages_messageEmpty() { return MTPmessages_message(mtpc_messages_messageEmpty); @@ -18874,16 +18874,16 @@ inline void MTPmessages_statedMessages::write(mtpBuffer &to) const { } break; } } -inline MTPmessages_statedMessages::MTPmessages_statedMessages(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPmessages_statedMessages::MTPmessages_statedMessages(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_messages_statedMessages: setData(new MTPDmessages_statedMessages()); break; case mtpc_messages_statedMessagesLinks: setData(new MTPDmessages_statedMessagesLinks()); break; default: throw mtpErrorBadTypeId(type, "MTPmessages_statedMessages"); } } -inline MTPmessages_statedMessages::MTPmessages_statedMessages(MTPDmessages_statedMessages *_data) : _type(mtpc_messages_statedMessages), mtpDataOwner(_data) { +inline MTPmessages_statedMessages::MTPmessages_statedMessages(MTPDmessages_statedMessages *_data) : mtpDataOwner(_data), _type(mtpc_messages_statedMessages) { } -inline MTPmessages_statedMessages::MTPmessages_statedMessages(MTPDmessages_statedMessagesLinks *_data) : _type(mtpc_messages_statedMessagesLinks), mtpDataOwner(_data) { +inline MTPmessages_statedMessages::MTPmessages_statedMessages(MTPDmessages_statedMessagesLinks *_data) : mtpDataOwner(_data), _type(mtpc_messages_statedMessagesLinks) { } inline MTPmessages_statedMessages MTP_messages_statedMessages(const MTPVector &_messages, const MTPVector &_chats, const MTPVector &_users, MTPint _pts, MTPint _seq) { return MTPmessages_statedMessages(new MTPDmessages_statedMessages(_messages, _chats, _users, _pts, _seq)); @@ -18955,16 +18955,16 @@ inline void MTPmessages_statedMessage::write(mtpBuffer &to) const { } break; } } -inline MTPmessages_statedMessage::MTPmessages_statedMessage(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPmessages_statedMessage::MTPmessages_statedMessage(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_messages_statedMessage: setData(new MTPDmessages_statedMessage()); break; case mtpc_messages_statedMessageLink: setData(new MTPDmessages_statedMessageLink()); break; default: throw mtpErrorBadTypeId(type, "MTPmessages_statedMessage"); } } -inline MTPmessages_statedMessage::MTPmessages_statedMessage(MTPDmessages_statedMessage *_data) : _type(mtpc_messages_statedMessage), mtpDataOwner(_data) { +inline MTPmessages_statedMessage::MTPmessages_statedMessage(MTPDmessages_statedMessage *_data) : mtpDataOwner(_data), _type(mtpc_messages_statedMessage) { } -inline MTPmessages_statedMessage::MTPmessages_statedMessage(MTPDmessages_statedMessageLink *_data) : _type(mtpc_messages_statedMessageLink), mtpDataOwner(_data) { +inline MTPmessages_statedMessage::MTPmessages_statedMessage(MTPDmessages_statedMessageLink *_data) : mtpDataOwner(_data), _type(mtpc_messages_statedMessageLink) { } inline MTPmessages_statedMessage MTP_messages_statedMessage(const MTPMessage &_message, const MTPVector &_chats, const MTPVector &_users, MTPint _pts, MTPint _seq) { return MTPmessages_statedMessage(new MTPDmessages_statedMessage(_message, _chats, _users, _pts, _seq)); @@ -19032,16 +19032,16 @@ inline void MTPmessages_sentMessage::write(mtpBuffer &to) const { } break; } } -inline MTPmessages_sentMessage::MTPmessages_sentMessage(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPmessages_sentMessage::MTPmessages_sentMessage(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_messages_sentMessage: setData(new MTPDmessages_sentMessage()); break; case mtpc_messages_sentMessageLink: setData(new MTPDmessages_sentMessageLink()); break; default: throw mtpErrorBadTypeId(type, "MTPmessages_sentMessage"); } } -inline MTPmessages_sentMessage::MTPmessages_sentMessage(MTPDmessages_sentMessage *_data) : _type(mtpc_messages_sentMessage), mtpDataOwner(_data) { +inline MTPmessages_sentMessage::MTPmessages_sentMessage(MTPDmessages_sentMessage *_data) : mtpDataOwner(_data), _type(mtpc_messages_sentMessage) { } -inline MTPmessages_sentMessage::MTPmessages_sentMessage(MTPDmessages_sentMessageLink *_data) : _type(mtpc_messages_sentMessageLink), mtpDataOwner(_data) { +inline MTPmessages_sentMessage::MTPmessages_sentMessage(MTPDmessages_sentMessageLink *_data) : mtpDataOwner(_data), _type(mtpc_messages_sentMessageLink) { } inline MTPmessages_sentMessage MTP_messages_sentMessage(MTPint _id, MTPint _date, MTPint _pts, MTPint _seq) { return MTPmessages_sentMessage(new MTPDmessages_sentMessage(_id, _date, _pts, _seq)); @@ -19187,7 +19187,7 @@ inline void MTPmessagesFilter::read(const mtpPrime *&from, const mtpPrime *end, default: throw mtpErrorUnexpected(cons, "MTPmessagesFilter"); } } -inline void MTPmessagesFilter::write(mtpBuffer &to) const { +inline void MTPmessagesFilter::write(mtpBuffer &/*to*/) const { switch (_type) { } } @@ -19619,7 +19619,7 @@ inline void MTPupdate::write(mtpBuffer &to) const { } break; } } -inline MTPupdate::MTPupdate(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPupdate::MTPupdate(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_updateNewMessage: setData(new MTPDupdateNewMessage()); break; case mtpc_updateMessageID: setData(new MTPDupdateMessageID()); break; @@ -19649,55 +19649,55 @@ inline MTPupdate::MTPupdate(mtpTypeId type) : _type(type), mtpDataOwner(0) { default: throw mtpErrorBadTypeId(type, "MTPupdate"); } } -inline MTPupdate::MTPupdate(MTPDupdateNewMessage *_data) : _type(mtpc_updateNewMessage), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateNewMessage *_data) : mtpDataOwner(_data), _type(mtpc_updateNewMessage) { } -inline MTPupdate::MTPupdate(MTPDupdateMessageID *_data) : _type(mtpc_updateMessageID), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateMessageID *_data) : mtpDataOwner(_data), _type(mtpc_updateMessageID) { } -inline MTPupdate::MTPupdate(MTPDupdateReadMessages *_data) : _type(mtpc_updateReadMessages), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateReadMessages *_data) : mtpDataOwner(_data), _type(mtpc_updateReadMessages) { } -inline MTPupdate::MTPupdate(MTPDupdateDeleteMessages *_data) : _type(mtpc_updateDeleteMessages), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateDeleteMessages *_data) : mtpDataOwner(_data), _type(mtpc_updateDeleteMessages) { } -inline MTPupdate::MTPupdate(MTPDupdateRestoreMessages *_data) : _type(mtpc_updateRestoreMessages), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateRestoreMessages *_data) : mtpDataOwner(_data), _type(mtpc_updateRestoreMessages) { } -inline MTPupdate::MTPupdate(MTPDupdateUserTyping *_data) : _type(mtpc_updateUserTyping), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateUserTyping *_data) : mtpDataOwner(_data), _type(mtpc_updateUserTyping) { } -inline MTPupdate::MTPupdate(MTPDupdateChatUserTyping *_data) : _type(mtpc_updateChatUserTyping), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateChatUserTyping *_data) : mtpDataOwner(_data), _type(mtpc_updateChatUserTyping) { } -inline MTPupdate::MTPupdate(MTPDupdateChatParticipants *_data) : _type(mtpc_updateChatParticipants), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateChatParticipants *_data) : mtpDataOwner(_data), _type(mtpc_updateChatParticipants) { } -inline MTPupdate::MTPupdate(MTPDupdateUserStatus *_data) : _type(mtpc_updateUserStatus), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateUserStatus *_data) : mtpDataOwner(_data), _type(mtpc_updateUserStatus) { } -inline MTPupdate::MTPupdate(MTPDupdateUserName *_data) : _type(mtpc_updateUserName), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateUserName *_data) : mtpDataOwner(_data), _type(mtpc_updateUserName) { } -inline MTPupdate::MTPupdate(MTPDupdateUserPhoto *_data) : _type(mtpc_updateUserPhoto), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateUserPhoto *_data) : mtpDataOwner(_data), _type(mtpc_updateUserPhoto) { } -inline MTPupdate::MTPupdate(MTPDupdateContactRegistered *_data) : _type(mtpc_updateContactRegistered), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateContactRegistered *_data) : mtpDataOwner(_data), _type(mtpc_updateContactRegistered) { } -inline MTPupdate::MTPupdate(MTPDupdateContactLink *_data) : _type(mtpc_updateContactLink), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateContactLink *_data) : mtpDataOwner(_data), _type(mtpc_updateContactLink) { } -inline MTPupdate::MTPupdate(MTPDupdateActivation *_data) : _type(mtpc_updateActivation), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateActivation *_data) : mtpDataOwner(_data), _type(mtpc_updateActivation) { } -inline MTPupdate::MTPupdate(MTPDupdateNewAuthorization *_data) : _type(mtpc_updateNewAuthorization), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateNewAuthorization *_data) : mtpDataOwner(_data), _type(mtpc_updateNewAuthorization) { } -inline MTPupdate::MTPupdate(MTPDupdateNewGeoChatMessage *_data) : _type(mtpc_updateNewGeoChatMessage), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateNewGeoChatMessage *_data) : mtpDataOwner(_data), _type(mtpc_updateNewGeoChatMessage) { } -inline MTPupdate::MTPupdate(MTPDupdateNewEncryptedMessage *_data) : _type(mtpc_updateNewEncryptedMessage), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateNewEncryptedMessage *_data) : mtpDataOwner(_data), _type(mtpc_updateNewEncryptedMessage) { } -inline MTPupdate::MTPupdate(MTPDupdateEncryptedChatTyping *_data) : _type(mtpc_updateEncryptedChatTyping), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateEncryptedChatTyping *_data) : mtpDataOwner(_data), _type(mtpc_updateEncryptedChatTyping) { } -inline MTPupdate::MTPupdate(MTPDupdateEncryption *_data) : _type(mtpc_updateEncryption), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateEncryption *_data) : mtpDataOwner(_data), _type(mtpc_updateEncryption) { } -inline MTPupdate::MTPupdate(MTPDupdateEncryptedMessagesRead *_data) : _type(mtpc_updateEncryptedMessagesRead), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateEncryptedMessagesRead *_data) : mtpDataOwner(_data), _type(mtpc_updateEncryptedMessagesRead) { } -inline MTPupdate::MTPupdate(MTPDupdateChatParticipantAdd *_data) : _type(mtpc_updateChatParticipantAdd), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateChatParticipantAdd *_data) : mtpDataOwner(_data), _type(mtpc_updateChatParticipantAdd) { } -inline MTPupdate::MTPupdate(MTPDupdateChatParticipantDelete *_data) : _type(mtpc_updateChatParticipantDelete), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateChatParticipantDelete *_data) : mtpDataOwner(_data), _type(mtpc_updateChatParticipantDelete) { } -inline MTPupdate::MTPupdate(MTPDupdateDcOptions *_data) : _type(mtpc_updateDcOptions), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateDcOptions *_data) : mtpDataOwner(_data), _type(mtpc_updateDcOptions) { } -inline MTPupdate::MTPupdate(MTPDupdateUserBlocked *_data) : _type(mtpc_updateUserBlocked), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateUserBlocked *_data) : mtpDataOwner(_data), _type(mtpc_updateUserBlocked) { } -inline MTPupdate::MTPupdate(MTPDupdateNotifySettings *_data) : _type(mtpc_updateNotifySettings), mtpDataOwner(_data) { +inline MTPupdate::MTPupdate(MTPDupdateNotifySettings *_data) : mtpDataOwner(_data), _type(mtpc_updateNotifySettings) { } inline MTPupdate MTP_updateNewMessage(const MTPMessage &_message, MTPint _pts) { return MTPupdate(new MTPDupdateNewMessage(_message, _pts)); @@ -19890,7 +19890,7 @@ inline void MTPupdates_difference::write(mtpBuffer &to) const { } break; } } -inline MTPupdates_difference::MTPupdates_difference(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPupdates_difference::MTPupdates_difference(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_updates_differenceEmpty: setData(new MTPDupdates_differenceEmpty()); break; case mtpc_updates_difference: setData(new MTPDupdates_difference()); break; @@ -19898,11 +19898,11 @@ inline MTPupdates_difference::MTPupdates_difference(mtpTypeId type) : _type(type default: throw mtpErrorBadTypeId(type, "MTPupdates_difference"); } } -inline MTPupdates_difference::MTPupdates_difference(MTPDupdates_differenceEmpty *_data) : _type(mtpc_updates_differenceEmpty), mtpDataOwner(_data) { +inline MTPupdates_difference::MTPupdates_difference(MTPDupdates_differenceEmpty *_data) : mtpDataOwner(_data), _type(mtpc_updates_differenceEmpty) { } -inline MTPupdates_difference::MTPupdates_difference(MTPDupdates_difference *_data) : _type(mtpc_updates_difference), mtpDataOwner(_data) { +inline MTPupdates_difference::MTPupdates_difference(MTPDupdates_difference *_data) : mtpDataOwner(_data), _type(mtpc_updates_difference) { } -inline MTPupdates_difference::MTPupdates_difference(MTPDupdates_differenceSlice *_data) : _type(mtpc_updates_differenceSlice), mtpDataOwner(_data) { +inline MTPupdates_difference::MTPupdates_difference(MTPDupdates_differenceSlice *_data) : mtpDataOwner(_data), _type(mtpc_updates_differenceSlice) { } inline MTPupdates_difference MTP_updates_differenceEmpty(MTPint _date, MTPint _seq) { return MTPupdates_difference(new MTPDupdates_differenceEmpty(_date, _seq)); @@ -20041,7 +20041,7 @@ inline void MTPupdates::write(mtpBuffer &to) const { } break; } } -inline MTPupdates::MTPupdates(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPupdates::MTPupdates(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_updatesTooLong: break; case mtpc_updateShortMessage: setData(new MTPDupdateShortMessage()); break; @@ -20052,15 +20052,15 @@ inline MTPupdates::MTPupdates(mtpTypeId type) : _type(type), mtpDataOwner(0) { default: throw mtpErrorBadTypeId(type, "MTPupdates"); } } -inline MTPupdates::MTPupdates(MTPDupdateShortMessage *_data) : _type(mtpc_updateShortMessage), mtpDataOwner(_data) { +inline MTPupdates::MTPupdates(MTPDupdateShortMessage *_data) : mtpDataOwner(_data), _type(mtpc_updateShortMessage) { } -inline MTPupdates::MTPupdates(MTPDupdateShortChatMessage *_data) : _type(mtpc_updateShortChatMessage), mtpDataOwner(_data) { +inline MTPupdates::MTPupdates(MTPDupdateShortChatMessage *_data) : mtpDataOwner(_data), _type(mtpc_updateShortChatMessage) { } -inline MTPupdates::MTPupdates(MTPDupdateShort *_data) : _type(mtpc_updateShort), mtpDataOwner(_data) { +inline MTPupdates::MTPupdates(MTPDupdateShort *_data) : mtpDataOwner(_data), _type(mtpc_updateShort) { } -inline MTPupdates::MTPupdates(MTPDupdatesCombined *_data) : _type(mtpc_updatesCombined), mtpDataOwner(_data) { +inline MTPupdates::MTPupdates(MTPDupdatesCombined *_data) : mtpDataOwner(_data), _type(mtpc_updatesCombined) { } -inline MTPupdates::MTPupdates(MTPDupdates *_data) : _type(mtpc_updates), mtpDataOwner(_data) { +inline MTPupdates::MTPupdates(MTPDupdates *_data) : mtpDataOwner(_data), _type(mtpc_updates) { } inline MTPupdates MTP_updatesTooLong() { return MTPupdates(mtpc_updatesTooLong); @@ -20132,16 +20132,16 @@ inline void MTPphotos_photos::write(mtpBuffer &to) const { } break; } } -inline MTPphotos_photos::MTPphotos_photos(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPphotos_photos::MTPphotos_photos(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_photos_photos: setData(new MTPDphotos_photos()); break; case mtpc_photos_photosSlice: setData(new MTPDphotos_photosSlice()); break; default: throw mtpErrorBadTypeId(type, "MTPphotos_photos"); } } -inline MTPphotos_photos::MTPphotos_photos(MTPDphotos_photos *_data) : _type(mtpc_photos_photos), mtpDataOwner(_data) { +inline MTPphotos_photos::MTPphotos_photos(MTPDphotos_photos *_data) : mtpDataOwner(_data), _type(mtpc_photos_photos) { } -inline MTPphotos_photos::MTPphotos_photos(MTPDphotos_photosSlice *_data) : _type(mtpc_photos_photosSlice), mtpDataOwner(_data) { +inline MTPphotos_photos::MTPphotos_photos(MTPDphotos_photosSlice *_data) : mtpDataOwner(_data), _type(mtpc_photos_photosSlice) { } inline MTPphotos_photos MTP_photos_photos(const MTPVector &_photos, const MTPVector &_users) { return MTPphotos_photos(new MTPDphotos_photos(_photos, _users)); @@ -20350,14 +20350,14 @@ inline void MTPhelp_appUpdate::write(mtpBuffer &to) const { } break; } } -inline MTPhelp_appUpdate::MTPhelp_appUpdate(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPhelp_appUpdate::MTPhelp_appUpdate(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_help_appUpdate: setData(new MTPDhelp_appUpdate()); break; case mtpc_help_noAppUpdate: break; default: throw mtpErrorBadTypeId(type, "MTPhelp_appUpdate"); } } -inline MTPhelp_appUpdate::MTPhelp_appUpdate(MTPDhelp_appUpdate *_data) : _type(mtpc_help_appUpdate), mtpDataOwner(_data) { +inline MTPhelp_appUpdate::MTPhelp_appUpdate(MTPDhelp_appUpdate *_data) : mtpDataOwner(_data), _type(mtpc_help_appUpdate) { } inline MTPhelp_appUpdate MTP_help_appUpdate(MTPint _id, MTPBool _critical, const MTPstring &_url, const MTPstring &_text) { return MTPhelp_appUpdate(new MTPDhelp_appUpdate(_id, _critical, _url, _text)); @@ -20500,7 +20500,7 @@ inline void MTPgeoChatMessage::write(mtpBuffer &to) const { } break; } } -inline MTPgeoChatMessage::MTPgeoChatMessage(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPgeoChatMessage::MTPgeoChatMessage(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_geoChatMessageEmpty: setData(new MTPDgeoChatMessageEmpty()); break; case mtpc_geoChatMessage: setData(new MTPDgeoChatMessage()); break; @@ -20508,11 +20508,11 @@ inline MTPgeoChatMessage::MTPgeoChatMessage(mtpTypeId type) : _type(type), mtpDa default: throw mtpErrorBadTypeId(type, "MTPgeoChatMessage"); } } -inline MTPgeoChatMessage::MTPgeoChatMessage(MTPDgeoChatMessageEmpty *_data) : _type(mtpc_geoChatMessageEmpty), mtpDataOwner(_data) { +inline MTPgeoChatMessage::MTPgeoChatMessage(MTPDgeoChatMessageEmpty *_data) : mtpDataOwner(_data), _type(mtpc_geoChatMessageEmpty) { } -inline MTPgeoChatMessage::MTPgeoChatMessage(MTPDgeoChatMessage *_data) : _type(mtpc_geoChatMessage), mtpDataOwner(_data) { +inline MTPgeoChatMessage::MTPgeoChatMessage(MTPDgeoChatMessage *_data) : mtpDataOwner(_data), _type(mtpc_geoChatMessage) { } -inline MTPgeoChatMessage::MTPgeoChatMessage(MTPDgeoChatMessageService *_data) : _type(mtpc_geoChatMessageService), mtpDataOwner(_data) { +inline MTPgeoChatMessage::MTPgeoChatMessage(MTPDgeoChatMessageService *_data) : mtpDataOwner(_data), _type(mtpc_geoChatMessageService) { } inline MTPgeoChatMessage MTP_geoChatMessageEmpty(MTPint _chat_id, MTPint _id) { return MTPgeoChatMessage(new MTPDgeoChatMessageEmpty(_chat_id, _id)); @@ -20645,16 +20645,16 @@ inline void MTPgeochats_messages::write(mtpBuffer &to) const { } break; } } -inline MTPgeochats_messages::MTPgeochats_messages(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPgeochats_messages::MTPgeochats_messages(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_geochats_messages: setData(new MTPDgeochats_messages()); break; case mtpc_geochats_messagesSlice: setData(new MTPDgeochats_messagesSlice()); break; default: throw mtpErrorBadTypeId(type, "MTPgeochats_messages"); } } -inline MTPgeochats_messages::MTPgeochats_messages(MTPDgeochats_messages *_data) : _type(mtpc_geochats_messages), mtpDataOwner(_data) { +inline MTPgeochats_messages::MTPgeochats_messages(MTPDgeochats_messages *_data) : mtpDataOwner(_data), _type(mtpc_geochats_messages) { } -inline MTPgeochats_messages::MTPgeochats_messages(MTPDgeochats_messagesSlice *_data) : _type(mtpc_geochats_messagesSlice), mtpDataOwner(_data) { +inline MTPgeochats_messages::MTPgeochats_messages(MTPDgeochats_messagesSlice *_data) : mtpDataOwner(_data), _type(mtpc_geochats_messagesSlice) { } inline MTPgeochats_messages MTP_geochats_messages(const MTPVector &_messages, const MTPVector &_chats, const MTPVector &_users) { return MTPgeochats_messages(new MTPDgeochats_messages(_messages, _chats, _users)); @@ -20777,7 +20777,7 @@ inline void MTPencryptedChat::write(mtpBuffer &to) const { } break; } } -inline MTPencryptedChat::MTPencryptedChat(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPencryptedChat::MTPencryptedChat(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_encryptedChatEmpty: setData(new MTPDencryptedChatEmpty()); break; case mtpc_encryptedChatWaiting: setData(new MTPDencryptedChatWaiting()); break; @@ -20787,15 +20787,15 @@ inline MTPencryptedChat::MTPencryptedChat(mtpTypeId type) : _type(type), mtpData default: throw mtpErrorBadTypeId(type, "MTPencryptedChat"); } } -inline MTPencryptedChat::MTPencryptedChat(MTPDencryptedChatEmpty *_data) : _type(mtpc_encryptedChatEmpty), mtpDataOwner(_data) { +inline MTPencryptedChat::MTPencryptedChat(MTPDencryptedChatEmpty *_data) : mtpDataOwner(_data), _type(mtpc_encryptedChatEmpty) { } -inline MTPencryptedChat::MTPencryptedChat(MTPDencryptedChatWaiting *_data) : _type(mtpc_encryptedChatWaiting), mtpDataOwner(_data) { +inline MTPencryptedChat::MTPencryptedChat(MTPDencryptedChatWaiting *_data) : mtpDataOwner(_data), _type(mtpc_encryptedChatWaiting) { } -inline MTPencryptedChat::MTPencryptedChat(MTPDencryptedChatRequested *_data) : _type(mtpc_encryptedChatRequested), mtpDataOwner(_data) { +inline MTPencryptedChat::MTPencryptedChat(MTPDencryptedChatRequested *_data) : mtpDataOwner(_data), _type(mtpc_encryptedChatRequested) { } -inline MTPencryptedChat::MTPencryptedChat(MTPDencryptedChat *_data) : _type(mtpc_encryptedChat), mtpDataOwner(_data) { +inline MTPencryptedChat::MTPencryptedChat(MTPDencryptedChat *_data) : mtpDataOwner(_data), _type(mtpc_encryptedChat) { } -inline MTPencryptedChat::MTPencryptedChat(MTPDencryptedChatDiscarded *_data) : _type(mtpc_encryptedChatDiscarded), mtpDataOwner(_data) { +inline MTPencryptedChat::MTPencryptedChat(MTPDencryptedChatDiscarded *_data) : mtpDataOwner(_data), _type(mtpc_encryptedChatDiscarded) { } inline MTPencryptedChat MTP_encryptedChatEmpty(MTPint _id) { return MTPencryptedChat(new MTPDencryptedChatEmpty(_id)); @@ -20883,14 +20883,14 @@ inline void MTPencryptedFile::write(mtpBuffer &to) const { } break; } } -inline MTPencryptedFile::MTPencryptedFile(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPencryptedFile::MTPencryptedFile(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_encryptedFileEmpty: break; case mtpc_encryptedFile: setData(new MTPDencryptedFile()); break; default: throw mtpErrorBadTypeId(type, "MTPencryptedFile"); } } -inline MTPencryptedFile::MTPencryptedFile(MTPDencryptedFile *_data) : _type(mtpc_encryptedFile), mtpDataOwner(_data) { +inline MTPencryptedFile::MTPencryptedFile(MTPDencryptedFile *_data) : mtpDataOwner(_data), _type(mtpc_encryptedFile) { } inline MTPencryptedFile MTP_encryptedFileEmpty() { return MTPencryptedFile(mtpc_encryptedFileEmpty); @@ -20970,7 +20970,7 @@ inline void MTPinputEncryptedFile::write(mtpBuffer &to) const { } break; } } -inline MTPinputEncryptedFile::MTPinputEncryptedFile(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPinputEncryptedFile::MTPinputEncryptedFile(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_inputEncryptedFileEmpty: break; case mtpc_inputEncryptedFileUploaded: setData(new MTPDinputEncryptedFileUploaded()); break; @@ -20979,11 +20979,11 @@ inline MTPinputEncryptedFile::MTPinputEncryptedFile(mtpTypeId type) : _type(type default: throw mtpErrorBadTypeId(type, "MTPinputEncryptedFile"); } } -inline MTPinputEncryptedFile::MTPinputEncryptedFile(MTPDinputEncryptedFileUploaded *_data) : _type(mtpc_inputEncryptedFileUploaded), mtpDataOwner(_data) { +inline MTPinputEncryptedFile::MTPinputEncryptedFile(MTPDinputEncryptedFileUploaded *_data) : mtpDataOwner(_data), _type(mtpc_inputEncryptedFileUploaded) { } -inline MTPinputEncryptedFile::MTPinputEncryptedFile(MTPDinputEncryptedFile *_data) : _type(mtpc_inputEncryptedFile), mtpDataOwner(_data) { +inline MTPinputEncryptedFile::MTPinputEncryptedFile(MTPDinputEncryptedFile *_data) : mtpDataOwner(_data), _type(mtpc_inputEncryptedFile) { } -inline MTPinputEncryptedFile::MTPinputEncryptedFile(MTPDinputEncryptedFileBigUploaded *_data) : _type(mtpc_inputEncryptedFileBigUploaded), mtpDataOwner(_data) { +inline MTPinputEncryptedFile::MTPinputEncryptedFile(MTPDinputEncryptedFileBigUploaded *_data) : mtpDataOwner(_data), _type(mtpc_inputEncryptedFileBigUploaded) { } inline MTPinputEncryptedFile MTP_inputEncryptedFileEmpty() { return MTPinputEncryptedFile(mtpc_inputEncryptedFileEmpty); @@ -21057,16 +21057,16 @@ inline void MTPencryptedMessage::write(mtpBuffer &to) const { } break; } } -inline MTPencryptedMessage::MTPencryptedMessage(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPencryptedMessage::MTPencryptedMessage(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_encryptedMessage: setData(new MTPDencryptedMessage()); break; case mtpc_encryptedMessageService: setData(new MTPDencryptedMessageService()); break; default: throw mtpErrorBadTypeId(type, "MTPencryptedMessage"); } } -inline MTPencryptedMessage::MTPencryptedMessage(MTPDencryptedMessage *_data) : _type(mtpc_encryptedMessage), mtpDataOwner(_data) { +inline MTPencryptedMessage::MTPencryptedMessage(MTPDencryptedMessage *_data) : mtpDataOwner(_data), _type(mtpc_encryptedMessage) { } -inline MTPencryptedMessage::MTPencryptedMessage(MTPDencryptedMessageService *_data) : _type(mtpc_encryptedMessageService), mtpDataOwner(_data) { +inline MTPencryptedMessage::MTPencryptedMessage(MTPDencryptedMessageService *_data) : mtpDataOwner(_data), _type(mtpc_encryptedMessageService) { } inline MTPencryptedMessage MTP_encryptedMessage(const MTPlong &_random_id, MTPint _chat_id, MTPint _date, const MTPbytes &_bytes, const MTPEncryptedFile &_file) { return MTPencryptedMessage(new MTPDencryptedMessage(_random_id, _chat_id, _date, _bytes, _file)); @@ -21159,16 +21159,16 @@ inline void MTPdecryptedMessage::write(mtpBuffer &to) const { } break; } } -inline MTPdecryptedMessage::MTPdecryptedMessage(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPdecryptedMessage::MTPdecryptedMessage(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_decryptedMessage: setData(new MTPDdecryptedMessage()); break; case mtpc_decryptedMessageService: setData(new MTPDdecryptedMessageService()); break; default: throw mtpErrorBadTypeId(type, "MTPdecryptedMessage"); } } -inline MTPdecryptedMessage::MTPdecryptedMessage(MTPDdecryptedMessage *_data) : _type(mtpc_decryptedMessage), mtpDataOwner(_data) { +inline MTPdecryptedMessage::MTPdecryptedMessage(MTPDdecryptedMessage *_data) : mtpDataOwner(_data), _type(mtpc_decryptedMessage) { } -inline MTPdecryptedMessage::MTPdecryptedMessage(MTPDdecryptedMessageService *_data) : _type(mtpc_decryptedMessageService), mtpDataOwner(_data) { +inline MTPdecryptedMessage::MTPdecryptedMessage(MTPDdecryptedMessageService *_data) : mtpDataOwner(_data), _type(mtpc_decryptedMessageService) { } inline MTPdecryptedMessage MTP_decryptedMessage(const MTPlong &_random_id, const MTPbytes &_random_bytes, const MTPstring &_message, const MTPDecryptedMessageMedia &_media) { return MTPdecryptedMessage(new MTPDdecryptedMessage(_random_id, _random_bytes, _message, _media)); @@ -21337,7 +21337,7 @@ inline void MTPdecryptedMessageMedia::write(mtpBuffer &to) const { } break; } } -inline MTPdecryptedMessageMedia::MTPdecryptedMessageMedia(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPdecryptedMessageMedia::MTPdecryptedMessageMedia(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_decryptedMessageMediaEmpty: break; case mtpc_decryptedMessageMediaPhoto: setData(new MTPDdecryptedMessageMediaPhoto()); break; @@ -21349,17 +21349,17 @@ inline MTPdecryptedMessageMedia::MTPdecryptedMessageMedia(mtpTypeId type) : _typ default: throw mtpErrorBadTypeId(type, "MTPdecryptedMessageMedia"); } } -inline MTPdecryptedMessageMedia::MTPdecryptedMessageMedia(MTPDdecryptedMessageMediaPhoto *_data) : _type(mtpc_decryptedMessageMediaPhoto), mtpDataOwner(_data) { +inline MTPdecryptedMessageMedia::MTPdecryptedMessageMedia(MTPDdecryptedMessageMediaPhoto *_data) : mtpDataOwner(_data), _type(mtpc_decryptedMessageMediaPhoto) { } -inline MTPdecryptedMessageMedia::MTPdecryptedMessageMedia(MTPDdecryptedMessageMediaVideo *_data) : _type(mtpc_decryptedMessageMediaVideo), mtpDataOwner(_data) { +inline MTPdecryptedMessageMedia::MTPdecryptedMessageMedia(MTPDdecryptedMessageMediaVideo *_data) : mtpDataOwner(_data), _type(mtpc_decryptedMessageMediaVideo) { } -inline MTPdecryptedMessageMedia::MTPdecryptedMessageMedia(MTPDdecryptedMessageMediaGeoPoint *_data) : _type(mtpc_decryptedMessageMediaGeoPoint), mtpDataOwner(_data) { +inline MTPdecryptedMessageMedia::MTPdecryptedMessageMedia(MTPDdecryptedMessageMediaGeoPoint *_data) : mtpDataOwner(_data), _type(mtpc_decryptedMessageMediaGeoPoint) { } -inline MTPdecryptedMessageMedia::MTPdecryptedMessageMedia(MTPDdecryptedMessageMediaContact *_data) : _type(mtpc_decryptedMessageMediaContact), mtpDataOwner(_data) { +inline MTPdecryptedMessageMedia::MTPdecryptedMessageMedia(MTPDdecryptedMessageMediaContact *_data) : mtpDataOwner(_data), _type(mtpc_decryptedMessageMediaContact) { } -inline MTPdecryptedMessageMedia::MTPdecryptedMessageMedia(MTPDdecryptedMessageMediaDocument *_data) : _type(mtpc_decryptedMessageMediaDocument), mtpDataOwner(_data) { +inline MTPdecryptedMessageMedia::MTPdecryptedMessageMedia(MTPDdecryptedMessageMediaDocument *_data) : mtpDataOwner(_data), _type(mtpc_decryptedMessageMediaDocument) { } -inline MTPdecryptedMessageMedia::MTPdecryptedMessageMedia(MTPDdecryptedMessageMediaAudio *_data) : _type(mtpc_decryptedMessageMediaAudio), mtpDataOwner(_data) { +inline MTPdecryptedMessageMedia::MTPdecryptedMessageMedia(MTPDdecryptedMessageMediaAudio *_data) : mtpDataOwner(_data), _type(mtpc_decryptedMessageMediaAudio) { } inline MTPdecryptedMessageMedia MTP_decryptedMessageMediaEmpty() { return MTPdecryptedMessageMedia(mtpc_decryptedMessageMediaEmpty); @@ -21468,7 +21468,7 @@ inline void MTPdecryptedMessageAction::write(mtpBuffer &to) const { } break; } } -inline MTPdecryptedMessageAction::MTPdecryptedMessageAction(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPdecryptedMessageAction::MTPdecryptedMessageAction(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_decryptedMessageActionSetMessageTTL: setData(new MTPDdecryptedMessageActionSetMessageTTL()); break; case mtpc_decryptedMessageActionReadMessages: setData(new MTPDdecryptedMessageActionReadMessages()); break; @@ -21479,15 +21479,15 @@ inline MTPdecryptedMessageAction::MTPdecryptedMessageAction(mtpTypeId type) : _t default: throw mtpErrorBadTypeId(type, "MTPdecryptedMessageAction"); } } -inline MTPdecryptedMessageAction::MTPdecryptedMessageAction(MTPDdecryptedMessageActionSetMessageTTL *_data) : _type(mtpc_decryptedMessageActionSetMessageTTL), mtpDataOwner(_data) { +inline MTPdecryptedMessageAction::MTPdecryptedMessageAction(MTPDdecryptedMessageActionSetMessageTTL *_data) : mtpDataOwner(_data), _type(mtpc_decryptedMessageActionSetMessageTTL) { } -inline MTPdecryptedMessageAction::MTPdecryptedMessageAction(MTPDdecryptedMessageActionReadMessages *_data) : _type(mtpc_decryptedMessageActionReadMessages), mtpDataOwner(_data) { +inline MTPdecryptedMessageAction::MTPdecryptedMessageAction(MTPDdecryptedMessageActionReadMessages *_data) : mtpDataOwner(_data), _type(mtpc_decryptedMessageActionReadMessages) { } -inline MTPdecryptedMessageAction::MTPdecryptedMessageAction(MTPDdecryptedMessageActionDeleteMessages *_data) : _type(mtpc_decryptedMessageActionDeleteMessages), mtpDataOwner(_data) { +inline MTPdecryptedMessageAction::MTPdecryptedMessageAction(MTPDdecryptedMessageActionDeleteMessages *_data) : mtpDataOwner(_data), _type(mtpc_decryptedMessageActionDeleteMessages) { } -inline MTPdecryptedMessageAction::MTPdecryptedMessageAction(MTPDdecryptedMessageActionScreenshotMessages *_data) : _type(mtpc_decryptedMessageActionScreenshotMessages), mtpDataOwner(_data) { +inline MTPdecryptedMessageAction::MTPdecryptedMessageAction(MTPDdecryptedMessageActionScreenshotMessages *_data) : mtpDataOwner(_data), _type(mtpc_decryptedMessageActionScreenshotMessages) { } -inline MTPdecryptedMessageAction::MTPdecryptedMessageAction(MTPDdecryptedMessageActionNotifyLayer *_data) : _type(mtpc_decryptedMessageActionNotifyLayer), mtpDataOwner(_data) { +inline MTPdecryptedMessageAction::MTPdecryptedMessageAction(MTPDdecryptedMessageActionNotifyLayer *_data) : mtpDataOwner(_data), _type(mtpc_decryptedMessageActionNotifyLayer) { } inline MTPdecryptedMessageAction MTP_decryptedMessageActionSetMessageTTL(MTPint _ttl_seconds) { return MTPdecryptedMessageAction(new MTPDdecryptedMessageActionSetMessageTTL(_ttl_seconds)); @@ -21559,16 +21559,16 @@ inline void MTPmessages_dhConfig::write(mtpBuffer &to) const { } break; } } -inline MTPmessages_dhConfig::MTPmessages_dhConfig(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPmessages_dhConfig::MTPmessages_dhConfig(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_messages_dhConfigNotModified: setData(new MTPDmessages_dhConfigNotModified()); break; case mtpc_messages_dhConfig: setData(new MTPDmessages_dhConfig()); break; default: throw mtpErrorBadTypeId(type, "MTPmessages_dhConfig"); } } -inline MTPmessages_dhConfig::MTPmessages_dhConfig(MTPDmessages_dhConfigNotModified *_data) : _type(mtpc_messages_dhConfigNotModified), mtpDataOwner(_data) { +inline MTPmessages_dhConfig::MTPmessages_dhConfig(MTPDmessages_dhConfigNotModified *_data) : mtpDataOwner(_data), _type(mtpc_messages_dhConfigNotModified) { } -inline MTPmessages_dhConfig::MTPmessages_dhConfig(MTPDmessages_dhConfig *_data) : _type(mtpc_messages_dhConfig), mtpDataOwner(_data) { +inline MTPmessages_dhConfig::MTPmessages_dhConfig(MTPDmessages_dhConfig *_data) : mtpDataOwner(_data), _type(mtpc_messages_dhConfig) { } inline MTPmessages_dhConfig MTP_messages_dhConfigNotModified(const MTPbytes &_random) { return MTPmessages_dhConfig(new MTPDmessages_dhConfigNotModified(_random)); @@ -21624,16 +21624,16 @@ inline void MTPmessages_sentEncryptedMessage::write(mtpBuffer &to) const { } break; } } -inline MTPmessages_sentEncryptedMessage::MTPmessages_sentEncryptedMessage(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPmessages_sentEncryptedMessage::MTPmessages_sentEncryptedMessage(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_messages_sentEncryptedMessage: setData(new MTPDmessages_sentEncryptedMessage()); break; case mtpc_messages_sentEncryptedFile: setData(new MTPDmessages_sentEncryptedFile()); break; default: throw mtpErrorBadTypeId(type, "MTPmessages_sentEncryptedMessage"); } } -inline MTPmessages_sentEncryptedMessage::MTPmessages_sentEncryptedMessage(MTPDmessages_sentEncryptedMessage *_data) : _type(mtpc_messages_sentEncryptedMessage), mtpDataOwner(_data) { +inline MTPmessages_sentEncryptedMessage::MTPmessages_sentEncryptedMessage(MTPDmessages_sentEncryptedMessage *_data) : mtpDataOwner(_data), _type(mtpc_messages_sentEncryptedMessage) { } -inline MTPmessages_sentEncryptedMessage::MTPmessages_sentEncryptedMessage(MTPDmessages_sentEncryptedFile *_data) : _type(mtpc_messages_sentEncryptedFile), mtpDataOwner(_data) { +inline MTPmessages_sentEncryptedMessage::MTPmessages_sentEncryptedMessage(MTPDmessages_sentEncryptedFile *_data) : mtpDataOwner(_data), _type(mtpc_messages_sentEncryptedFile) { } inline MTPmessages_sentEncryptedMessage MTP_messages_sentEncryptedMessage(MTPint _date) { return MTPmessages_sentEncryptedMessage(new MTPDmessages_sentEncryptedMessage(_date)); @@ -21677,14 +21677,14 @@ inline void MTPinputAudio::write(mtpBuffer &to) const { } break; } } -inline MTPinputAudio::MTPinputAudio(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPinputAudio::MTPinputAudio(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_inputAudioEmpty: break; case mtpc_inputAudio: setData(new MTPDinputAudio()); break; default: throw mtpErrorBadTypeId(type, "MTPinputAudio"); } } -inline MTPinputAudio::MTPinputAudio(MTPDinputAudio *_data) : _type(mtpc_inputAudio), mtpDataOwner(_data) { +inline MTPinputAudio::MTPinputAudio(MTPDinputAudio *_data) : mtpDataOwner(_data), _type(mtpc_inputAudio) { } inline MTPinputAudio MTP_inputAudioEmpty() { return MTPinputAudio(mtpc_inputAudioEmpty); @@ -21728,14 +21728,14 @@ inline void MTPinputDocument::write(mtpBuffer &to) const { } break; } } -inline MTPinputDocument::MTPinputDocument(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPinputDocument::MTPinputDocument(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_inputDocumentEmpty: break; case mtpc_inputDocument: setData(new MTPDinputDocument()); break; default: throw mtpErrorBadTypeId(type, "MTPinputDocument"); } } -inline MTPinputDocument::MTPinputDocument(MTPDinputDocument *_data) : _type(mtpc_inputDocument), mtpDataOwner(_data) { +inline MTPinputDocument::MTPinputDocument(MTPDinputDocument *_data) : mtpDataOwner(_data), _type(mtpc_inputDocument) { } inline MTPinputDocument MTP_inputDocumentEmpty() { return MTPinputDocument(mtpc_inputDocumentEmpty); @@ -21803,16 +21803,16 @@ inline void MTPaudio::write(mtpBuffer &to) const { } break; } } -inline MTPaudio::MTPaudio(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPaudio::MTPaudio(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_audioEmpty: setData(new MTPDaudioEmpty()); break; case mtpc_audio: setData(new MTPDaudio()); break; default: throw mtpErrorBadTypeId(type, "MTPaudio"); } } -inline MTPaudio::MTPaudio(MTPDaudioEmpty *_data) : _type(mtpc_audioEmpty), mtpDataOwner(_data) { +inline MTPaudio::MTPaudio(MTPDaudioEmpty *_data) : mtpDataOwner(_data), _type(mtpc_audioEmpty) { } -inline MTPaudio::MTPaudio(MTPDaudio *_data) : _type(mtpc_audio), mtpDataOwner(_data) { +inline MTPaudio::MTPaudio(MTPDaudio *_data) : mtpDataOwner(_data), _type(mtpc_audio) { } inline MTPaudio MTP_audioEmpty(const MTPlong &_id) { return MTPaudio(new MTPDaudioEmpty(_id)); @@ -21882,16 +21882,16 @@ inline void MTPdocument::write(mtpBuffer &to) const { } break; } } -inline MTPdocument::MTPdocument(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPdocument::MTPdocument(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_documentEmpty: setData(new MTPDdocumentEmpty()); break; case mtpc_document: setData(new MTPDdocument()); break; default: throw mtpErrorBadTypeId(type, "MTPdocument"); } } -inline MTPdocument::MTPdocument(MTPDdocumentEmpty *_data) : _type(mtpc_documentEmpty), mtpDataOwner(_data) { +inline MTPdocument::MTPdocument(MTPDdocumentEmpty *_data) : mtpDataOwner(_data), _type(mtpc_documentEmpty) { } -inline MTPdocument::MTPdocument(MTPDdocument *_data) : _type(mtpc_document), mtpDataOwner(_data) { +inline MTPdocument::MTPdocument(MTPDdocument *_data) : mtpDataOwner(_data), _type(mtpc_document) { } inline MTPdocument MTP_documentEmpty(const MTPlong &_id) { return MTPdocument(new MTPDdocumentEmpty(_id)); @@ -21964,7 +21964,7 @@ inline void MTPnotifyPeer::write(mtpBuffer &to) const { } break; } } -inline MTPnotifyPeer::MTPnotifyPeer(mtpTypeId type) : _type(type), mtpDataOwner(0) { +inline MTPnotifyPeer::MTPnotifyPeer(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_notifyPeer: setData(new MTPDnotifyPeer()); break; case mtpc_notifyUsers: break; @@ -21973,7 +21973,7 @@ inline MTPnotifyPeer::MTPnotifyPeer(mtpTypeId type) : _type(type), mtpDataOwner( default: throw mtpErrorBadTypeId(type, "MTPnotifyPeer"); } } -inline MTPnotifyPeer::MTPnotifyPeer(MTPDnotifyPeer *_data) : _type(mtpc_notifyPeer), mtpDataOwner(_data) { +inline MTPnotifyPeer::MTPnotifyPeer(MTPDnotifyPeer *_data) : mtpDataOwner(_data), _type(mtpc_notifyPeer) { } inline MTPnotifyPeer MTP_notifyPeer(const MTPPeer &_peer) { return MTPnotifyPeer(new MTPDnotifyPeer(_peer)); @@ -22006,51 +22006,23 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP } QString result; - switch (cons) { - case mtpc_messages_chatFull: - result += "\n" + add; - result += " full_chat: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_chatFull" + result + "}"; + switch (mtpTypeId(cons)) { + case mtpc_userProfilePhotoEmpty: + result = " "; + return "{ userProfilePhotoEmpty" + result + "}"; - case mtpc_messages_affectedHistory: + case mtpc_userProfilePhoto: result += "\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_affectedHistory" + result + "}"; + result += " photo_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " photo_small: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " photo_big: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ userProfilePhoto" + result + "}"; - case mtpc_inputFileLocation: + case mtpc_rpc_error: result += "\n" + add; - result += " volume_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " local_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " secret: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputFileLocation" + result + "}"; - - case mtpc_inputVideoFileLocation: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputVideoFileLocation" + result + "}"; - - case mtpc_inputEncryptedFileLocation: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputEncryptedFileLocation" + result + "}"; - - case mtpc_inputAudioFileLocation: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputAudioFileLocation" + result + "}"; - - case mtpc_inputDocumentFileLocation: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputDocumentFileLocation" + result + "}"; + result += " error_code: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " error_message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ rpc_error" + result + "}"; case mtpc_dh_gen_ok: result += "\n" + add; @@ -22073,72 +22045,297 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " new_nonce_hash3: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; return "{ dh_gen_fail" + result + "}"; - case mtpc_chatEmpty: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ chatEmpty" + result + "}"; - - case mtpc_chat: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " participants_count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " left: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " version: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ chat" + result + "}"; - - case mtpc_chatForbidden: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ chatForbidden" + result + "}"; - - case mtpc_geoChat: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " address: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " venue: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " geo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " participants_count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " checked_in: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " version: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ geoChat" + result + "}"; - - case mtpc_inputDocumentEmpty: + case mtpc_inputPeerEmpty: result = " "; - return "{ inputDocumentEmpty" + result + "}"; + return "{ inputPeerEmpty" + result + "}"; - case mtpc_inputDocument: + case mtpc_inputPeerSelf: + result = " "; + return "{ inputPeerSelf" + result + "}"; + + case mtpc_inputPeerContact: + result += "\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ inputPeerContact" + result + "}"; + + case mtpc_inputPeerForeign: + result += "\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputPeerForeign" + result + "}"; + + case mtpc_inputPeerChat: + result += "\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ inputPeerChat" + result + "}"; + + case mtpc_photoEmpty: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ photoEmpty" + result + "}"; + + case mtpc_photo: result += "\n" + add; result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputDocument" + result + "}"; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " caption: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " geo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " sizes: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ photo" + result + "}"; - case mtpc_messages_statedMessage: + case mtpc_p_q_inner_data: result += "\n" + add; - result += " message: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " pq: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " p: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " q: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " new_nonce: " + mtpTextSerialize(from, end, mtpc_int256, level + 1) + ",\n" + add; + return "{ p_q_inner_data" + result + "}"; + + case mtpc_client_DH_inner_data: + result += "\n" + add; + result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " retry_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " g_b: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ client_DH_inner_data" + result + "}"; + + case mtpc_contacts_link: + result += "\n" + add; + result += " my_link: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " foreign_link: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " user: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ contacts_link" + result + "}"; + + case mtpc_inputPhotoCropAuto: + result = " "; + return "{ inputPhotoCropAuto" + result + "}"; + + case mtpc_inputPhotoCrop: + result += "\n" + add; + result += " crop_left: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; + result += " crop_top: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; + result += " crop_width: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; + return "{ inputPhotoCrop" + result + "}"; + + case mtpc_inputFile: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " parts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " md5_checksum: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ inputFile" + result + "}"; + + case mtpc_inputFileBig: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " parts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ inputFileBig" + result + "}"; + + case mtpc_messageActionEmpty: + result = " "; + return "{ messageActionEmpty" + result + "}"; + + case mtpc_messageActionChatCreate: + result += "\n" + add; + result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_int) + ",\n" + add; + return "{ messageActionChatCreate" + result + "}"; + + case mtpc_messageActionChatEditTitle: + result += "\n" + add; + result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ messageActionChatEditTitle" + result + "}"; + + case mtpc_messageActionChatEditPhoto: + result += "\n" + add; + result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messageActionChatEditPhoto" + result + "}"; + + case mtpc_messageActionChatDeletePhoto: + result = " "; + return "{ messageActionChatDeletePhoto" + result + "}"; + + case mtpc_messageActionChatAddUser: + result += "\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messageActionChatAddUser" + result + "}"; + + case mtpc_messageActionChatDeleteUser: + result += "\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messageActionChatDeleteUser" + result + "}"; + + case mtpc_messageActionGeoChatCreate: + result += "\n" + add; + result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " address: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ messageActionGeoChatCreate" + result + "}"; + + case mtpc_messageActionGeoChatCheckin: + result = " "; + return "{ messageActionGeoChatCheckin" + result + "}"; + + case mtpc_inputMessagesFilterEmpty: + result = " "; + return "{ inputMessagesFilterEmpty" + result + "}"; + + case mtpc_inputMessagesFilterPhotos: + result = " "; + return "{ inputMessagesFilterPhotos" + result + "}"; + + case mtpc_inputMessagesFilterVideo: + result = " "; + return "{ inputMessagesFilterVideo" + result + "}"; + + case mtpc_inputMessagesFilterPhotoVideo: + result = " "; + return "{ inputMessagesFilterPhotoVideo" + result + "}"; + + case mtpc_inputMessagesFilterDocument: + result = " "; + return "{ inputMessagesFilterDocument" + result + "}"; + + case mtpc_help_support: + result += "\n" + add; + result += " phone_number: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " user: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ help_support" + result + "}"; + + case mtpc_contactFound: + result += "\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ contactFound" + result + "}"; + + case mtpc_future_salts: + result += "\n" + add; + result += " req_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " now: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " salts: " + mtpTextSerialize(from, end, mtpc_vector, level + 1, mtpc_future_salt) + ",\n" + add; + return "{ future_salts" + result + "}"; + + case mtpc_inputPhotoEmpty: + result = " "; + return "{ inputPhotoEmpty" + result + "}"; + + case mtpc_inputPhoto: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputPhoto" + result + "}"; + + case mtpc_chatParticipant: + result += "\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " inviter_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ chatParticipant" + result + "}"; + + case mtpc_auth_exportedAuthorization: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + return "{ auth_exportedAuthorization" + result + "}"; + + case mtpc_contactStatus: + result += "\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " expires: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ contactStatus" + result + "}"; + + case mtpc_new_session_created: + result += "\n" + add; + result += " first_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " unique_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " server_salt: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ new_session_created" + result + "}"; + + case mtpc_geochats_located: + result += "\n" + add; + result += " results: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_statedMessage" + result + "}"; + return "{ geochats_located" + result + "}"; - case mtpc_messages_statedMessageLink: + case mtpc_updatesTooLong: + result = " "; + return "{ updatesTooLong" + result + "}"; + + case mtpc_updateShortMessage: result += "\n" + add; - result += " message: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " links: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_statedMessageLink" + result + "}"; + return "{ updateShortMessage" + result + "}"; + + case mtpc_updateShortChatMessage: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ updateShortChatMessage" + result + "}"; + + case mtpc_updateShort: + result += "\n" + add; + result += " update: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ updateShort" + result + "}"; + + case mtpc_updatesCombined: + result += "\n" + add; + result += " updates: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq_start: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ updatesCombined" + result + "}"; + + case mtpc_updates: + result += "\n" + add; + result += " updates: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ updates" + result + "}"; + + case mtpc_future_salt: + result += "\n" + add; + result += " valid_since: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " valid_until: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " salt: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ future_salt" + result + "}"; + + case mtpc_server_DH_inner_data: + result += "\n" + add; + result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " g: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " dh_prime: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " g_a: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " server_time: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ server_DH_inner_data" + result + "}"; + + case mtpc_resPQ: + result += "\n" + add; + result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " pq: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " server_public_key_fingerprints: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; + return "{ resPQ" + result + "}"; case mtpc_upload_file: result += "\n" + add; @@ -22229,17 +22426,93 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; return "{ inputMediaDocument" + result + "}"; - case mtpc_contact: + case mtpc_documentEmpty: result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " mutual: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ contact" + result + "}"; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ documentEmpty" + result + "}"; - case mtpc_pong: + case mtpc_document: result += "\n" + add; - result += " msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " ping_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ pong" + result + "}"; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " file_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " mime_type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " size: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " thumb: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ document" + result + "}"; + + case mtpc_inputEncryptedFileEmpty: + result = " "; + return "{ inputEncryptedFileEmpty" + result + "}"; + + case mtpc_inputEncryptedFileUploaded: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " parts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " md5_checksum: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ inputEncryptedFileUploaded" + result + "}"; + + case mtpc_inputEncryptedFile: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputEncryptedFile" + result + "}"; + + case mtpc_inputEncryptedFileBigUploaded: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " parts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ inputEncryptedFileBigUploaded" + result + "}"; + + case mtpc_contacts_found: + result += "\n" + add; + result += " results: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ contacts_found" + result + "}"; + + case mtpc_inputFileLocation: + result += "\n" + add; + result += " volume_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " local_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " secret: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputFileLocation" + result + "}"; + + case mtpc_inputVideoFileLocation: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputVideoFileLocation" + result + "}"; + + case mtpc_inputEncryptedFileLocation: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputEncryptedFileLocation" + result + "}"; + + case mtpc_inputAudioFileLocation: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputAudioFileLocation" + result + "}"; + + case mtpc_inputDocumentFileLocation: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputDocumentFileLocation" + result + "}"; + + case mtpc_chatFull: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " participants: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chat_photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " notify_settings: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ chatFull" + result + "}"; case mtpc_chatParticipantsForbidden: result += "\n" + add; @@ -22254,18 +22527,101 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " version: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; return "{ chatParticipants" + result + "}"; - case mtpc_chatParticipant: - result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " inviter_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ chatParticipant" + result + "}"; - - case mtpc_msgs_all_info: + case mtpc_msgs_ack: result += "\n" + add; result += " msg_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; - result += " info: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ msgs_all_info" + result + "}"; + return "{ msgs_ack" + result + "}"; + + case mtpc_userFull: + result += "\n" + add; + result += " user: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " link: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " profile_photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " notify_settings: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " blocked: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " real_first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " real_last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ userFull" + result + "}"; + + case mtpc_videoEmpty: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ videoEmpty" + result + "}"; + + case mtpc_video: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " caption: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " duration: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " mime_type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " size: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " thumb: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " w: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " h: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ video" + result + "}"; + + case mtpc_messageEmpty: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messageEmpty" + result + "}"; + + case mtpc_message: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " to_id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " out: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " unread: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " media: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ message" + result + "}"; + + case mtpc_messageForwarded: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " fwd_from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " fwd_date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " to_id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " out: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " unread: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " media: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messageForwarded" + result + "}"; + + case mtpc_messageService: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " to_id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " out: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " unread: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " action: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messageService" + result + "}"; + + case mtpc_notifyPeer: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ notifyPeer" + result + "}"; + + case mtpc_notifyUsers: + result = " "; + return "{ notifyUsers" + result + "}"; + + case mtpc_notifyChats: + result = " "; + return "{ notifyChats" + result + "}"; + + case mtpc_notifyAll: + result = " "; + return "{ notifyAll" + result + "}"; case mtpc_messages_messageEmpty: result = " "; @@ -22278,42 +22634,38 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; return "{ messages_message" + result + "}"; - case mtpc_nearestDc: + case mtpc_inputPhoneContact: result += "\n" + add; - result += " country: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " this_dc: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " nearest_dc: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ nearestDc" + result + "}"; + result += " client_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " phone: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ inputPhoneContact" + result + "}"; - case mtpc_contacts_importedContacts: - result += "\n" + add; - result += " imported: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " retry_contacts: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ contacts_importedContacts" + result + "}"; - - case mtpc_auth_exportedAuthorization: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - return "{ auth_exportedAuthorization" + result + "}"; - - case mtpc_inputPhotoCropAuto: + case mtpc_rpc_answer_unknown: result = " "; - return "{ inputPhotoCropAuto" + result + "}"; + return "{ rpc_answer_unknown" + result + "}"; - case mtpc_inputPhotoCrop: - result += "\n" + add; - result += " crop_left: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; - result += " crop_top: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; - result += " crop_width: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; - return "{ inputPhotoCrop" + result + "}"; + case mtpc_rpc_answer_dropped_running: + result = " "; + return "{ rpc_answer_dropped_running" + result + "}"; - case mtpc_contactBlocked: + case mtpc_rpc_answer_dropped: result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ contactBlocked" + result + "}"; + result += " msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " seq_no: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " bytes: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ rpc_answer_dropped" + result + "}"; + + case mtpc_inputVideoEmpty: + result = " "; + return "{ inputVideoEmpty" + result + "}"; + + case mtpc_inputVideo: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputVideo" + result + "}"; case mtpc_decryptedMessageMediaEmpty: result = " "; @@ -22380,372 +22732,40 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " iv: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; return "{ decryptedMessageMediaAudio" + result + "}"; - case mtpc_encryptedChatEmpty: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ encryptedChatEmpty" + result + "}"; - - case mtpc_encryptedChatWaiting: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " admin_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " participant_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ encryptedChatWaiting" + result + "}"; - - case mtpc_encryptedChatRequested: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " admin_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " participant_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " g_a: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - return "{ encryptedChatRequested" + result + "}"; - - case mtpc_encryptedChat: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " admin_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " participant_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " g_a_or_b: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ encryptedChat" + result + "}"; - - case mtpc_encryptedChatDiscarded: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ encryptedChatDiscarded" + result + "}"; - - case mtpc_server_DH_inner_data: - result += "\n" + add; - result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " g: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " dh_prime: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " g_a: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " server_time: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ server_DH_inner_data" + result + "}"; - - case mtpc_bad_msg_notification: - result += "\n" + add; - result += " bad_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " bad_msg_seqno: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " error_code: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ bad_msg_notification" + result + "}"; - - case mtpc_bad_server_salt: - result += "\n" + add; - result += " bad_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " bad_msg_seqno: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " error_code: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " new_server_salt: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ bad_server_salt" + result + "}"; - - case mtpc_dcOption: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " hostname: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " ip_address: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " port: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ dcOption" + result + "}"; - - case mtpc_chatFull: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " participants: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chat_photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " notify_settings: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ chatFull" + result + "}"; - - case mtpc_p_q_inner_data: - result += "\n" + add; - result += " pq: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " p: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " q: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " new_nonce: " + mtpTextSerialize(from, end, mtpc_int256, level + 1) + ",\n" + add; - return "{ p_q_inner_data" + result + "}"; - - case mtpc_msgs_state_req: - result += "\n" + add; - result += " msg_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; - return "{ msgs_state_req" + result + "}"; - - case mtpc_chatLocated: + case mtpc_geoChatMessageEmpty: result += "\n" + add; result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " distance: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ chatLocated" + result + "}"; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ geoChatMessageEmpty" + result + "}"; - case mtpc_future_salt: + case mtpc_geoChatMessage: result += "\n" + add; - result += " valid_since: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " valid_until: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " salt: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ future_salt" + result + "}"; - - case mtpc_decryptedMessage: - result += "\n" + add; - result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " random_bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; result += " media: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ decryptedMessage" + result + "}"; + return "{ geoChatMessage" + result + "}"; - case mtpc_decryptedMessageService: + case mtpc_geoChatMessageService: result += "\n" + add; - result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " random_bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; result += " action: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ decryptedMessageService" + result + "}"; + return "{ geoChatMessageService" + result + "}"; - case mtpc_inputAudioEmpty: + case mtpc_geoPointEmpty: result = " "; - return "{ inputAudioEmpty" + result + "}"; + return "{ geoPointEmpty" + result + "}"; - case mtpc_inputAudio: + case mtpc_geoPoint: result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputAudio" + result + "}"; - - case mtpc_encryptedMessage: - result += "\n" + add; - result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - result += " file: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ encryptedMessage" + result + "}"; - - case mtpc_encryptedMessageService: - result += "\n" + add; - result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - return "{ encryptedMessageService" + result + "}"; - - case mtpc_geochats_messages: - result += "\n" + add; - result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ geochats_messages" + result + "}"; - - case mtpc_geochats_messagesSlice: - result += "\n" + add; - result += " count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ geochats_messagesSlice" + result + "}"; - - case mtpc_updates_differenceEmpty: - result += "\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ updates_differenceEmpty" + result + "}"; - - case mtpc_updates_difference: - result += "\n" + add; - result += " new_messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " new_encrypted_messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " other_updates: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " state: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ updates_difference" + result + "}"; - - case mtpc_updates_differenceSlice: - result += "\n" + add; - result += " new_messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " new_encrypted_messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " other_updates: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " intermediate_state: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ updates_differenceSlice" + result + "}"; - - case mtpc_userEmpty: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ userEmpty" + result + "}"; - - case mtpc_userSelf: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " phone: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " status: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " inactive: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ userSelf" + result + "}"; - - case mtpc_userContact: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " phone: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " status: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ userContact" + result + "}"; - - case mtpc_userRequest: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " phone: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " status: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ userRequest" + result + "}"; - - case mtpc_userForeign: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " status: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ userForeign" + result + "}"; - - case mtpc_userDeleted: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ userDeleted" + result + "}"; - - case mtpc_new_session_created: - result += "\n" + add; - result += " first_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " unique_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " server_salt: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ new_session_created" + result + "}"; - - case mtpc_inputPhotoEmpty: - result = " "; - return "{ inputPhotoEmpty" + result + "}"; - - case mtpc_inputPhoto: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputPhoto" + result + "}"; - - case mtpc_geochats_statedMessage: - result += "\n" + add; - result += " message: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ geochats_statedMessage" + result + "}"; - - case mtpc_inputMessagesFilterEmpty: - result = " "; - return "{ inputMessagesFilterEmpty" + result + "}"; - - case mtpc_inputMessagesFilterPhotos: - result = " "; - return "{ inputMessagesFilterPhotos" + result + "}"; - - case mtpc_inputMessagesFilterVideo: - result = " "; - return "{ inputMessagesFilterVideo" + result + "}"; - - case mtpc_inputMessagesFilterPhotoVideo: - result = " "; - return "{ inputMessagesFilterPhotoVideo" + result + "}"; - - case mtpc_inputMessagesFilterDocument: - result = " "; - return "{ inputMessagesFilterDocument" + result + "}"; - - case mtpc_peerUser: - result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ peerUser" + result + "}"; - - case mtpc_peerChat: - result += "\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ peerChat" + result + "}"; - - case mtpc_notifyPeer: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ notifyPeer" + result + "}"; - - case mtpc_notifyUsers: - result = " "; - return "{ notifyUsers" + result + "}"; - - case mtpc_notifyChats: - result = " "; - return "{ notifyChats" + result + "}"; - - case mtpc_notifyAll: - result = " "; - return "{ notifyAll" + result + "}"; - - case mtpc_messages_sentMessage: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_sentMessage" + result + "}"; - - case mtpc_messages_sentMessageLink: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " links: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_sentMessageLink" + result + "}"; - - case mtpc_inputFile: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " parts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " md5_checksum: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ inputFile" + result + "}"; - - case mtpc_inputFileBig: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " parts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ inputFileBig" + result + "}"; - - case mtpc_inputAppEvent: - result += "\n" + add; - result += " time: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; - result += " type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " peer: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " data: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ inputAppEvent" + result + "}"; - - case mtpc_geochats_located: - result += "\n" + add; - result += " results: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ geochats_located" + result + "}"; + result += " long: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; + result += " lat: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; + return "{ geoPoint" + result + "}"; case mtpc_messages_dialogs: result += "\n" + add; @@ -22764,76 +22784,102 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; return "{ messages_dialogsSlice" + result + "}"; - case mtpc_contacts_myLinkEmpty: + case mtpc_messages_dhConfigNotModified: + result += "\n" + add; + result += " random: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + return "{ messages_dhConfigNotModified" + result + "}"; + + case mtpc_messages_dhConfig: + result += "\n" + add; + result += " g: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " p: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + result += " version: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " random: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + return "{ messages_dhConfig" + result + "}"; + + case mtpc_peerUser: + result += "\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ peerUser" + result + "}"; + + case mtpc_peerChat: + result += "\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ peerChat" + result + "}"; + + case mtpc_server_DH_params_fail: + result += "\n" + add; + result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " new_nonce_hash: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + return "{ server_DH_params_fail" + result + "}"; + + case mtpc_server_DH_params_ok: + result += "\n" + add; + result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " encrypted_answer: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ server_DH_params_ok" + result + "}"; + + case mtpc_inputAppEvent: + result += "\n" + add; + result += " time: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; + result += " type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " peer: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " data: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ inputAppEvent" + result + "}"; + + case mtpc_photos_photo: + result += "\n" + add; + result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ photos_photo" + result + "}"; + + case mtpc_peerNotifyEventsEmpty: result = " "; - return "{ contacts_myLinkEmpty" + result + "}"; + return "{ peerNotifyEventsEmpty" + result + "}"; - case mtpc_contacts_myLinkRequested: - result += "\n" + add; - result += " contact: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ contacts_myLinkRequested" + result + "}"; - - case mtpc_contacts_myLinkContact: + case mtpc_peerNotifyEventsAll: result = " "; - return "{ contacts_myLinkContact" + result + "}"; + return "{ peerNotifyEventsAll" + result + "}"; - case mtpc_inputPeerNotifySettings: + case mtpc_nearestDc: result += "\n" + add; - result += " mute_until: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " sound: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " show_previews: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " events_mask: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ inputPeerNotifySettings" + result + "}"; + result += " country: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " this_dc: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " nearest_dc: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ nearestDc" + result + "}"; - case mtpc_chatPhotoEmpty: - result = " "; - return "{ chatPhotoEmpty" + result + "}"; - - case mtpc_chatPhoto: + case mtpc_wallPaper: result += "\n" + add; - result += " photo_small: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " photo_big: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ chatPhoto" + result + "}"; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " sizes: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " color: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ wallPaper" + result + "}"; - case mtpc_messages_sentEncryptedMessage: + case mtpc_wallPaperSolid: result += "\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_sentEncryptedMessage" + result + "}"; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " bg_color: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " color: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ wallPaperSolid" + result + "}"; - case mtpc_messages_sentEncryptedFile: + case mtpc_geochats_messages: result += "\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " file: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_sentEncryptedFile" + result + "}"; + result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ geochats_messages" + result + "}"; - case mtpc_decryptedMessageActionSetMessageTTL: + case mtpc_geochats_messagesSlice: result += "\n" + add; - result += " ttl_seconds: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ decryptedMessageActionSetMessageTTL" + result + "}"; - - case mtpc_decryptedMessageActionReadMessages: - result += "\n" + add; - result += " random_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; - return "{ decryptedMessageActionReadMessages" + result + "}"; - - case mtpc_decryptedMessageActionDeleteMessages: - result += "\n" + add; - result += " random_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; - return "{ decryptedMessageActionDeleteMessages" + result + "}"; - - case mtpc_decryptedMessageActionScreenshotMessages: - result += "\n" + add; - result += " random_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; - return "{ decryptedMessageActionScreenshotMessages" + result + "}"; - - case mtpc_decryptedMessageActionFlushHistory: - result = " "; - return "{ decryptedMessageActionFlushHistory" + result + "}"; - - case mtpc_decryptedMessageActionNotifyLayer: - result += "\n" + add; - result += " layer: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ decryptedMessageActionNotifyLayer" + result + "}"; + result += " count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ geochats_messagesSlice" + result + "}"; case mtpc_contacts_blocked: result += "\n" + add; @@ -22848,51 +22894,24 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; return "{ contacts_blockedSlice" + result + "}"; - case mtpc_photoEmpty: + case mtpc_messages_statedMessage: result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ photoEmpty" + result + "}"; - - case mtpc_photo: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " caption: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " geo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " sizes: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ photo" + result + "}"; - - case mtpc_decryptedMessageLayer: - result += "\n" + add; - result += " layer: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; result += " message: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ decryptedMessageLayer" + result + "}"; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_statedMessage" + result + "}"; - case mtpc_encryptedFileEmpty: - result = " "; - return "{ encryptedFileEmpty" + result + "}"; - - case mtpc_encryptedFile: + case mtpc_messages_statedMessageLink: result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " size: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ encryptedFile" + result + "}"; - - case mtpc_userFull: - result += "\n" + add; - result += " user: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " link: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " profile_photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " notify_settings: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " blocked: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " real_first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " real_last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ userFull" + result + "}"; + result += " message: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " links: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_statedMessageLink" + result + "}"; case mtpc_messageMediaEmpty: result = " "; @@ -22936,67 +22955,49 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " audio: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; return "{ messageMediaAudio" + result + "}"; - case mtpc_help_inviteText: + case mtpc_inputGeoChat: result += "\n" + add; - result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ help_inviteText" + result + "}"; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputGeoChat" + result + "}"; - case mtpc_contactStatus: - result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " expires: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ contactStatus" + result + "}"; - - case mtpc_messageEmpty: + case mtpc_help_appUpdate: result += "\n" + add; result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messageEmpty" + result + "}"; + result += " critical: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " url: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " text: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ help_appUpdate" + result + "}"; - case mtpc_message: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " to_id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " out: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " unread: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " media: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ message" + result + "}"; + case mtpc_help_noAppUpdate: + result = " "; + return "{ help_noAppUpdate" + result + "}"; - case mtpc_messageForwarded: + case mtpc_updates_differenceEmpty: result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " fwd_from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " fwd_date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " to_id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " out: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " unread: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " media: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messageForwarded" + result + "}"; - - case mtpc_messageService: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " to_id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " out: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " unread: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " action: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messageService" + result + "}"; - - case mtpc_updates_state: - result += "\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " qts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " unread_count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ updates_state" + result + "}"; + return "{ updates_differenceEmpty" + result + "}"; + + case mtpc_updates_difference: + result += "\n" + add; + result += " new_messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " new_encrypted_messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " other_updates: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " state: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ updates_difference" + result + "}"; + + case mtpc_updates_differenceSlice: + result += "\n" + add; + result += " new_messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " new_encrypted_messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " other_updates: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " intermediate_state: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ updates_differenceSlice" + result + "}"; case mtpc_msgs_state_info: result += "\n" + add; @@ -23004,11 +23005,249 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " info: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; return "{ msgs_state_info" + result + "}"; - case mtpc_help_support: + case mtpc_msgs_state_req: result += "\n" + add; - result += " phone_number: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " user: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ help_support" + result + "}"; + result += " msg_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; + return "{ msgs_state_req" + result + "}"; + + case mtpc_msg_resend_req: + result += "\n" + add; + result += " msg_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; + return "{ msg_resend_req" + result + "}"; + + case mtpc_inputDocumentEmpty: + result = " "; + return "{ inputDocumentEmpty" + result + "}"; + + case mtpc_inputDocument: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputDocument" + result + "}"; + + case mtpc_userStatusEmpty: + result = " "; + return "{ userStatusEmpty" + result + "}"; + + case mtpc_userStatusOnline: + result += "\n" + add; + result += " expires: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ userStatusOnline" + result + "}"; + + case mtpc_userStatusOffline: + result += "\n" + add; + result += " was_online: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ userStatusOffline" + result + "}"; + + case mtpc_photos_photos: + result += "\n" + add; + result += " photos: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ photos_photos" + result + "}"; + + case mtpc_photos_photosSlice: + result += "\n" + add; + result += " count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " photos: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ photos_photosSlice" + result + "}"; + + case mtpc_decryptedMessage: + result += "\n" + add; + result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " random_bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " media: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ decryptedMessage" + result + "}"; + + case mtpc_decryptedMessageService: + result += "\n" + add; + result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " random_bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + result += " action: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ decryptedMessageService" + result + "}"; + + case mtpc_contacts_importedContacts: + result += "\n" + add; + result += " imported: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " retry_contacts: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ contacts_importedContacts" + result + "}"; + + case mtpc_fileLocationUnavailable: + result += "\n" + add; + result += " volume_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " local_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " secret: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ fileLocationUnavailable" + result + "}"; + + case mtpc_fileLocation: + result += "\n" + add; + result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " volume_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " local_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " secret: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ fileLocation" + result + "}"; + + case mtpc_photoSizeEmpty: + result += "\n" + add; + result += " type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ photoSizeEmpty" + result + "}"; + + case mtpc_photoSize: + result += "\n" + add; + result += " type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " location: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " w: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " h: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " size: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ photoSize" + result + "}"; + + case mtpc_photoCachedSize: + result += "\n" + add; + result += " type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " location: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " w: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " h: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + return "{ photoCachedSize" + result + "}"; + + case mtpc_msg_detailed_info: + result += "\n" + add; + result += " msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " answer_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " bytes: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " status: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ msg_detailed_info" + result + "}"; + + case mtpc_msg_new_detailed_info: + result += "\n" + add; + result += " answer_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " bytes: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " status: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ msg_new_detailed_info" + result + "}"; + + case mtpc_inputChatPhotoEmpty: + result = " "; + return "{ inputChatPhotoEmpty" + result + "}"; + + case mtpc_inputChatUploadedPhoto: + result += "\n" + add; + result += " file: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " crop: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ inputChatUploadedPhoto" + result + "}"; + + case mtpc_inputChatPhoto: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " crop: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ inputChatPhoto" + result + "}"; + + case mtpc_messages_sentMessage: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_sentMessage" + result + "}"; + + case mtpc_messages_sentMessageLink: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " links: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_sentMessageLink" + result + "}"; + + case mtpc_messages_chatFull: + result += "\n" + add; + result += " full_chat: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_chatFull" + result + "}"; + + case mtpc_geochats_statedMessage: + result += "\n" + add; + result += " message: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ geochats_statedMessage" + result + "}"; + + case mtpc_chatPhotoEmpty: + result = " "; + return "{ chatPhotoEmpty" + result + "}"; + + case mtpc_chatPhoto: + result += "\n" + add; + result += " photo_small: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " photo_big: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ chatPhoto" + result + "}"; + + case mtpc_encryptedMessage: + result += "\n" + add; + result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + result += " file: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ encryptedMessage" + result + "}"; + + case mtpc_encryptedMessageService: + result += "\n" + add; + result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + return "{ encryptedMessageService" + result + "}"; + + case mtpc_destroy_session_ok: + result += "\n" + add; + result += " session_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ destroy_session_ok" + result + "}"; + + case mtpc_destroy_session_none: + result += "\n" + add; + result += " session_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ destroy_session_none" + result + "}"; + + case mtpc_http_wait: + result += "\n" + add; + result += " max_delay: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " wait_after: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " max_wait: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ http_wait" + result + "}"; + + case mtpc_messages_sentEncryptedMessage: + result += "\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_sentEncryptedMessage" + result + "}"; + + case mtpc_messages_sentEncryptedFile: + result += "\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " file: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_sentEncryptedFile" + result + "}"; + + case mtpc_contacts_myLinkEmpty: + result = " "; + return "{ contacts_myLinkEmpty" + result + "}"; + + case mtpc_contacts_myLinkRequested: + result += "\n" + add; + result += " contact: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ contacts_myLinkRequested" + result + "}"; + + case mtpc_contacts_myLinkContact: + result = " "; + return "{ contacts_myLinkContact" + result + "}"; + + case mtpc_inputEncryptedChat: + result += "\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputEncryptedChat" + result + "}"; case mtpc_messages_chats: result += "\n" + add; @@ -23016,28 +23255,219 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; return "{ messages_chats" + result + "}"; - case mtpc_msgs_ack: + case mtpc_encryptedChatEmpty: result += "\n" + add; - result += " msg_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; - return "{ msgs_ack" + result + "}"; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ encryptedChatEmpty" + result + "}"; - case mtpc_messages_dhConfigNotModified: + case mtpc_encryptedChatWaiting: result += "\n" + add; - result += " random: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - return "{ messages_dhConfigNotModified" + result + "}"; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " admin_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " participant_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ encryptedChatWaiting" + result + "}"; - case mtpc_messages_dhConfig: + case mtpc_encryptedChatRequested: result += "\n" + add; - result += " g: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " p: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - result += " version: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " random: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - return "{ messages_dhConfig" + result + "}"; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " admin_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " participant_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " g_a: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + return "{ encryptedChatRequested" + result + "}"; - case mtpc_contactFound: + case mtpc_encryptedChat: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " admin_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " participant_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " g_a_or_b: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ encryptedChat" + result + "}"; + + case mtpc_encryptedChatDiscarded: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ encryptedChatDiscarded" + result + "}"; + + case mtpc_messages_messages: + result += "\n" + add; + result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_messages" + result + "}"; + + case mtpc_messages_messagesSlice: + result += "\n" + add; + result += " count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_messagesSlice" + result + "}"; + + case mtpc_auth_checkedPhone: + result += "\n" + add; + result += " phone_registered: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " phone_invited: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ auth_checkedPhone" + result + "}"; + + case mtpc_contactSuggested: result += "\n" + add; result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ contactFound" + result + "}"; + result += " mutual_contacts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ contactSuggested" + result + "}"; + + case mtpc_contacts_foreignLinkUnknown: + result = " "; + return "{ contacts_foreignLinkUnknown" + result + "}"; + + case mtpc_contacts_foreignLinkRequested: + result += "\n" + add; + result += " has_phone: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ contacts_foreignLinkRequested" + result + "}"; + + case mtpc_contacts_foreignLinkMutual: + result = " "; + return "{ contacts_foreignLinkMutual" + result + "}"; + + case mtpc_inputAudioEmpty: + result = " "; + return "{ inputAudioEmpty" + result + "}"; + + case mtpc_inputAudio: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputAudio" + result + "}"; + + case mtpc_contacts_contacts: + result += "\n" + add; + result += " contacts: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ contacts_contacts" + result + "}"; + + case mtpc_contacts_contactsNotModified: + result = " "; + return "{ contacts_contactsNotModified" + result + "}"; + + case mtpc_chatEmpty: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ chatEmpty" + result + "}"; + + case mtpc_chat: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " participants_count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " left: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " version: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ chat" + result + "}"; + + case mtpc_chatForbidden: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ chatForbidden" + result + "}"; + + case mtpc_geoChat: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " address: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " venue: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " geo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " participants_count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " checked_in: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " version: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ geoChat" + result + "}"; + + case mtpc_pong: + result += "\n" + add; + result += " msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " ping_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ pong" + result + "}"; + + case mtpc_inputPeerNotifyEventsEmpty: + result = " "; + return "{ inputPeerNotifyEventsEmpty" + result + "}"; + + case mtpc_inputPeerNotifyEventsAll: + result = " "; + return "{ inputPeerNotifyEventsAll" + result + "}"; + + case mtpc_inputPeerNotifySettings: + result += "\n" + add; + result += " mute_until: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " sound: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " show_previews: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " events_mask: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ inputPeerNotifySettings" + result + "}"; + + case mtpc_messages_affectedHistory: + result += "\n" + add; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_affectedHistory" + result + "}"; + + case mtpc_inputNotifyPeer: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ inputNotifyPeer" + result + "}"; + + case mtpc_inputNotifyUsers: + result = " "; + return "{ inputNotifyUsers" + result + "}"; + + case mtpc_inputNotifyChats: + result = " "; + return "{ inputNotifyChats" + result + "}"; + + case mtpc_inputNotifyAll: + result = " "; + return "{ inputNotifyAll" + result + "}"; + + case mtpc_inputNotifyGeoChatPeer: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ inputNotifyGeoChatPeer" + result + "}"; + + case mtpc_bad_msg_notification: + result += "\n" + add; + result += " bad_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " bad_msg_seqno: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " error_code: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ bad_msg_notification" + result + "}"; + + case mtpc_bad_server_salt: + result += "\n" + add; + result += " bad_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " bad_msg_seqno: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " error_code: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " new_server_salt: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ bad_server_salt" + result + "}"; + + case mtpc_config: + result += "\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " test_mode: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " this_dc: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " dc_options: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chat_size_max: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " broadcast_size_max: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ config" + result + "}"; case mtpc_inputGeoPointEmpty: result = " "; @@ -23068,26 +23498,6 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; return "{ inputUserForeign" + result + "}"; - case mtpc_rpc_error: - result += "\n" + add; - result += " error_code: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " error_message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ rpc_error" + result + "}"; - - case mtpc_contacts_suggested: - result += "\n" + add; - result += " results: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ contacts_suggested" + result + "}"; - - case mtpc_client_DH_inner_data: - result += "\n" + add; - result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " retry_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " g_b: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ client_DH_inner_data" + result + "}"; - case mtpc_dialog: result += "\n" + add; result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; @@ -23096,338 +23506,19 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " notify_settings: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; return "{ dialog" + result + "}"; - case mtpc_inputEncryptedFileEmpty: - result = " "; - return "{ inputEncryptedFileEmpty" + result + "}"; - - case mtpc_inputEncryptedFileUploaded: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " parts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " md5_checksum: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ inputEncryptedFileUploaded" + result + "}"; - - case mtpc_inputEncryptedFile: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputEncryptedFile" + result + "}"; - - case mtpc_inputEncryptedFileBigUploaded: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " parts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ inputEncryptedFileBigUploaded" + result + "}"; - - case mtpc_auth_checkedPhone: - result += "\n" + add; - result += " phone_registered: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " phone_invited: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ auth_checkedPhone" + result + "}"; - - case mtpc_contactSuggested: + case mtpc_importedContact: result += "\n" + add; result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " mutual_contacts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ contactSuggested" + result + "}"; + result += " client_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ importedContact" + result + "}"; - case mtpc_photoSizeEmpty: - result += "\n" + add; - result += " type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ photoSizeEmpty" + result + "}"; - - case mtpc_photoSize: - result += "\n" + add; - result += " type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " location: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " w: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " h: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " size: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ photoSize" + result + "}"; - - case mtpc_photoCachedSize: - result += "\n" + add; - result += " type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " location: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " w: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " h: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - return "{ photoCachedSize" + result + "}"; - - case mtpc_rpc_answer_unknown: - result = " "; - return "{ rpc_answer_unknown" + result + "}"; - - case mtpc_rpc_answer_dropped_running: - result = " "; - return "{ rpc_answer_dropped_running" + result + "}"; - - case mtpc_rpc_answer_dropped: - result += "\n" + add; - result += " msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " seq_no: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " bytes: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ rpc_answer_dropped" + result + "}"; - - case mtpc_inputNotifyPeer: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ inputNotifyPeer" + result + "}"; - - case mtpc_inputNotifyUsers: - result = " "; - return "{ inputNotifyUsers" + result + "}"; - - case mtpc_inputNotifyChats: - result = " "; - return "{ inputNotifyChats" + result + "}"; - - case mtpc_inputNotifyAll: - result = " "; - return "{ inputNotifyAll" + result + "}"; - - case mtpc_inputNotifyGeoChatPeer: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ inputNotifyGeoChatPeer" + result + "}"; - - case mtpc_geoPointEmpty: - result = " "; - return "{ geoPointEmpty" + result + "}"; - - case mtpc_geoPoint: - result += "\n" + add; - result += " long: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; - result += " lat: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; - return "{ geoPoint" + result + "}"; - - case mtpc_photos_photo: - result += "\n" + add; - result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ photos_photo" + result + "}"; - - case mtpc_userStatusEmpty: - result = " "; - return "{ userStatusEmpty" + result + "}"; - - case mtpc_userStatusOnline: - result += "\n" + add; - result += " expires: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ userStatusOnline" + result + "}"; - - case mtpc_userStatusOffline: - result += "\n" + add; - result += " was_online: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ userStatusOffline" + result + "}"; - - case mtpc_contacts_found: - result += "\n" + add; - result += " results: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ contacts_found" + result + "}"; - - case mtpc_contacts_contacts: - result += "\n" + add; - result += " contacts: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ contacts_contacts" + result + "}"; - - case mtpc_contacts_contactsNotModified: - result = " "; - return "{ contacts_contactsNotModified" + result + "}"; - - case mtpc_userProfilePhotoEmpty: - result = " "; - return "{ userProfilePhotoEmpty" + result + "}"; - - case mtpc_userProfilePhoto: - result += "\n" + add; - result += " photo_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " photo_small: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " photo_big: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ userProfilePhoto" + result + "}"; - - case mtpc_messageActionEmpty: - result = " "; - return "{ messageActionEmpty" + result + "}"; - - case mtpc_messageActionChatCreate: - result += "\n" + add; - result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_int) + ",\n" + add; - return "{ messageActionChatCreate" + result + "}"; - - case mtpc_messageActionChatEditTitle: - result += "\n" + add; - result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ messageActionChatEditTitle" + result + "}"; - - case mtpc_messageActionChatEditPhoto: - result += "\n" + add; - result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messageActionChatEditPhoto" + result + "}"; - - case mtpc_messageActionChatDeletePhoto: - result = " "; - return "{ messageActionChatDeletePhoto" + result + "}"; - - case mtpc_messageActionChatAddUser: - result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messageActionChatAddUser" + result + "}"; - - case mtpc_messageActionChatDeleteUser: - result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messageActionChatDeleteUser" + result + "}"; - - case mtpc_messageActionGeoChatCreate: - result += "\n" + add; - result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " address: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ messageActionGeoChatCreate" + result + "}"; - - case mtpc_messageActionGeoChatCheckin: - result = " "; - return "{ messageActionGeoChatCheckin" + result + "}"; - - case mtpc_messages_statedMessages: - result += "\n" + add; - result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_statedMessages" + result + "}"; - - case mtpc_messages_statedMessagesLinks: - result += "\n" + add; - result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " links: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_statedMessagesLinks" + result + "}"; - - case mtpc_wallPaper: + case mtpc_dcOption: result += "\n" + add; result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " sizes: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " color: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ wallPaper" + result + "}"; - - case mtpc_wallPaperSolid: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " bg_color: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " color: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ wallPaperSolid" + result + "}"; - - case mtpc_inputEncryptedChat: - result += "\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputEncryptedChat" + result + "}"; - - case mtpc_updatesTooLong: - result = " "; - return "{ updatesTooLong" + result + "}"; - - case mtpc_updateShortMessage: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ updateShortMessage" + result + "}"; - - case mtpc_updateShortChatMessage: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ updateShortChatMessage" + result + "}"; - - case mtpc_updateShort: - result += "\n" + add; - result += " update: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ updateShort" + result + "}"; - - case mtpc_updatesCombined: - result += "\n" + add; - result += " updates: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq_start: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ updatesCombined" + result + "}"; - - case mtpc_updates: - result += "\n" + add; - result += " updates: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ updates" + result + "}"; - - case mtpc_videoEmpty: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ videoEmpty" + result + "}"; - - case mtpc_video: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " caption: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " duration: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " mime_type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " size: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " thumb: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " w: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " h: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ video" + result + "}"; - - case mtpc_inputPeerNotifyEventsEmpty: - result = " "; - return "{ inputPeerNotifyEventsEmpty" + result + "}"; - - case mtpc_inputPeerNotifyEventsAll: - result = " "; - return "{ inputPeerNotifyEventsAll" + result + "}"; - - case mtpc_messages_messages: - result += "\n" + add; - result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_messages" + result + "}"; - - case mtpc_messages_messagesSlice: - result += "\n" + add; - result += " count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_messagesSlice" + result + "}"; + result += " hostname: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " ip_address: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " port: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ dcOption" + result + "}"; case mtpc_updateNewMessage: result += "\n" + add; @@ -23583,6 +23674,170 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " notify_settings: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; return "{ updateNotifySettings" + result + "}"; + case mtpc_decryptedMessageActionSetMessageTTL: + result += "\n" + add; + result += " ttl_seconds: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ decryptedMessageActionSetMessageTTL" + result + "}"; + + case mtpc_decryptedMessageActionReadMessages: + result += "\n" + add; + result += " random_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; + return "{ decryptedMessageActionReadMessages" + result + "}"; + + case mtpc_decryptedMessageActionDeleteMessages: + result += "\n" + add; + result += " random_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; + return "{ decryptedMessageActionDeleteMessages" + result + "}"; + + case mtpc_decryptedMessageActionScreenshotMessages: + result += "\n" + add; + result += " random_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; + return "{ decryptedMessageActionScreenshotMessages" + result + "}"; + + case mtpc_decryptedMessageActionFlushHistory: + result = " "; + return "{ decryptedMessageActionFlushHistory" + result + "}"; + + case mtpc_decryptedMessageActionNotifyLayer: + result += "\n" + add; + result += " layer: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ decryptedMessageActionNotifyLayer" + result + "}"; + + case mtpc_peerNotifySettingsEmpty: + result = " "; + return "{ peerNotifySettingsEmpty" + result + "}"; + + case mtpc_peerNotifySettings: + result += "\n" + add; + result += " mute_until: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " sound: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " show_previews: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " events_mask: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ peerNotifySettings" + result + "}"; + + case mtpc_userEmpty: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ userEmpty" + result + "}"; + + case mtpc_userSelf: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " phone: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " status: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " inactive: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ userSelf" + result + "}"; + + case mtpc_userContact: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " phone: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " status: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ userContact" + result + "}"; + + case mtpc_userRequest: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " phone: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " status: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ userRequest" + result + "}"; + + case mtpc_userForeign: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " status: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ userForeign" + result + "}"; + + case mtpc_userDeleted: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ userDeleted" + result + "}"; + + case mtpc_contacts_suggested: + result += "\n" + add; + result += " results: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ contacts_suggested" + result + "}"; + + case mtpc_auth_authorization: + result += "\n" + add; + result += " expires: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " user: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ auth_authorization" + result + "}"; + + case mtpc_messages_chat: + result += "\n" + add; + result += " chat: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_chat" + result + "}"; + + case mtpc_auth_sentCode: + result += "\n" + add; + result += " phone_registered: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " phone_code_hash: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " send_call_timeout: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " is_password: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ auth_sentCode" + result + "}"; + + case mtpc_audioEmpty: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ audioEmpty" + result + "}"; + + case mtpc_audio: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " duration: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " mime_type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " size: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ audio" + result + "}"; + + case mtpc_messages_statedMessages: + result += "\n" + add; + result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_statedMessages" + result + "}"; + + case mtpc_messages_statedMessagesLinks: + result += "\n" + add; + result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " links: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_statedMessagesLinks" + result + "}"; + + case mtpc_contactBlocked: + result += "\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ contactBlocked" + result + "}"; + case mtpc_storage_fileUnknown: result = " "; return "{ storage_fileUnknown" + result + "}"; @@ -23623,551 +23878,62 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result = " "; return "{ storage_fileWebp" + result + "}"; - case mtpc_documentEmpty: + case mtpc_help_inviteText: result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ documentEmpty" + result + "}"; - - case mtpc_document: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " file_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " mime_type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " size: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " thumb: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ document" + result + "}"; - - case mtpc_resPQ: - result += "\n" + add; - result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " pq: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " server_public_key_fingerprints: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; - return "{ resPQ" + result + "}"; - - case mtpc_audioEmpty: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ audioEmpty" + result + "}"; - - case mtpc_audio: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " duration: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " mime_type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " size: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ audio" + result + "}"; - - case mtpc_fileLocationUnavailable: - result += "\n" + add; - result += " volume_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " local_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " secret: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ fileLocationUnavailable" + result + "}"; - - case mtpc_fileLocation: - result += "\n" + add; - result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " volume_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " local_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " secret: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ fileLocation" + result + "}"; - - case mtpc_contacts_foreignLinkUnknown: - result = " "; - return "{ contacts_foreignLinkUnknown" + result + "}"; - - case mtpc_contacts_foreignLinkRequested: - result += "\n" + add; - result += " has_phone: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ contacts_foreignLinkRequested" + result + "}"; - - case mtpc_contacts_foreignLinkMutual: - result = " "; - return "{ contacts_foreignLinkMutual" + result + "}"; - - case mtpc_inputVideoEmpty: - result = " "; - return "{ inputVideoEmpty" + result + "}"; - - case mtpc_inputVideo: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputVideo" + result + "}"; - - case mtpc_peerNotifySettingsEmpty: - result = " "; - return "{ peerNotifySettingsEmpty" + result + "}"; - - case mtpc_peerNotifySettings: - result += "\n" + add; - result += " mute_until: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " sound: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " show_previews: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " events_mask: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ peerNotifySettings" + result + "}"; - - case mtpc_auth_sentCode: - result += "\n" + add; - result += " phone_registered: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " phone_code_hash: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " send_call_timeout: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " is_password: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ auth_sentCode" + result + "}"; - - case mtpc_inputGeoChat: - result += "\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputGeoChat" + result + "}"; - - case mtpc_destroy_session_ok: - result += "\n" + add; - result += " session_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ destroy_session_ok" + result + "}"; - - case mtpc_destroy_session_none: - result += "\n" + add; - result += " session_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ destroy_session_none" + result + "}"; - - case mtpc_server_DH_params_fail: - result += "\n" + add; - result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " new_nonce_hash: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - return "{ server_DH_params_fail" + result + "}"; - - case mtpc_server_DH_params_ok: - result += "\n" + add; - result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " encrypted_answer: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ server_DH_params_ok" + result + "}"; - - case mtpc_auth_authorization: - result += "\n" + add; - result += " expires: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " user: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ auth_authorization" + result + "}"; - - case mtpc_future_salts: - result += "\n" + add; - result += " req_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " now: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " salts: " + mtpTextSerialize(from, end, mtpc_vector, level + 1, mtpc_future_salt) + ",\n" + add; - return "{ future_salts" + result + "}"; - - case mtpc_geoChatMessageEmpty: - result += "\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ geoChatMessageEmpty" + result + "}"; - - case mtpc_geoChatMessage: - result += "\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " media: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ geoChatMessage" + result + "}"; + return "{ help_inviteText" + result + "}"; - case mtpc_geoChatMessageService: + case mtpc_chatLocated: result += "\n" + add; result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " action: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ geoChatMessageService" + result + "}"; + result += " distance: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ chatLocated" + result + "}"; - case mtpc_help_appUpdate: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " critical: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " url: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " text: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ help_appUpdate" + result + "}"; - - case mtpc_help_noAppUpdate: - result = " "; - return "{ help_noAppUpdate" + result + "}"; - - case mtpc_peerNotifyEventsEmpty: - result = " "; - return "{ peerNotifyEventsEmpty" + result + "}"; - - case mtpc_peerNotifyEventsAll: - result = " "; - return "{ peerNotifyEventsAll" + result + "}"; - - case mtpc_inputPeerEmpty: - result = " "; - return "{ inputPeerEmpty" + result + "}"; - - case mtpc_inputPeerSelf: - result = " "; - return "{ inputPeerSelf" + result + "}"; - - case mtpc_inputPeerContact: + case mtpc_contact: result += "\n" + add; result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ inputPeerContact" + result + "}"; + result += " mutual: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ contact" + result + "}"; - case mtpc_inputPeerForeign: + case mtpc_decryptedMessageLayer: result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputPeerForeign" + result + "}"; + result += " layer: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " message: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ decryptedMessageLayer" + result + "}"; - case mtpc_inputPeerChat: - result += "\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ inputPeerChat" + result + "}"; - - case mtpc_inputChatPhotoEmpty: - result = " "; - return "{ inputChatPhotoEmpty" + result + "}"; - - case mtpc_inputChatUploadedPhoto: - result += "\n" + add; - result += " file: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " crop: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ inputChatUploadedPhoto" + result + "}"; - - case mtpc_inputChatPhoto: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " crop: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ inputChatPhoto" + result + "}"; - - case mtpc_messages_chat: - result += "\n" + add; - result += " chat: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_chat" + result + "}"; - - case mtpc_importedContact: - result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " client_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ importedContact" + result + "}"; - - case mtpc_inputPhoneContact: - result += "\n" + add; - result += " client_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " phone: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ inputPhoneContact" + result + "}"; - - case mtpc_http_wait: - result += "\n" + add; - result += " max_delay: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " wait_after: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " max_wait: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ http_wait" + result + "}"; - - case mtpc_contacts_link: - result += "\n" + add; - result += " my_link: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " foreign_link: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " user: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ contacts_link" + result + "}"; - - case mtpc_msg_resend_req: - result += "\n" + add; - result += " msg_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; - return "{ msg_resend_req" + result + "}"; - - case mtpc_config: - result += "\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " test_mode: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " this_dc: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " dc_options: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chat_size_max: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " broadcast_size_max: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ config" + result + "}"; - - case mtpc_msg_detailed_info: - result += "\n" + add; - result += " msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " answer_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " bytes: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " status: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ msg_detailed_info" + result + "}"; - - case mtpc_msg_new_detailed_info: - result += "\n" + add; - result += " answer_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " bytes: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " status: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ msg_new_detailed_info" + result + "}"; - - case mtpc_photos_photos: - result += "\n" + add; - result += " photos: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ photos_photos" + result + "}"; - - case mtpc_photos_photosSlice: - result += "\n" + add; - result += " count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " photos: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ photos_photosSlice" + result + "}"; - - case mtpc_messages_readHistory: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_readHistory" + result + "}"; - - case mtpc_messages_deleteHistory: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_deleteHistory" + result + "}"; - - case mtpc_set_client_DH_params: - result += "\n" + add; - result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " encrypted_data: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ set_client_DH_params" + result + "}"; - - case mtpc_messages_getDhConfig: - result += "\n" + add; - result += " version: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " random_length: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_getDhConfig" + result + "}"; - - case mtpc_geochats_getRecents: - result += "\n" + add; - result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ geochats_getRecents" + result + "}"; - - case mtpc_geochats_search: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " q: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " filter: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " min_date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " max_date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ geochats_search" + result + "}"; - - case mtpc_geochats_getHistory: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ geochats_getHistory" + result + "}"; - - case mtpc_messages_receivedQueue: - result += "\n" + add; - result += " max_qts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_receivedQueue" + result + "}"; - - case mtpc_messages_sendMedia: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " media: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ messages_sendMedia" + result + "}"; - - case mtpc_messages_editChatTitle: - result += "\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ messages_editChatTitle" + result + "}"; - - case mtpc_messages_editChatPhoto: - result += "\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_editChatPhoto" + result + "}"; - - case mtpc_messages_addChatUser: - result += "\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " fwd_limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_addChatUser" + result + "}"; - - case mtpc_messages_deleteChatUser: - result += "\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_deleteChatUser" + result + "}"; - - case mtpc_messages_createChat: - result += "\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ messages_createChat" + result + "}"; - - case mtpc_messages_forwardMessage: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ messages_forwardMessage" + result + "}"; - - case mtpc_users_getFullUser: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ users_getFullUser" + result + "}"; - - case mtpc_contacts_getBlocked: - result += "\n" + add; - result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ contacts_getBlocked" + result + "}"; - - case mtpc_messages_getChats: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_int) + ",\n" + add; - return "{ messages_getChats" + result + "}"; - - case mtpc_contacts_getSuggested: - result += "\n" + add; - result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ contacts_getSuggested" + result + "}"; - - case mtpc_auth_checkPhone: - result += "\n" + add; - result += " phone_number: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ auth_checkPhone" + result + "}"; - - case mtpc_contacts_getContacts: - result += "\n" + add; - result += " hash: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ contacts_getContacts" + result + "}"; - - case mtpc_rpc_drop_answer: - result += "\n" + add; - result += " req_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ rpc_drop_answer" + result + "}"; - - case mtpc_contacts_importContacts: - result += "\n" + add; - result += " contacts: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " replace: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ contacts_importContacts" + result + "}"; - - case mtpc_auth_exportAuthorization: - result += "\n" + add; - result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ auth_exportAuthorization" + result + "}"; - - case mtpc_auth_sendCode: - result += "\n" + add; - result += " phone_number: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " sms_type: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " api_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " api_hash: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " lang_code: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ auth_sendCode" + result + "}"; - - case mtpc_photos_uploadProfilePhoto: - result += "\n" + add; - result += " file: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " caption: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " geo_point: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " crop: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ photos_uploadProfilePhoto" + result + "}"; - - case mtpc_upload_getFile: - result += "\n" + add; - result += " location: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ upload_getFile" + result + "}"; - - case mtpc_contacts_search: - result += "\n" + add; - result += " q: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ contacts_search" + result + "}"; - - case mtpc_help_getNearestDc: - result = " "; - return "{ help_getNearestDc" + result + "}"; - - case mtpc_messages_requestEncryption: - result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " random_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " g_a: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - return "{ messages_requestEncryption" + result + "}"; - - case mtpc_messages_acceptEncryption: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " g_b: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ messages_acceptEncryption" + result + "}"; - - case mtpc_users_getUsers: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ users_getUsers" + result + "}"; - - case mtpc_messages_forwardMessages: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " id: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_int) + ",\n" + add; - return "{ messages_forwardMessages" + result + "}"; - - case mtpc_messages_sendBroadcast: - result += "\n" + add; - result += " contacts: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " media: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_sendBroadcast" + result + "}"; - - case mtpc_photos_getUserPhotos: - result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ photos_getUserPhotos" + result + "}"; - - case mtpc_updates_getDifference: + case mtpc_updates_state: result += "\n" + add; result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; result += " qts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ updates_getDifference" + result + "}"; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " unread_count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ updates_state" + result + "}"; - case mtpc_account_updateProfile: - result += "\n" + add; - result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ account_updateProfile" + result + "}"; - - case mtpc_account_getWallPapers: + case mtpc_encryptedFileEmpty: result = " "; - return "{ account_getWallPapers" + result + "}"; + return "{ encryptedFileEmpty" + result + "}"; + + case mtpc_encryptedFile: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " size: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ encryptedFile" + result + "}"; + + case mtpc_msgs_all_info: + result += "\n" + add; + result += " msg_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; + result += " info: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ msgs_all_info" + result + "}"; + + case mtpc_photos_updateProfilePhoto: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " crop: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ photos_updateProfilePhoto" + result + "}"; case mtpc_messages_getMessages: result += "\n" + add; @@ -24194,15 +23960,55 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; return "{ messages_search" + result + "}"; - case mtpc_req_DH_params: + case mtpc_set_client_DH_params: result += "\n" + add; result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " p: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " q: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " public_key_fingerprint: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; result += " encrypted_data: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ req_DH_params" + result + "}"; + return "{ set_client_DH_params" + result + "}"; + + case mtpc_contacts_getStatuses: + result = " "; + return "{ contacts_getStatuses" + result + "}"; + + case mtpc_auth_checkPhone: + result += "\n" + add; + result += " phone_number: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ auth_checkPhone" + result + "}"; + + case mtpc_help_getAppUpdate: + result += "\n" + add; + result += " device_model: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " system_version: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " app_version: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " lang_code: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ help_getAppUpdate" + result + "}"; + + case mtpc_updates_getDifference: + result += "\n" + add; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " qts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ updates_getDifference" + result + "}"; + + case mtpc_help_getInviteText: + result += "\n" + add; + result += " lang_code: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ help_getInviteText" + result + "}"; + + case mtpc_users_getFullUser: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ users_getFullUser" + result + "}"; + + case mtpc_updates_getState: + result = " "; + return "{ updates_getState" + result + "}"; + + case mtpc_contacts_getContacts: + result += "\n" + add; + result += " hash: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ contacts_getContacts" + result + "}"; case mtpc_geochats_checkin: result += "\n" + add; @@ -24244,55 +24050,66 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " venue: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; return "{ geochats_createGeoChat" + result + "}"; - case mtpc_req_pq: + case mtpc_ping: result += "\n" + add; - result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - return "{ req_pq" + result + "}"; + result += " ping_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ ping" + result + "}"; - case mtpc_invokeAfterMsg: + case mtpc_ping_delay_disconnect: result += "\n" + add; - result += " msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " query: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ invokeAfterMsg" + result + "}"; + result += " ping_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " disconnect_delay: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ ping_delay_disconnect" + result + "}"; - case mtpc_invokeAfterMsgs: - result += "\n" + add; - result += " msg_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; - result += " query: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ invokeAfterMsgs" + result + "}"; - - case mtpc_initConnection: - result += "\n" + add; - result += " api_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " device_model: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " system_version: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " app_version: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " lang_code: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " query: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ initConnection" + result + "}"; - - case mtpc_messages_sendMessage: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ messages_sendMessage" + result + "}"; - - case mtpc_contacts_getStatuses: + case mtpc_help_getSupport: result = " "; - return "{ contacts_getStatuses" + result + "}"; + return "{ help_getSupport" + result + "}"; - case mtpc_geochats_getLocated: - result += "\n" + add; - result += " geo_point: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " radius: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ geochats_getLocated" + result + "}"; - - case mtpc_account_getNotifySettings: + case mtpc_messages_readHistory: result += "\n" + add; result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ account_getNotifySettings" + result + "}"; + result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_readHistory" + result + "}"; + + case mtpc_messages_deleteHistory: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_deleteHistory" + result + "}"; + + case mtpc_messages_deleteMessages: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_int) + ",\n" + add; + return "{ messages_deleteMessages" + result + "}"; + + case mtpc_messages_restoreMessages: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_int) + ",\n" + add; + return "{ messages_restoreMessages" + result + "}"; + + case mtpc_messages_receivedMessages: + result += "\n" + add; + result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_receivedMessages" + result + "}"; + + case mtpc_users_getUsers: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ users_getUsers" + result + "}"; + + case mtpc_get_future_salts: + result += "\n" + add; + result += " num: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ get_future_salts" + result + "}"; + + case mtpc_photos_getUserPhotos: + result += "\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ photos_getUserPhotos" + result + "}"; case mtpc_register_saveDeveloperInfo: result += "\n" + add; @@ -24419,6 +24236,35 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; return "{ upload_saveBigFilePart" + result + "}"; + case mtpc_req_pq: + result += "\n" + add; + result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + return "{ req_pq" + result + "}"; + + case mtpc_auth_exportAuthorization: + result += "\n" + add; + result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ auth_exportAuthorization" + result + "}"; + + case mtpc_contacts_importContacts: + result += "\n" + add; + result += " contacts: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " replace: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ contacts_importContacts" + result + "}"; + + case mtpc_rpc_drop_answer: + result += "\n" + add; + result += " req_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ rpc_drop_answer" + result + "}"; + + case mtpc_help_getConfig: + result = " "; + return "{ help_getConfig" + result + "}"; + + case mtpc_help_getNearestDc: + result = " "; + return "{ help_getNearestDc" + result + "}"; + case mtpc_messages_getDialogs: result += "\n" + add; result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; @@ -24426,10 +24272,29 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; return "{ messages_getDialogs" + result + "}"; - case mtpc_destroy_session: + case mtpc_account_getNotifySettings: result += "\n" + add; - result += " session_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ destroy_session" + result + "}"; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ account_getNotifySettings" + result + "}"; + + case mtpc_geochats_getLocated: + result += "\n" + add; + result += " geo_point: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " radius: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ geochats_getLocated" + result + "}"; + + case mtpc_messages_getDhConfig: + result += "\n" + add; + result += " version: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " random_length: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_getDhConfig" + result + "}"; + + case mtpc_account_updateProfile: + result += "\n" + add; + result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ account_updateProfile" + result + "}"; case mtpc_messages_getFullChat: result += "\n" + add; @@ -24441,41 +24306,20 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; return "{ geochats_getFullChat" + result + "}"; - case mtpc_messages_sendEncrypted: + case mtpc_req_DH_params: result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " data: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - return "{ messages_sendEncrypted" + result + "}"; + result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " p: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " q: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " public_key_fingerprint: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " encrypted_data: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ req_DH_params" + result + "}"; - case mtpc_messages_sendEncryptedFile: + case mtpc_contacts_getSuggested: result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " data: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - result += " file: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_sendEncryptedFile" + result + "}"; - - case mtpc_messages_sendEncryptedService: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " data: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - return "{ messages_sendEncryptedService" + result + "}"; - - case mtpc_get_future_salts: - result += "\n" + add; - result += " num: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ get_future_salts" + result + "}"; - - case mtpc_help_getInviteText: - result += "\n" + add; - result += " lang_code: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ help_getInviteText" + result + "}"; - - case mtpc_help_getConfig: - result = " "; - return "{ help_getConfig" + result + "}"; + result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ contacts_getSuggested" + result + "}"; case mtpc_auth_signUp: result += "\n" + add; @@ -24499,58 +24343,214 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; return "{ auth_importAuthorization" + result + "}"; - case mtpc_photos_updateProfilePhoto: + case mtpc_upload_getFile: result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " location: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ upload_getFile" + result + "}"; + + case mtpc_photos_uploadProfilePhoto: + result += "\n" + add; + result += " file: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " caption: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " geo_point: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; result += " crop: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ photos_updateProfilePhoto" + result + "}"; + return "{ photos_uploadProfilePhoto" + result + "}"; + + case mtpc_auth_sendCode: + result += "\n" + add; + result += " phone_number: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " sms_type: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " api_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " api_hash: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " lang_code: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ auth_sendCode" + result + "}"; + + case mtpc_messages_forwardMessages: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " id: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_int) + ",\n" + add; + return "{ messages_forwardMessages" + result + "}"; + + case mtpc_messages_sendBroadcast: + result += "\n" + add; + result += " contacts: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " media: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_sendBroadcast" + result + "}"; + + case mtpc_messages_receivedQueue: + result += "\n" + add; + result += " max_qts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_receivedQueue" + result + "}"; + + case mtpc_contacts_search: + result += "\n" + add; + result += " q: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ contacts_search" + result + "}"; + + case mtpc_messages_sendMessage: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ messages_sendMessage" + result + "}"; + + case mtpc_geochats_getRecents: + result += "\n" + add; + result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ geochats_getRecents" + result + "}"; + + case mtpc_geochats_search: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " q: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " filter: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " min_date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " max_date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ geochats_search" + result + "}"; + + case mtpc_geochats_getHistory: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ geochats_getHistory" + result + "}"; + + case mtpc_destroy_session: + result += "\n" + add; + result += " session_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ destroy_session" + result + "}"; + + case mtpc_account_getWallPapers: + result = " "; + return "{ account_getWallPapers" + result + "}"; + + case mtpc_messages_sendEncrypted: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " data: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + return "{ messages_sendEncrypted" + result + "}"; + + case mtpc_messages_sendEncryptedFile: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " data: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + result += " file: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_sendEncryptedFile" + result + "}"; + + case mtpc_messages_sendEncryptedService: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " data: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + return "{ messages_sendEncryptedService" + result + "}"; + + case mtpc_contacts_getBlocked: + result += "\n" + add; + result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ contacts_getBlocked" + result + "}"; case mtpc_contacts_deleteContact: result += "\n" + add; result += " id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; return "{ contacts_deleteContact" + result + "}"; - case mtpc_messages_deleteMessages: + case mtpc_invokeAfterMsg: result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_int) + ",\n" + add; - return "{ messages_deleteMessages" + result + "}"; + result += " msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " query: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ invokeAfterMsg" + result + "}"; - case mtpc_messages_restoreMessages: + case mtpc_invokeAfterMsgs: result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_int) + ",\n" + add; - return "{ messages_restoreMessages" + result + "}"; + result += " msg_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; + result += " query: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ invokeAfterMsgs" + result + "}"; - case mtpc_messages_receivedMessages: - result += "\n" + add; - result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_receivedMessages" + result + "}"; - - case mtpc_help_getAppUpdate: + case mtpc_initConnection: result += "\n" + add; + result += " api_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; result += " device_model: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; result += " system_version: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; result += " app_version: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; result += " lang_code: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ help_getAppUpdate" + result + "}"; + result += " query: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ initConnection" + result + "}"; - case mtpc_updates_getState: - result = " "; - return "{ updates_getState" + result + "}"; - - case mtpc_help_getSupport: - result = " "; - return "{ help_getSupport" + result + "}"; - - case mtpc_ping: + case mtpc_messages_getChats: result += "\n" + add; - result += " ping_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ ping" + result + "}"; + result += " id: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_int) + ",\n" + add; + return "{ messages_getChats" + result + "}"; - case mtpc_ping_delay_disconnect: + case mtpc_messages_sendMedia: result += "\n" + add; - result += " ping_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " disconnect_delay: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ ping_delay_disconnect" + result + "}"; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " media: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ messages_sendMedia" + result + "}"; + + case mtpc_messages_editChatTitle: + result += "\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ messages_editChatTitle" + result + "}"; + + case mtpc_messages_editChatPhoto: + result += "\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_editChatPhoto" + result + "}"; + + case mtpc_messages_addChatUser: + result += "\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " fwd_limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_addChatUser" + result + "}"; + + case mtpc_messages_deleteChatUser: + result += "\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_deleteChatUser" + result + "}"; + + case mtpc_messages_createChat: + result += "\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ messages_createChat" + result + "}"; + + case mtpc_messages_forwardMessage: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ messages_forwardMessage" + result + "}"; + + case mtpc_messages_requestEncryption: + result += "\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " random_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " g_a: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + return "{ messages_requestEncryption" + result + "}"; + + case mtpc_messages_acceptEncryption: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " g_b: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ messages_acceptEncryption" + result + "}"; } return mtpTextSerializeCore(from, end, cons, level, vcons); diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index b22e83e22..e0eac83d4 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -779,10 +779,10 @@ PeerData *ProfileWidget::peer() const { void ProfileWidget::animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTopBarCache, bool back) { _bgAnimCache = bgAnimCache; _bgAnimTopBarCache = bgAnimTopBarCache; - _animCache = grab(rect()); - App::main()->topBar()->showAll(); - _animTopBarCache = App::main()->topBar()->grab(QRect(0, 0, width(), st::topBarHeight)); - App::main()->topBar()->hideAll(); + _animCache = myGrab(this, rect()); + App::main()->topBar()->stopAnim(); + _animTopBarCache = myGrab(App::main()->topBar(), QRect(0, 0, width(), st::topBarHeight)); + App::main()->topBar()->startAnim(); _scroll.hide(); a_coord = back ? anim::ivalue(-st::introSlideShift, 0) : anim::ivalue(st::introSlideShift, 0); a_alpha = anim::fvalue(0, 1); @@ -806,7 +806,7 @@ bool ProfileWidget::animStep(float64 ms) { a_coord.finish(); a_alpha.finish(); _bgAnimCache = _animCache = _animTopBarCache = _bgAnimTopBarCache = QPixmap(); - App::main()->topBar()->showAll(); + App::main()->topBar()->stopAnim(); _scroll.show(); activate(); } else { diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index 8b6405ffb..43c76d461 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -1,3 +1,20 @@ +/* +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 +*/ #include "stdafx.h" #include "pspecific.h" @@ -5,621 +22,11 @@ #include "application.h" #include "mainwidget.h" -#define min(a, b) ((a) < (b) ? (a) : (b)) -#define max(a, b) ((a) < (b) ? (b) : (a)) - namespace { bool frameless = true; - bool useDWM = false; - bool useTheme = false; - bool useOpenAs = false; - bool themeInited = false; bool finished = true; - int menuShown = 0, menuHidden = 0; - int dleft = 0, dtop = 0; - QMargins simpleMargins, margins; - //HICON bigIcon = 0, smallIcon = 0, overlayIcon = 0; - //UINT tbCreatedMsgId = 0; - //ITaskbarList3 *tbListInterface = 0; - - /*HWND createTaskbarHider() { - HINSTANCE appinst = (HINSTANCE)GetModuleHandle(0); - HWND hWnd = 0; - - QString cn = QString("TelegramTaskbarHider"); - LPCWSTR _cn = (LPCWSTR)cn.utf16(); - WNDCLASSEX wc; - - wc.cbSize = sizeof(wc); - wc.style = 0; - wc.lpfnWndProc = DefWindowProc; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = appinst; - wc.hIcon = 0; - wc.hCursor = 0; - wc.hbrBackground = 0; - wc.lpszMenuName = NULL; - wc.lpszClassName = _cn; - wc.hIconSm = 0; - if (!RegisterClassEx(&wc)) { - DEBUG_LOG(("Application Error: could not register taskbar hider window class, error: %1").arg(GetLastError())); - return hWnd; - } - - hWnd = CreateWindowEx(WS_EX_TOOLWINDOW, _cn, 0, WS_POPUP, 0, 0, 0, 0, 0, 0, appinst, 0); - if (!hWnd) { - DEBUG_LOG(("Application Error: could not create taskbar hider window class, error: %1").arg(GetLastError())); - return hWnd; - } - return hWnd; - } - - enum { - _PsShadowMoved = 0x01, - _PsShadowResized = 0x02, - _PsShadowShown = 0x04, - _PsShadowHidden = 0x08, - _PsShadowActivate = 0x10, - }; - - enum { - _PsInitHor = 0x01, - _PsInitVer = 0x02, - }; - - int32 _psSize = 0; - class _PsShadowWindows { - public: - - _PsShadowWindows() : screenDC(0), max_w(0), max_h(0), _x(0), _y(0), _w(0), _h(0), hidden(true), r(0), g(0), b(0), noKeyColor(RGB(255, 255, 255)) { - for (int i = 0; i < 4; ++i) { - dcs[i] = 0; - bitmaps[i] = 0; - hwnds[i] = 0; - } - } - - void setColor(QColor c) { - r = c.red(); - g = c.green(); - b = c.blue(); - - if (!hwnds[0]) return; - Gdiplus::SolidBrush brush(Gdiplus::Color(_alphas[0], r, g, b)); - for (int i = 0; i < 4; ++i) { - Gdiplus::Graphics graphics(dcs[i]); - graphics.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); - if ((i % 2) && _h || !(i % 2) && _w) { - graphics.FillRectangle(&brush, 0, 0, (i % 2) ? _size : _w, (i % 2) ? _h : _size); - } - } - initCorners(); - - _x = _y = _w = _h = 0; - update(_PsShadowMoved | _PsShadowResized); - } - - bool init(QColor c) { - style::rect topLeft = st::wndShadow; - _fullsize = topLeft.width(); - _shift = st::wndShadowShift; - QImage cornersImage(_fullsize, _fullsize, QImage::Format_ARGB32_Premultiplied); - { - QPainter p(&cornersImage); - p.drawPixmap(QPoint(0, 0), App::sprite(), topLeft); - } - uchar *bits = cornersImage.bits(); - if (bits) { - for ( - quint32 *p = (quint32*)bits, *end = (quint32*)(bits + cornersImage.byteCount()); - p < end; - ++p - ) { - *p = (*p ^ 0x00ffffff) << 24; - } - } - - _metaSize = _fullsize + 2 * _shift; - _alphas.reserve(_metaSize); - _colors.reserve(_metaSize * _metaSize); - for (int32 j = 0; j < _metaSize; ++j) { - for (int32 i = 0; i < _metaSize; ++i) { - _colors.push_back((i < 2 * _shift || j < 2 * _shift) ? 1 : qMax(BYTE(1), BYTE(cornersImage.pixel(QPoint(i - 2 * _shift, j - 2 * _shift)) >> 24))); - } - } - uchar prev = 0; - for (int32 i = 0; i < _metaSize; ++i) { - uchar a = _colors[(_metaSize - 1) * _metaSize + i]; - if (a < prev) break; - - _alphas.push_back(a); - prev = a; - } - _psSize = _size = _alphas.size() - 2 * _shift; - - setColor(c); - - Gdiplus::GdiplusStartupInput gdiplusStartupInput; - ULONG_PTR gdiplusToken; - Gdiplus::Status gdiRes = Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); - - if (gdiRes != Gdiplus::Ok) { - DEBUG_LOG(("Application Error: could not init GDI+, error: %1").arg((int)gdiRes)); - return false; - } - blend.AlphaFormat = AC_SRC_ALPHA; - blend.SourceConstantAlpha = 255; - blend.BlendFlags = 0; - blend.BlendOp = AC_SRC_OVER; - - screenDC = GetDC(0); - if (!screenDC) return false; - - QRect avail(QDesktopWidget().availableGeometry()); - max_w = avail.width(); - if (max_w < st::wndMinWidth) max_w = st::wndMinWidth; - max_h = avail.height(); - if (max_h < st::wndMinHeight) max_h = st::wndMinHeight; - - HINSTANCE appinst = (HINSTANCE)GetModuleHandle(0); - - for (int i = 0; i < 4; ++i) { - QString cn = QString("TelegramShadow%1").arg(i); - LPCWSTR _cn = (LPCWSTR)cn.utf16(); - WNDCLASSEX wc; - - wc.cbSize = sizeof(wc); - wc.style = 0; - wc.lpfnWndProc = wndProc; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = appinst; - wc.hIcon = 0; - wc.hCursor = 0; - wc.hbrBackground = 0; - wc.lpszMenuName = NULL; - wc.lpszClassName = _cn; - wc.hIconSm = 0; - if (!RegisterClassEx(&wc)) { - DEBUG_LOG(("Application Error: could not register shadow window class %1, error: %2").arg(i).arg(GetLastError())); - destroy(); - return false; - } - - hwnds[i] = CreateWindowEx(WS_EX_LAYERED | WS_EX_TOOLWINDOW, _cn, 0, WS_POPUP, 0, 0, 0, 0, 0, 0, appinst, 0); - if (!hwnds[i]) { - DEBUG_LOG(("Application Error: could not create shadow window class %1, error: %2").arg(i).arg(GetLastError())); - destroy(); - return false; - } - - dcs[i] = CreateCompatibleDC(screenDC); - if (!dcs[i]) { - DEBUG_LOG(("Application Error: could not create dc for shadow window class %1, error: %2").arg(i).arg(GetLastError())); - destroy(); - return false; - } - - bitmaps[i] = CreateCompatibleBitmap(screenDC, (i % 2) ? _size : max_w, (i % 2) ? max_h : _size); - if (!bitmaps[i]) { - DEBUG_LOG(("Application Error: could not create bitmap for shadow window class %1, error: %2").arg(i).arg(GetLastError())); - destroy(); - return false; - } - - SelectObject(dcs[i], bitmaps[i]); - } - - initCorners(); - return true; - } - - void initCorners(int directions = (_PsInitHor | _PsInitVer)) { - bool hor = (directions & _PsInitHor), ver = (directions & _PsInitVer); - Gdiplus::Graphics graphics0(dcs[0]), graphics1(dcs[1]), graphics2(dcs[2]), graphics3(dcs[3]); - graphics0.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); - graphics1.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); - graphics2.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); - graphics3.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); - - Gdiplus::SolidBrush brush(Gdiplus::Color(_alphas[0], r, g, b)); - if (hor) graphics0.FillRectangle(&brush, 0, 0, _fullsize - (_size - _shift), 2 * _shift); - - if (ver) { - graphics1.FillRectangle(&brush, 0, 0, _size, 2 * _shift); - graphics3.FillRectangle(&brush, 0, 0, _size, 2 * _shift); - graphics1.FillRectangle(&brush, _size - _shift, 2 * _shift, _shift, _fullsize); - graphics3.FillRectangle(&brush, 0, 2 * _shift, _shift, _fullsize); - } - - if (hor) { - for (int j = 2 * _shift; j < _size; ++j) { - for (int k = 0; k < _fullsize - (_size - _shift); ++k) { - brush.SetColor(Gdiplus::Color(_colors[j * _metaSize + k + (_size + _shift)], r, g, b)); - graphics0.FillRectangle(&brush, k, j, 1, 1); - graphics2.FillRectangle(&brush, k, _size - (j - 2 * _shift) - 1, 1, 1); - } - } - for (int j = _size; j < _size + 2 * _shift; ++j) { - for (int k = 0; k < _fullsize - (_size - _shift); ++k) { - brush.SetColor(Gdiplus::Color(_colors[j * _metaSize + k + (_size + _shift)], r, g, b)); - graphics2.FillRectangle(&brush, k, _size - (j - 2 * _shift) - 1, 1, 1); - } - } - } - if (ver) { - for (int j = 2 * _shift; j < _fullsize + 2 * _shift; ++j) { - for (int k = _shift; k < _size; ++k) { - brush.SetColor(Gdiplus::Color(_colors[j * _metaSize + (k + _shift)], r, g, b)); - graphics1.FillRectangle(&brush, _size - k - 1, j, 1, 1); - graphics3.FillRectangle(&brush, k, j, 1, 1); - } - } - } - } - void verCorners(int h, Gdiplus::Graphics *pgraphics1, Gdiplus::Graphics *pgraphics3) { - Gdiplus::SolidBrush brush(Gdiplus::Color(_alphas[0], r, g, b)); - pgraphics1->FillRectangle(&brush, _size - _shift, h - _fullsize, _shift, _fullsize); - pgraphics3->FillRectangle(&brush, 0, h - _fullsize, _shift, _fullsize); - for (int j = 0; j < _fullsize; ++j) { - for (int k = _shift; k < _size; ++k) { - brush.SetColor(Gdiplus::Color(_colors[(j + 2 * _shift) * _metaSize + k + _shift], r, g, b)); - pgraphics1->FillRectangle(&brush, _size - k - 1, h - j - 1, 1, 1); - pgraphics3->FillRectangle(&brush, k, h - j - 1, 1, 1); - } - } - } - void horCorners(int w, Gdiplus::Graphics *pgraphics0, Gdiplus::Graphics *pgraphics2) { - Gdiplus::SolidBrush brush(Gdiplus::Color(_alphas[0], r, g, b)); - pgraphics0->FillRectangle(&brush, w - 2 * _size - (_fullsize - (_size - _shift)), 0, _fullsize - (_size - _shift), 2 * _shift); - for (int j = 2 * _shift; j < _size; ++j) { - for (int k = 0; k < _fullsize - (_size - _shift); ++k) { - brush.SetColor(Gdiplus::Color(_colors[j * _metaSize + k + (_size + _shift)], r, g, b)); - pgraphics0->FillRectangle(&brush, w - 2 * _size - k - 1, j, 1, 1); - pgraphics2->FillRectangle(&brush, w - 2 * _size - k - 1, _size - (j - 2 * _shift) - 1, 1, 1); - } - } - for (int j = _size; j < _size + 2 * _shift; ++j) { - for (int k = 0; k < _fullsize - (_size - _shift); ++k) { - brush.SetColor(Gdiplus::Color(_colors[j * _metaSize + k + (_size + _shift)], r, g, b)); - pgraphics2->FillRectangle(&brush, w - 2 * _size - k - 1, _size - (j - 2 * _shift) - 1, 1, 1); - } - } - } - - void update(int changes, WINDOWPOS *pos = 0) { - HWND hwnd = Application::wnd() ? Application::wnd()->psHwnd() : 0; - if (!hwnd || !hwnds[0]) return; - - if (changes == _PsShadowActivate) { - for (int i = 0; i < 4; ++i) { - SetWindowPos(hwnds[i], hwnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); - } - return; - } - - if (changes & _PsShadowHidden) { - if (!hidden) { - for (int i = 0; i < 4; ++i) { - hidden = true; - ShowWindow(hwnds[i], SW_HIDE); - } - } - return; - } - if (!Application::wnd()->psPosInited()) return; - - int x = _x, y = _y, w = _w, h = _h; - if (pos && (!(pos->flags & SWP_NOMOVE) || !(pos->flags & SWP_NOSIZE) || !(pos->flags & SWP_NOREPOSITION))) { - if (!(pos->flags & SWP_NOMOVE)) { - x = pos->x - _size; - y = pos->y - _size; - } else if (pos->flags & SWP_NOSIZE) { - for (int i = 0; i < 4; ++i) { - SetWindowPos(hwnds[i], hwnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); - } - return; - } - if (!(pos->flags & SWP_NOSIZE)) { - w = pos->cx + 2 * _size; - h = pos->cy + 2 * _size; - } - } else { - RECT r; - GetWindowRect(hwnd, &r); - x = r.left - _size; - y = r.top - _size; - w = r.right + _size - x; - h = r.bottom + _size - y; - } - if (h < 2 * _fullsize + 2 * _shift) { - h = 2 * _fullsize + 2 * _shift; - } - if (w < 2 * (_fullsize + _shift)) { - w = 2 * (_fullsize + _shift); - } - - if (w != _w) { - int from = (_w > 2 * (_fullsize + _shift)) ? (_w - _size - _fullsize - _shift) : (_fullsize - (_size - _shift)); - int to = w - _size - _fullsize - _shift; - if (w > max_w) { - from = _fullsize - (_size - _shift); - max_w *= 2; - for (int i = 0; i < 4; i += 2) { - DeleteObject(bitmaps[i]); - bitmaps[i] = CreateCompatibleBitmap(screenDC, max_w, _size); - SelectObject(dcs[i], bitmaps[i]); - } - initCorners(_PsInitHor); - } - Gdiplus::Graphics graphics0(dcs[0]), graphics2(dcs[2]); - graphics0.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); - graphics2.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); - Gdiplus::SolidBrush brush(Gdiplus::Color(_alphas[0], r, g, b)); - if (to > from) { - graphics0.FillRectangle(&brush, from, 0, to - from, 2 * _shift); - for (int i = 2 * _shift; i < _size; ++i) { - Gdiplus::Pen pen(Gdiplus::Color(_alphas[i], r, g, b)); - graphics0.DrawLine(&pen, from, i, to, i); - graphics2.DrawLine(&pen, from, _size - (i - 2 * _shift) - 1, to, _size - (i - 2 * _shift) - 1); - } - for (int i = _size; i < _size + 2 * _shift; ++i) { - Gdiplus::Pen pen(Gdiplus::Color(_alphas[i], r, g, b)); - graphics2.DrawLine(&pen, from, _size - (i - 2 * _shift) - 1, to, _size - (i - 2 * _shift) - 1); - } - } - if (_w > w) { - graphics0.FillRectangle(&brush, w - _size - _fullsize - _shift, 0, _fullsize - (_size - _shift), _size); - graphics2.FillRectangle(&brush, w - _size - _fullsize - _shift, 0, _fullsize - (_size - _shift), _size); - } - horCorners(w, &graphics0, &graphics2); - POINT p0 = { x + _size, y }, p2 = { x + _size, y + h - _size }, f = { 0, 0 }; - SIZE s = { w - 2 * _size, _size }; - updateWindow(0, &p0, &s); - updateWindow(2, &p2, &s); - } else if (x != _x || y != _y) { - POINT p0 = { x + _size, y }, p2 = { x + _size, y + h - _size }; - updateWindow(0, &p0); - updateWindow(2, &p2); - } else if (h != _h) { - POINT p2 = { x + _size, y + h - _size }; - updateWindow(2, &p2); - } - - if (h != _h) { - int from = (_h > 2 * _fullsize + 2 * _shift) ? (_h - _fullsize) : (_fullsize + 2 * _shift); - int to = h - _fullsize; - if (h > max_h) { - from = (_fullsize + 2 * _shift); - max_h *= 2; - for (int i = 1; i < 4; i += 2) { - DeleteObject(bitmaps[i]); - bitmaps[i] = CreateCompatibleBitmap(dcs[i], _size, max_h); - SelectObject(dcs[i], bitmaps[i]); - } - initCorners(_PsInitVer); - } - Gdiplus::Graphics graphics1(dcs[1]), graphics3(dcs[3]); - graphics1.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); - graphics3.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); - - Gdiplus::SolidBrush brush(Gdiplus::Color(_alphas[0], r, g, b)); - if (to > from) { - graphics1.FillRectangle(&brush, _size - _shift, from, _shift, to - from); - graphics3.FillRectangle(&brush, 0, from, _shift, to - from); - for (int i = 2 * _shift; i < _size + _shift; ++i) { - Gdiplus::Pen pen(Gdiplus::Color(_alphas[i], r, g, b)); - graphics1.DrawLine(&pen, _size + _shift - i - 1, from, _size + _shift - i - 1, to); - graphics3.DrawLine(&pen, i - _shift, from, i - _shift, to); - } - } - if (_h > h) { - graphics1.FillRectangle(&brush, 0, h - _fullsize, _size, _fullsize); - graphics3.FillRectangle(&brush, 0, h - _fullsize, _size, _fullsize); - } - verCorners(h, &graphics1, &graphics3); - - POINT p1 = {x + w - _size, y}, p3 = {x, y}, f = {0, 0}; - SIZE s = { _size, h }; - updateWindow(1, &p1, &s); - updateWindow(3, &p3, &s); - } else if (x != _x || y != _y) { - POINT p1 = { x + w - _size, y }, p3 = { x, y }; - updateWindow(1, &p1); - updateWindow(3, &p3); - } else if (w != _w) { - POINT p1 = { x + w - _size, y }; - updateWindow(1, &p1); - } - _x = x; - _y = y; - _w = w; - _h = h; - - if (hidden && (changes & _PsShadowShown)) { - for (int i = 0; i < 4; ++i) { - SetWindowPos(hwnds[i], hwnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW | SWP_NOACTIVATE); - } - hidden = false; - } - } - - void updateWindow(int i, POINT *p, SIZE *s = 0) { - static POINT f = {0, 0}; - if (s) { - UpdateLayeredWindow(hwnds[i], (s ? screenDC : 0), p, s, (s ? dcs[i] : 0), (s ? (&f) : 0), noKeyColor, &blend, ULW_ALPHA); - } else { - SetWindowPos(hwnds[i], 0, p->x, p->y, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER); - } - } - - void destroy() { - for (int i = 0; i < 4; ++i) { - if (dcs[i]) DeleteDC(dcs[i]); - if (bitmaps[i]) DeleteObject(bitmaps[i]); - if (hwnds[i]) DestroyWindow(hwnds[i]); - dcs[i] = 0; - bitmaps[i] = 0; - hwnds[i] = 0; - } - if (screenDC) ReleaseDC(0, screenDC); - } - - private: - - int _x, _y, _w, _h; - int _metaSize, _fullsize, _size, _shift; - QVector _alphas, _colors; - - bool hidden; - - HWND hwnds[4]; - HDC dcs[4], screenDC; - HBITMAP bitmaps[4]; - int max_w, max_h; - BLENDFUNCTION blend; - - BYTE r, g, b; - COLORREF noKeyColor; - - static LRESULT CALLBACK _PsShadowWindows::wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); - - }; - _PsShadowWindows _psShadowWindows; - - LRESULT CALLBACK _PsShadowWindows::wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { - if (finished) return DefWindowProc(hwnd, msg, wParam, lParam); - - int i; - for (i = 0; i < 4; ++i) { - if (_psShadowWindows.hwnds[i] && hwnd == _psShadowWindows.hwnds[i]) { - break; - } - } - if (i == 4) return DefWindowProc(hwnd, msg, wParam, lParam); - - switch (msg) { - case WM_CLOSE: - Application::wnd()->close(); - break; - case WM_NCHITTEST: { - int32 xPos = GET_X_LPARAM(lParam), yPos = GET_Y_LPARAM(lParam); - switch (i) { - case 0: return HTTOP; - case 1: return (yPos < _psShadowWindows._y + _psSize) ? HTTOPRIGHT : ((yPos >= _psShadowWindows._y + _psShadowWindows._h - _psSize) ? HTBOTTOMRIGHT : HTRIGHT); - case 2: return HTBOTTOM; - case 3: return (yPos < _psShadowWindows._y + _psSize) ? HTTOPLEFT : ((yPos >= _psShadowWindows._y + _psShadowWindows._h - _psSize) ? HTBOTTOMLEFT : HTLEFT); - } - return HTTRANSPARENT; - } break; - - case WM_NCACTIVATE: return DefWindowProc(hwnd, msg, wParam, lParam); - case WM_NCLBUTTONDOWN: - case WM_NCLBUTTONUP: - case WM_NCLBUTTONDBLCLK: - case WM_NCMBUTTONDOWN: - case WM_NCMBUTTONUP: - case WM_NCMBUTTONDBLCLK: - case WM_NCRBUTTONDOWN: - case WM_NCRBUTTONUP: - case WM_NCRBUTTONDBLCLK: - case WM_NCXBUTTONDOWN: - case WM_NCXBUTTONUP: - case WM_NCXBUTTONDBLCLK: - case WM_NCMOUSEHOVER: - case WM_NCMOUSELEAVE: - case WM_NCMOUSEMOVE: - case WM_NCPOINTERUPDATE: - case WM_NCPOINTERDOWN: - case WM_NCPOINTERUP: - if (App::wnd() && App::wnd()->psHwnd()) { - if (msg == WM_NCLBUTTONDOWN) { - ::SetForegroundWindow(App::wnd()->psHwnd()); - } - LRESULT res = SendMessage(App::wnd()->psHwnd(), msg, wParam, lParam); - return res; - } - return 0; - break; - case WM_ACTIVATE: - if (App::wnd() && App::wnd()->psHwnd() && wParam == WA_ACTIVE) { - if ((HWND)lParam != App::wnd()->psHwnd()) { - ::SetForegroundWindow(hwnd); - ::SetWindowPos(App::wnd()->psHwnd(), hwnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); - } - } - return DefWindowProc(hwnd, msg, wParam, lParam); - break; - default: - return DefWindowProc(hwnd, msg, wParam, lParam); - } - return 0; - } - - QColor _shActive(0, 0, 0), _shInactive(0, 0, 0); - - typedef BOOL (FAR STDAPICALLTYPE *f_dwmDefWindowProc)(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, _Out_ LRESULT *plResult); - f_dwmDefWindowProc dwmDefWindowProc; - - typedef HRESULT (FAR STDAPICALLTYPE *f_dwmSetWindowAttribute)(HWND hWnd, DWORD dwAttribute, _In_ LPCVOID pvAttribute, DWORD cbAttribute); - f_dwmSetWindowAttribute dwmSetWindowAttribute; - - typedef HRESULT (FAR STDAPICALLTYPE *f_dwmExtendFrameIntoClientArea)(HWND hWnd, const MARGINS *pMarInset); - f_dwmExtendFrameIntoClientArea dwmExtendFrameIntoClientArea; - - typedef HRESULT (FAR STDAPICALLTYPE *f_setWindowTheme)(HWND hWnd, LPCWSTR pszSubAppName, LPCWSTR pszSubIdList); - f_setWindowTheme setWindowTheme; - - typedef HRESULT (FAR STDAPICALLTYPE *f_openAs_RunDLL)(HWND hWnd, HINSTANCE hInstance, LPCWSTR lpszCmdLine, int nCmdShow); - f_openAs_RunDLL openAs_RunDLL; - - typedef HRESULT (FAR STDAPICALLTYPE *f_shOpenWithDialog)(HWND hwndParent, const OPENASINFO *poainfo); - f_shOpenWithDialog shOpenWithDialog; - - template - bool loadFunction(HINSTANCE dll, LPCSTR name, TFunction &func) { - if (!dll) return false; - - func = (TFunction)GetProcAddress(dll, name); - return !!func; - } - - class _PsInitializer { - public: - _PsInitializer() { - setupDWM(); - useDWM = true; - frameless = !useDWM; - - setupUx(); - setupOpenAs(); - } - void setupDWM() { - HINSTANCE procId = LoadLibrary(L"DWMAPI.DLL"); - - if (!loadFunction(procId, "DwmDefWindowProc", dwmDefWindowProc)) return; - if (!loadFunction(procId, "DwmSetWindowAttribute", dwmSetWindowAttribute)) return; - if (!loadFunction(procId, "DwmExtendFrameIntoClientArea", dwmExtendFrameIntoClientArea)) return; - useDWM = true; - } - void setupUx() { - HINSTANCE procId = LoadLibrary(L"UXTHEME.DLL"); - - if (!loadFunction(procId, "SetWindowTheme", setWindowTheme)) return; - useTheme = true; - } - void setupOpenAs() { - HINSTANCE procId = LoadLibrary(L"SHELL32.DLL"); - - if (!loadFunction(procId, "SHOpenWithDialog", shOpenWithDialog) && !loadFunction(procId, "OpenAs_RunDLLW", openAs_RunDLL)) return; - useOpenAs = true; - } - }; - _PsInitializer _psInitializer; - - class _PsEventFilter : public QAbstractNativeEventFilter { + class _PsEventFilter : public QAbstractNativeEventFilter { public: _PsEventFilter() { } @@ -627,7 +34,7 @@ namespace { bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) { Window *wnd = Application::wnd(); if (!wnd) return false; - +/* MSG *msg = (MSG*)message; if (msg->message == WM_ENDSESSION) { App::quit(); @@ -635,10 +42,10 @@ namespace { } if (msg->hwnd == wnd->psHwnd() || msg->hwnd && !wnd->psHwnd()) { return mainWindowEvent(msg->hwnd, msg->message, msg->wParam, msg->lParam, (LRESULT*)result); - } + }*/ return false; } - +/* bool mainWindowEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *result) { if (tbCreatedMsgId && msg == tbCreatedMsgId) { if (CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_ALL, IID_ITaskbarList3, (void**)&tbListInterface) != S_OK) { @@ -655,49 +62,9 @@ namespace { if (LOWORD(wParam) == WA_CLICKACTIVE) { App::wnd()->inactivePress(true); } - Application::wnd()->psUpdateMargins(); - if (LOWORD(wParam) != WA_INACTIVE) { - _psShadowWindows.setColor(_shActive); - _psShadowWindows.update(_PsShadowActivate); - } else { - _psShadowWindows.setColor(_shInactive); - } - QTimer::singleShot(0, Application::wnd(), SLOT(psUpdateCounter())); - Application::wnd()->update(); - } return false; - - case WM_NCPAINT: if (QSysInfo::WindowsVersion >= QSysInfo::WV_WINDOWS8) return false; *result = 0; return true; - - case WM_NCCALCSIZE: if (!useDWM) return false; { - if (wParam == TRUE) { - LPNCCALCSIZE_PARAMS params = (LPNCCALCSIZE_PARAMS)lParam; - params->rgrc[0].left += margins.left() - simpleMargins.left(); - params->rgrc[0].top += margins.top() - simpleMargins.top(); - params->rgrc[0].right -= margins.right() - simpleMargins.right(); - params->rgrc[0].bottom -= margins.bottom() - simpleMargins.bottom(); - } else if (wParam == FALSE) { - LPRECT rect = (LPRECT)lParam; - - rect->left += margins.left() - simpleMargins.left(); - rect->top += margins.top() - simpleMargins.top(); - rect->right += margins.right() - simpleMargins.right(); - rect->bottom += margins.bottom() - simpleMargins.bottom(); - } - *result = 0; - } return true; - - case WM_NCACTIVATE: { - Application::wnd()->psUpdateMargins(); - *result = LRESULT(TRUE); - Application::wnd()->repaint(); - } return true; - - case WM_WINDOWPOSCHANGING: - case WM_WINDOWPOSCHANGED: { - _psShadowWindows.update(_PsShadowMoved | _PsShadowResized, (WINDOWPOS*)lParam); } return false; - case WM_SIZE: { + case WM_SIZE: { if (App::wnd()) { if (wParam == SIZE_MAXIMIZED || wParam == SIZE_RESTORED || wParam == SIZE_MINIMIZED) { if (wParam != SIZE_RESTORED || App::wnd()->windowState() != Qt::WindowNoState) { @@ -717,147 +84,71 @@ namespace { } } return false; - case WM_SHOWWINDOW: { - LONG style = GetWindowLong(hWnd, GWL_STYLE); - int changes = _PsShadowResized | ((wParam && !(style & (WS_MAXIMIZE | WS_MINIMIZE))) ? _PsShadowShown : _PsShadowHidden); - _psShadowWindows.update(changes); - } return false; - case WM_MOVE: { _psShadowWindows.update(_PsShadowMoved); App::wnd()->psUpdatedPosition(); } return false; - - case WM_NCHITTEST: { - POINTS p = MAKEPOINTS(lParam); - RECT r; - GetWindowRect(hWnd, &r); - HitTestType res = Application::wnd()->hitTest(QPoint(p.x - r.left + dleft, p.y - r.top + dtop)); - switch (res) { - case HitTestClient: - case HitTestSysButton: *result = HTCLIENT; break; - case HitTestIcon: *result = HTCAPTION; break; - case HitTestCaption: *result = HTCAPTION; break; - case HitTestTop: *result = HTTOP; break; - case HitTestTopRight: *result = HTTOPRIGHT; break; - case HitTestRight: *result = HTRIGHT; break; - case HitTestBottomRight: *result = HTBOTTOMRIGHT; break; - case HitTestBottom: *result = HTBOTTOM; break; - case HitTestBottomLeft: *result = HTBOTTOMLEFT; break; - case HitTestLeft: *result = HTLEFT; break; - case HitTestTopLeft: *result = HTTOPLEFT; break; - case HitTestNone: - default: *result = HTTRANSPARENT; break; - }; - } return true; - - case WM_NCRBUTTONUP: { - SendMessage(hWnd, WM_SYSCOMMAND, SC_MOUSEMENU, lParam); - } return true; - - case WM_NCLBUTTONDOWN: { - POINTS p = MAKEPOINTS(lParam); - RECT r; - GetWindowRect(hWnd, &r); - HitTestType res = Application::wnd()->hitTest(QPoint(p.x - r.left + dleft, p.y - r.top + dtop)); - switch (res) { - case HitTestIcon: - if (menuHidden && getms() < menuHidden + 10) { - menuHidden = 0; - if (getms() < menuShown + GetDoubleClickTime()) { - Application::wnd()->close(); - } - } else { - QRect icon = Application::wnd()->iconRect(); - p.x = r.left - dleft + icon.left(); - p.y = r.top - dtop + icon.top() + icon.height(); - Application::wnd()->psUpdateSysMenu(Application::wnd()->windowHandle()->windowState()); - menuShown = getms(); - menuHidden = 0; - TrackPopupMenu(Application::wnd()->psMenu(), TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON, p.x, p.y, 0, hWnd, 0); - menuHidden = getms(); - } - return true; - }; - } return false; - - case WM_NCLBUTTONDBLCLK: { - POINTS p = MAKEPOINTS(lParam); - RECT r; - GetWindowRect(hWnd, &r); - HitTestType res = Application::wnd()->hitTest(QPoint(p.x - r.left + dleft, p.y - r.top + dtop)); - switch (res) { - case HitTestIcon: Application::wnd()->close(); return true; - }; - } return false; - - case WM_SYSCOMMAND: { - if (wParam == SC_MOUSEMENU) { - POINTS p = MAKEPOINTS(lParam); - Application::wnd()->psUpdateSysMenu(Application::wnd()->windowHandle()->windowState()); - TrackPopupMenu(Application::wnd()->psMenu(), TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON, p.x, p.y, 0, hWnd, 0); - } - } return false; - - case WM_COMMAND: { - if (HIWORD(wParam)) return false; - int cmd = LOWORD(wParam); - switch (cmd) { - case SC_CLOSE: Application::wnd()->close(); return true; - case SC_MINIMIZE: Application::wnd()->setWindowState(Qt::WindowMinimized); return true; - case SC_MAXIMIZE: Application::wnd()->setWindowState(Qt::WindowMaximized); return true; - case SC_RESTORE: Application::wnd()->setWindowState(Qt::WindowNoState); return true; - } - } return true; - - } + } return false; - } + }*/ }; - _PsEventFilter *_psEventFilter = 0;*/ + _PsEventFilter *_psEventFilter = 0; }; -PsMainWindow::PsMainWindow(QWidget *parent) : QMainWindow(parent), icon256(qsl(":/gui/art/iconround256.png")), - trayIcon(0), trayIconMenu(0), posInited(false) { +void MacPrivate::activeSpaceChanged() { + if (App::wnd()) { + App::wnd()->psActivateNotifies(); + } +} + +void MacPrivate::notifyClicked(unsigned long long peer) { + History *history = App::history(PeerId(peer)); + + App::wnd()->showFromTray(); + App::wnd()->hideSettings(); + App::main()->showPeer(history->peer->id, false, true); + App::wnd()->psClearNotify(history); +} + +void MacPrivate::notifyReplied(unsigned long long peer, const char *str) { + +} + +PsMainWindow::PsMainWindow(QWidget *parent) : QMainWindow(parent), +posInited(false), trayIcon(0), trayIconMenu(0), icon256(qsl(":/gui/art/iconround256.png")) { + //tbCreatedMsgId = RegisterWindowMessage(L"TaskbarButtonCreated"); icon16 = icon256.scaledToWidth(16, Qt::SmoothTransformation); icon32 = icon256.scaledToWidth(32, Qt::SmoothTransformation); - //connect(&psIdleTimer, SIGNAL(timeout()), this, SLOT(psIdleTimeout())); - //psIdleTimer.setSingleShot(false); + connect(&psIdleTimer, SIGNAL(timeout()), this, SLOT(psIdleTimeout())); + psIdleTimer.setSingleShot(false); + connect(¬ifyWaitTimer, SIGNAL(timeout()), this, SLOT(psNotifyFire())); + notifyWaitTimer.setSingleShot(true); } void PsMainWindow::psIdleTimeout() { - /*LASTINPUTINFO lii; - lii.cbSize = sizeof(LASTINPUTINFO); - BOOL res = GetLastInputInfo(&lii); - if (res) { - uint64 ticks = GetTickCount(); - if (lii.dwTime >= ticks - IdleMsecs) { - psIdle = false; - psIdleTimer.stop(); - if (App::main()) App::main()->setOnline(); + int64 idleTime = _idleTime(); + if (idleTime >= 0) { + if (idleTime <= IdleMsecs) { + psIdle = false; + psIdleTimer.stop(); + if (App::main()) App::main()->setOnline(); } - }*/ + } } -bool PsMainWindow::psIsActive() const { - return isActiveWindow() && isVisible() && !(windowState() & Qt::WindowMinimized); -} - -bool PsMainWindow::psIsOnline(int windowState) const { - if (windowState < 0) windowState = this->windowState(); - if (windowState & Qt::WindowMinimized) { +bool PsMainWindow::psIsOnline(int state) const { + if (state < 0) state = this->windowState(); + if (state & Qt::WindowMinimized) { return false; } else if (!isVisible()) { return false; } - /*LASTINPUTINFO lii; - lii.cbSize = sizeof(LASTINPUTINFO); - BOOL res = GetLastInputInfo(&lii); - if (res) { - uint64 ticks = GetTickCount(); - if (lii.dwTime < ticks - IdleMsecs) { + int64 idleTime = _idleTime(); + LOG(("App Info: idle time %1").arg(idleTime)); + if (idleTime >= 0) { + if (idleTime > IdleMsecs) { if (!psIdle) { psIdle = true; psIdleTimer.start(900); @@ -867,10 +158,15 @@ bool PsMainWindow::psIsOnline(int windowState) const { psIdle = false; psIdleTimer.stop(); } - }*/ + } return true; } +bool PsMainWindow::psIsActive(int state) const { + if (state < 0) state = this->windowState(); + return isActiveWindow() && isVisible() && !(state & Qt::WindowMinimized); +} + void PsMainWindow::psRefreshTaskbarIcon() { /*QWidget *w = new QWidget(this); w->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint); @@ -918,115 +214,13 @@ void PsMainWindow::psUpdateWorkmode() { }*/ } -/*HICON qt_pixmapToWinHICON(const QPixmap &); -static HICON _qt_createHIcon(const QIcon &icon, int xSize, int ySize) { - if (!icon.isNull()) { - const QPixmap pm = icon.pixmap(icon.actualSize(QSize(xSize, ySize))); - if (!pm.isNull()) - return qt_pixmapToWinHICON(pm); - } - return 0; -}*/ - void PsMainWindow::psUpdateCounter() { int32 counter = App::histories().unreadFull; - style::color bg = (App::histories().unreadMuted < counter) ? st::counterBG : st::counterMuteBG; - QIcon icon; - QImage cicon16(icon16), cicon32(icon32); - if (counter > 0) { - { - QString cnt = (counter < 1000) ? QString("%1").arg(counter) : QString("..%1").arg(counter % 100, 2, 10, QChar('0')); - QPainter p16(&cicon16); - p16.setBrush(bg->b); - p16.setPen(Qt::NoPen); - p16.setRenderHint(QPainter::Antialiasing); - int32 fontSize = 8; - style::font f(fontSize); - int32 w = f->m.width(cnt), d = 2, r = 3; - p16.drawRoundedRect(QRect(16 - w - d * 2, 16 - f->height, w + d * 2, f->height), r, r); - p16.setFont(f->f); - p16.setPen(st::counterColor->p); + setWindowTitle((counter > 0) ? qsl("Telegram (%1)").arg(counter) : qsl("Telegram")); - p16.drawText(16 - w - d, 16 - f->height + f->ascent, cnt); - } - /*if (!tbListInterface) { - QString cnt = (counter < 10000) ? QString("%1").arg(counter) : ((counter < 1000000) ? QString("%1K").arg(counter / 1000) : QString("%1M").arg(counter / 1000000)); - QPainter p32(&cicon32); - style::font f(10); - int32 w = f->m.width(cnt), d = 3, r = 6; - p32.setBrush(bg->b); - p32.setPen(Qt::NoPen); - p32.setRenderHint(QPainter::Antialiasing); - p32.drawRoundedRect(QRect(32 - w - d * 2, 0, w + d * 2, f->height - 1), r, r); - p32.setPen(st::counterColor->p); - p32.setFont(f->f); - p32.drawText(32 - w - d, f->ascent - 1, cnt); - }*/ - } - icon.addPixmap(QPixmap::fromImage(cicon16)); - icon.addPixmap(QPixmap::fromImage(cicon32)); - if (trayIcon) { - QIcon ticon; - QImage ticon16(icon16); - if (counter > 0) { - QString cnt = (counter < 1000) ? QString("%1").arg(counter) : QString("..%1").arg(counter % 100, 2, 10, QChar('0')); - { - QPainter p16(&ticon16); - p16.setBrush(bg->b); - p16.setPen(Qt::NoPen); - p16.setRenderHint(QPainter::Antialiasing); - int32 fontSize = 8; - style::font f(fontSize); - int32 w = f->m.width(cnt), d = 2, r = 3; - p16.drawRoundedRect(QRect(16 - w - d * 2, 16 - f->height, w + d * 2, f->height), r, r); - p16.setFont(f->f); - - p16.setPen(st::counterColor->p); - - p16.drawText(16 - w - d, 16 - f->height + f->ascent, cnt); - } - } - ticon.addPixmap(QPixmap::fromImage(ticon16)); - ticon.addPixmap(QPixmap::fromImage(cicon32)); - trayIcon->setIcon(ticon); - } - - /*setWindowTitle((counter > 0) ? qsl("Telegram (%1)").arg(counter) : qsl("Telegram")); - psDestroyIcons(); - ps_iconSmall = _qt_createHIcon(icon, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON)); - ps_iconBig = _qt_createHIcon(icon, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON)); - SendMessage(ps_hWnd, WM_SETICON, 0, (LPARAM)ps_iconSmall); - SendMessage(ps_hWnd, WM_SETICON, 1, (LPARAM)(ps_iconBig ? ps_iconBig : ps_iconSmall)); - if (tbListInterface) { - if (counter > 0) { - QString cnt = (counter < 1000) ? QString("%1").arg(counter) : QString("..%1").arg(counter % 100, 2, 10, QChar('0')); - QImage oicon16(16, 16, QImage::Format_ARGB32); - int32 cntSize = cnt.size(); - oicon16.fill(st::transparent->c); - { - QPainter p16(&oicon16); - p16.setBrush(bg->b); - p16.setPen(Qt::NoPen); - p16.setRenderHint(QPainter::Antialiasing); - int32 fontSize = (cntSize < 2) ? 12 : ((cntSize < 3) ? 12 : 8); - style::font f(fontSize); - int32 w = f->m.width(cnt), d = (cntSize < 2) ? 5 : ((cntSize < 3) ? 2 : 2), r = (cntSize < 2) ? 8 : ((cntSize < 3) ? 7 : 3); - p16.drawRoundedRect(QRect(16 - w - d * 2, 16 - f->height, w + d * 2, f->height), r, r); - p16.setFont(f->f); - - p16.setPen(st::counterColor->p); - - p16.drawText(16 - w - d, 16 - f->height + f->ascent, cnt); - } - QIcon oicon(QPixmap::fromImage(oicon16)); - ps_iconOverlay = _qt_createHIcon(oicon, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON)); - } - QString description = counter > 0 ? QString("%1 unread messages").arg(counter) : qsl("No unread messages"); - static WCHAR descriptionArr[1024]; - description.toWCharArray(descriptionArr); - tbListInterface->SetOverlayIcon(ps_hWnd, ps_iconOverlay, descriptionArr); - }*/ + QString cnt = (counter < 1000) ? QString("%1").arg(counter) : QString("..%1").arg(counter % 100, 2, 10, QChar('0')); + _private.setWindowBadge(counter ? cnt.toUtf8().constData() : ""); } /*namespace { @@ -1085,28 +279,20 @@ void PsMainWindow::psInitSize() { } void PsMainWindow::psInitFrameless() { - /*psUpdatedPositionTimer.setSingleShot(true); + psUpdatedPositionTimer.setSingleShot(true); connect(&psUpdatedPositionTimer, SIGNAL(timeout()), this, SLOT(psSavePosition())); - QPlatformNativeInterface *i = QGuiApplication::platformNativeInterface(); - ps_hWnd = static_cast(i->nativeResourceForWindow(QByteArrayLiteral("handle"), windowHandle())); - - if (!ps_hWnd) return; - if (frameless) { - setWindowFlags(Qt::FramelessWindowHint); +// setWindowFlags(Qt::FramelessWindowHint); } -// RegisterApplicationRestart(NULL, 0); - - psInitSysMenu();*/ connect(windowHandle(), SIGNAL(windowStateChanged(Qt::WindowState)), this, SLOT(psStateChanged(Qt::WindowState))); } void PsMainWindow::psSavePosition(Qt::WindowState state) { - /*if (state == Qt::WindowActive) state = windowHandle()->windowState(); + if (state == Qt::WindowActive) state = windowHandle()->windowState(); if (state == Qt::WindowMinimized || !posInited) return; - +/* TWindowPos pos(cWindowPos()), curPos = pos; if (state == Qt::WindowMaximized) { @@ -1154,14 +340,11 @@ void PsMainWindow::psStateChanged(Qt::WindowState state) { psSavePosition(state);*/ } -//Q_DECLARE_METATYPE(QMargins); void PsMainWindow::psFirstShow() { - //_psShadowWindows.init(_shActive); finished = false; - //psUpdateMargins(); + psUpdateMargins(); - //_psShadowWindows.update(_PsShadowHidden); bool showShadows = true; show(); @@ -1185,196 +368,146 @@ void PsMainWindow::psFirstShow() { show(); } posInited = true; - //if (showShadows) { - // _psShadowWindows.update(_PsShadowMoved | _PsShadowResized | _PsShadowShown); - //} } bool PsMainWindow::psHandleTitle() { - //return useDWM; return true; } void PsMainWindow::psInitSysMenu() { - /*Qt::WindowStates states = windowState(); - ps_menu = GetSystemMenu(ps_hWnd, FALSE); - psUpdateSysMenu(windowHandle()->windowState());*/ } void PsMainWindow::psUpdateSysMenu(Qt::WindowState state) { - /*if (!ps_menu) return; - - int menuToDisable = SC_RESTORE; - if (state == Qt::WindowMaximized) { - menuToDisable = SC_MAXIMIZE; - } else if (state == Qt::WindowMinimized) { - menuToDisable = SC_MINIMIZE; - } - int itemCount = GetMenuItemCount(ps_menu); - for (int i = 0; i < itemCount; ++i) { - MENUITEMINFO itemInfo = {0}; - itemInfo.cbSize = sizeof(itemInfo); - itemInfo.fMask = MIIM_TYPE | MIIM_STATE | MIIM_ID; - if (GetMenuItemInfo(ps_menu, i, TRUE, &itemInfo)) { - if (itemInfo.fType & MFT_SEPARATOR) { - continue; - } - if (itemInfo.wID && !(itemInfo.fState & MFS_DEFAULT)) { - UINT fOldState = itemInfo.fState, fState = itemInfo.fState & ~MFS_DISABLED; - if (itemInfo.wID == SC_CLOSE) { - fState |= MFS_DEFAULT; - } else if (itemInfo.wID == menuToDisable || (itemInfo.wID != SC_MINIMIZE && itemInfo.wID != SC_MAXIMIZE && itemInfo.wID != SC_RESTORE)) { - fState |= MFS_DISABLED; - } - itemInfo.fMask = MIIM_STATE; - itemInfo.fState = fState; - if (!SetMenuItemInfo(ps_menu, i, TRUE, &itemInfo)) { - DEBUG_LOG(("PS Error: could not set state %1 to menu item %2, old state %3, error %4").arg(fState).arg(itemInfo.wID).arg(fOldState).arg(GetLastError())); - DestroyMenu(ps_menu); - ps_menu = 0; - break; - } - } - } else { - DEBUG_LOG(("PS Error: could not get state, menu item %1 of %2, error %3").arg(i).arg(itemCount).arg(GetLastError())); - DestroyMenu(ps_menu); - ps_menu = 0; - break; - } - }*/ } void PsMainWindow::psUpdateMargins() { - /*if (!useDWM) return; - - RECT r, a; - - GetClientRect(ps_hWnd, &r); - a = r; - - LONG style = GetWindowLong(ps_hWnd, GWL_STYLE), styleEx = GetWindowLong(ps_hWnd, GWL_EXSTYLE); - AdjustWindowRectEx(&a, style, false, styleEx); - simpleMargins = QMargins(a.left - r.left, a.top - r.top, r.right - a.right, r.bottom - a.bottom); - if (style & WS_MAXIMIZE) { - RECT w, m; - GetWindowRect(ps_hWnd, &w); - m = w; - - HMONITOR hMonitor = MonitorFromRect(&w, MONITOR_DEFAULTTONEAREST); - if (hMonitor) { - MONITORINFO mi; - mi.cbSize = sizeof(mi); - GetMonitorInfo(hMonitor, &mi); - m = mi.rcWork; - } - - dleft = w.left - m.left; - dtop = w.top - m.top; - - margins.setLeft(simpleMargins.left() - w.left + m.left); - margins.setRight(simpleMargins.right() - m.right + w.right); - margins.setBottom(simpleMargins.bottom() - m.bottom + w.bottom); - margins.setTop(simpleMargins.top() - w.top + m.top); - } else { - margins = simpleMargins; - dleft = dtop = 0; - } - - QPlatformNativeInterface *i = QGuiApplication::platformNativeInterface(); - i->setWindowProperty(windowHandle()->handle(), "WindowsCustomMargins", QVariant::fromValue(margins)); - if (!themeInited) { - themeInited = true; - if (useTheme) { - if (QSysInfo::WindowsVersion < QSysInfo::WV_WINDOWS8) { - setWindowTheme(ps_hWnd, L" ", L" "); - QApplication::setStyle(QStyleFactory::create("Windows")); - } - } - }*/ } void PsMainWindow::psFlash() { - /*if (GetForegroundWindow() == ps_hWnd) return; - - FLASHWINFO info; - info.cbSize = sizeof(info); - info.hwnd = ps_hWnd; - info.dwFlags = FLASHW_ALL; - info.dwTimeout = 0; - info.uCount = 1; - FlashWindowEx(&info);*/ + _private.startBounce(); } -/*HWND PsMainWindow::psHwnd() const { - return ps_hWnd; -} - -HMENU PsMainWindow::psMenu() const { - return ps_menu; -}*/ - -/*void PsMainWindow::psDestroyIcons() { - if (ps_iconBig) { - DestroyIcon(ps_iconBig); - ps_iconBig = 0; - } - if (ps_iconSmall) { - DestroyIcon(ps_iconSmall); - ps_iconSmall = 0; - } - if (ps_iconOverlay) { - DestroyIcon(ps_iconOverlay); - ps_iconOverlay = 0; - } -}*/ - PsMainWindow::~PsMainWindow() { finished = true; - //if (ps_menu) DestroyMenu(ps_menu); - //psDestroyIcons(); - //_psShadowWindows.destroy(); - //psClearNotifyFast(); - //if (ps_tbHider_hWnd) DestroyWindow(ps_tbHider_hWnd); + psClearNotifyFast(); } -void PsMainWindow::psNotify(History *history) { - /*if (App::quiting()) return; - if (!cDesktopNotify()) { - history->clearNotifyFrom(); +void PsMainWindow::psNotify(History *history, MsgId msgId) { + if (App::quiting() || !history->notifyFrom) return; + + bool haveSetting = (history->peer->notify != UnknownNotifySettings); + if (haveSetting) { + if (history->peer->notify != EmptyNotifySettings && history->peer->notify->mute > unixtime()) { + history->clearNotifyFrom(); + return; + } + } else { + App::wnd()->getNotifySetting(MTP_inputNotifyPeer(history->peer->input)); } - if (notifyHistories.constFind(history) != notifyHistories.cend()) return; - notifyHistories.insert(history); - psShowNextNotify();*/ + + uint64 ms = getms() + NotifyWaitTimeout; + notifyWhenAlerts[history].insert(ms); + if (cDesktopNotify()) { + NotifyWhenMaps::iterator i = notifyWhenMaps.find(history); + if (i == notifyWhenMaps.end()) { + i = notifyWhenMaps.insert(history, NotifyWhenMap()); + } + if (i.value().constFind(msgId) == i.value().cend()) { + i.value().insert(msgId, ms); + } + NotifyWaiters *addTo = haveSetting ? ¬ifyWaiters : ¬ifySettingWaiters; + if (addTo->constFind(history) == addTo->cend()) { + addTo->insert(history, NotifyWaiter(msgId, ms)); + } + } + if (haveSetting) { + if (!notifyWaitTimer.isActive()) { + notifyWaitTimer.start(NotifyWaitTimeout); + } + } +} + +void PsMainWindow::psNotifyFire() { + psShowNextNotify(); +} + +void PsMainWindow::psNotifySettingGot() { + int32 t = unixtime(); + for (NotifyWaiters::iterator i = notifySettingWaiters.begin(); i != notifySettingWaiters.end();) { + History *history = i.key(); + if (history->peer->notify == UnknownNotifySettings) { + ++i; + } else { + if (history->peer->notify == EmptyNotifySettings || history->peer->notify->mute <= t) { + notifyWaiters.insert(i.key(), i.value()); + } + i = notifySettingWaiters.erase(i); + } + } + notifyWaitTimer.stop(); + psShowNextNotify(); } void PsMainWindow::psClearNotify(History *history) { - /*if (!history) { + if (!history) { for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { (*i)->unlinkHistory(); } - for (NotifyHistories::const_iterator i = notifyHistories.cbegin(), e = notifyHistories.cend(); i != e; ++i) { - (*i)->clearNotifyFrom(); + _private.clearNotifies(); + for (NotifyWhenMaps::const_iterator i = notifyWhenMaps.cbegin(), e = notifyWhenMaps.cend(); i != e; ++i) { + i.key()->clearNotifyFrom(); } - notifyHistories.clear(); + notifyWaiters.clear(); + notifySettingWaiters.clear(); + notifyWhenMaps.clear(); return; } - notifyHistories.remove(history); + notifyWaiters.remove(history); + notifySettingWaiters.remove(history); for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { (*i)->unlinkHistory(history); - }*/ + } + _private.clearNotifies(history->peer->id); + notifyWhenMaps.remove(history); + notifyWhenAlerts.remove(history); } void PsMainWindow::psClearNotifyFast() { - /*notifyHistories.clear(); + notifyWaiters.clear(); + notifySettingWaiters.clear(); for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { (*i)->deleteLater(); } - notifyWindows.clear();*/ + _private.clearNotifies(); + notifyWindows.clear(); + notifyWhenMaps.clear(); + notifyWhenAlerts.clear(); } -/*void PsMainWindow::psShowNextNotify(PsNotifyWindow *remove) { - if (App::quiting()) return; +void PsMainWindow::psActivateNotifies() { + if (cCustomNotifies()) { + for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + _private.activateWnd((*i)->winId()); + } + } +} +namespace { + QRect _monitorRect; + uint64 _monitorLastGot = 0; + QRect _desktopRect() { + uint64 tnow = getms(); + if (tnow > _monitorLastGot + 1000 || tnow < _monitorLastGot) { + _monitorLastGot = tnow; + _monitorRect = QApplication::desktop()->availableGeometry(App::wnd()); + } + return _monitorRect; + } +} + +void PsMainWindow::psShowNextNotify(PsNotifyWindow *remove) { + if (App::quiting()) return; + int32 count = NotifyWindows; if (remove) { for (PsNotifyWindows::iterator i = notifyWindows.begin(), e = notifyWindows.end(); i != e; ++i) { @@ -1384,73 +517,186 @@ void PsMainWindow::psClearNotifyFast() { } } } - QRect r = QApplication::desktop()->availableGeometry(App::wnd()); - int32 x = r.width() - st::notifyWidth - st::notifyDeltaX, y = r.bottom() - st::notifyHeight - st::notifyDeltaY; - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - int32 ind = (*i)->index(); - if (ind < 0) continue; - --count; - } - while (count > 0) { - HistoryItem *notify = 0; - for (NotifyHistories::iterator i = notifyHistories.begin(), e = notifyHistories.end(); i != e;) { - if ((*i)->notifyFrom) { - if (!notify || (*i)->notifyFrom->date < notify->date) { - notify = (*i)->notifyFrom; - } - ++i; - } else { - i = notifyHistories.erase(i); + + uint64 ms = getms(), nextAlert = 0; + bool alert = false; + for (NotifyWhenAlerts::iterator i = notifyWhenAlerts.begin(); i != notifyWhenAlerts.end();) { + while (!i.value().isEmpty() && *i.value().begin() <= ms) { + i.value().erase(i.value().begin()); + NotifySettingsPtr n = i.key()->peer->notify; + if (n == EmptyNotifySettings || (n != UnknownNotifySettings && n->mute <= unixtime())) { + alert = true; } } - if (notify) { - notifyWindows.push_back(new PsNotifyWindow(notify, x, y)); - notify->history()->getNextNotifyFrom(); - --count; + if (i.value().isEmpty()) { + i = notifyWhenAlerts.erase(i); + } else { + if (!nextAlert || nextAlert > *i.value().begin()) { + nextAlert = *i.value().begin(); + } + ++i; + } + } + if (alert) { + psFlash(); + App::playSound(); + } + + if (cCustomNotifies()) { + for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + int32 ind = (*i)->index(); + if (ind < 0) continue; + --count; + } + } + if (count <= 0 || !cDesktopNotify()) { + if (nextAlert) { + notifyWaitTimer.start(nextAlert - ms); + } + return; + } + + QRect r = _desktopRect(); + int32 x = r.x() + r.width() - st::notifyWidth - st::notifyDeltaX, y = r.y() + r.height() - st::notifyHeight - st::notifyDeltaY; + while (count > 0) { + uint64 next = 0; + HistoryItem *notifyItem = 0; + NotifyWaiters::iterator notifyWaiter; + for (NotifyWaiters::iterator i = notifyWaiters.begin(); i != notifyWaiters.end(); ++i) { + History *history = i.key(); + if (history->notifyFrom && history->notifyFrom->id != i.value().msg) { + NotifyWhenMaps::iterator j = notifyWhenMaps.find(history); + if (j == notifyWhenMaps.end()) { + history->clearNotifyFrom(); + i = notifyWaiters.erase(i); + continue; + } + do { + NotifyWhenMap::const_iterator k = j.value().constFind(history->notifyFrom->id); + if (k != j.value().cend()) { + i.value().msg = k.key(); + i.value().when = k.value(); + break; + } + history->getNextNotifyFrom(); + } while (history->notifyFrom); + } + if (!history->notifyFrom) { + notifyWhenMaps.remove(history); + i = notifyWaiters.erase(i); + continue; + } + uint64 when = i.value().when; + if (!notifyItem || next > when) { + next = when; + notifyItem = history->notifyFrom; + notifyWaiter = i; + } + } + if (notifyItem) { + if (next > ms) { + if (nextAlert && nextAlert < next) { + next = nextAlert; + nextAlert = 0; + } + notifyWaitTimer.start(next - ms); + break; + } else { + if (cCustomNotifies()) { + PsNotifyWindow *notify = new PsNotifyWindow(notifyItem, x, y); + notifyWindows.push_back(notify); + notify->hide(); + _private.holdOnTop(notify->winId()); + notify->show(); + _private.showOverAll(notify->winId()); + --count; + } else { + _private.showNotify(notifyItem->history()->peer->id, notifyItem->history()->peer->name.toUtf8().constData(), notifyItem->notificationHeader().toUtf8().constData(), notifyItem->notificationText().toUtf8().constData()); + } + + uint64 ms = getms(); + History *history = notifyItem->history(); + history->getNextNotifyFrom(); + NotifyWhenMaps::iterator j = notifyWhenMaps.find(history); + if (j == notifyWhenMaps.end() || !history->notifyFrom) { + history->clearNotifyFrom(); + notifyWaiters.erase(notifyWaiter); + if (j != notifyWhenMaps.end()) notifyWhenMaps.erase(j); + continue; + } + j.value().remove(notifyItem->id); + do { + NotifyWhenMap::const_iterator k = j.value().constFind(history->notifyFrom->id); + if (k != j.value().cend()) { + notifyWaiter.value().msg = k.key(); + notifyWaiter.value().when = k.value(); + break; + } + history->getNextNotifyFrom(); + } while (history->notifyFrom); + if (!history->notifyFrom) { + notifyWaiters.erase(notifyWaiter); + notifyWhenMaps.erase(j); + continue; + } + } } else { break; } } + if (nextAlert) { + notifyWaitTimer.start(nextAlert - ms); + } + count = NotifyWindows - count; for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { int32 ind = (*i)->index(); if (ind < 0) continue; --count; (*i)->moveTo(x, y - count * (st::notifyHeight + st::notifyDeltaY)); - } -}*/ + } +} void PsMainWindow::psStopHiding() { - /*for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->stopHiding(); - }*/ + if (cCustomNotifies()) { + for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + (*i)->stopHiding(); + } + } } void PsMainWindow::psStartHiding() { - /*for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->startHiding(); - }*/ + if (cCustomNotifies()) { + for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + (*i)->startHiding(); + } + } } void PsMainWindow::psUpdateNotifies() { - /*for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->updatePeerPhoto(); - }*/ + if (cCustomNotifies()) { + for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + (*i)->updatePeerPhoto(); + } + } } -/*PsNotifyWindow::PsNotifyWindow(HistoryItem *item, int32 x, int32 y) : history(item->history()), aOpacity(0), _index(0), hiding(false), started(GetTickCount()), - alphaDuration(st::notifyFastAnim), posDuration(st::notifyFastAnim), aY(y + st::notifyHeight + st::notifyDeltaY), close(this, st::notifyClose), aOpacityFunc(st::notifyFastAnimFunc) { - +PsNotifyWindow::PsNotifyWindow(HistoryItem *item, int32 x, int32 y) : history(item->history()), aOpacity(0), _index(0), hiding(false),// started(GetTickCount()), +alphaDuration(st::notifyFastAnim), posDuration(st::notifyFastAnim), aY(y + st::notifyHeight + st::notifyDeltaY), close(this, st::notifyClose), aOpacityFunc(st::notifyFastAnimFunc) { + int32 w = st::notifyWidth, h = st::notifyHeight; - QImage img(w, h, QImage::Format_ARGB32_Premultiplied); + QImage img(w * cRetinaFactor(), h * cRetinaFactor(), QImage::Format_ARGB32_Premultiplied); + if (cRetina()) { + img.setDevicePixelRatio(cRetinaFactor()); + } img.fill(st::notifyBG->c); - + { QPainter p(&img); p.setPen(st::notifyBorder->p); p.setBrush(Qt::NoBrush); p.drawRect(0, 0, w - 1, h - 1); - + if (history->peer->photo->loaded()) { p.drawPixmap(st::notifyPhotoPos.x(), st::notifyPhotoPos.y(), history->peer->photo->pix(st::notifyPhotoSize)); } else { @@ -1458,15 +704,15 @@ void PsMainWindow::psUpdateNotifies() { peerPhoto = history->peer->photo; peerPhoto->load(true, true); } - + int32 itemWidth = w - st::notifyPhotoPos.x() - st::notifyPhotoSize - st::notifyTextLeft - st::notifyClosePos.x() - st::notifyClose.width; - + QRect rectForName(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyTextTop, itemWidth, st::msgNameFont->height); if (history->peer->chat) { p.drawPixmap(QPoint(rectForName.left() + st::dlgChatImgLeft, rectForName.top() + st::dlgChatImgTop), App::sprite(), st::dlgChatImg); rectForName.setLeft(rectForName.left() + st::dlgChatImgSkip); } - + QDateTime now(QDateTime::currentDateTime()), lastTime(item->date); QDate nowDate(now.date()), lastDate(lastTime.date()); QString dt = lastTime.toString(qsl("hh:mm")); @@ -1475,49 +721,48 @@ void PsMainWindow::psUpdateNotifies() { p.setFont(st::dlgDateFont->f); p.setPen(st::dlgDateColor->p); p.drawText(rectForName.left() + rectForName.width() + st::dlgDateSkip, rectForName.top() + st::dlgHistFont->ascent, dt); - + const HistoryItem *textCachedFor = 0; Text itemTextCache(itemWidth); bool active = false; item->drawInDialog(p, QRect(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyItemTop + st::msgNameFont->height, itemWidth, 2 * st::dlgFont->height), active, textCachedFor, itemTextCache); - + p.setPen(st::dlgNameColor->p); history->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); } pm = QPixmap::fromImage(img); - + hideTimer.setSingleShot(true); connect(&hideTimer, SIGNAL(timeout()), this, SLOT(hideByTimer())); - + inputTimer.setSingleShot(true); connect(&inputTimer, SIGNAL(timeout()), this, SLOT(checkLastInput())); - + connect(&close, SIGNAL(clicked()), this, SLOT(unlinkHistory())); close.setAcceptBoth(true); close.move(w - st::notifyClose.width - st::notifyClosePos.x(), st::notifyClosePos.y()); close.show(); - + aY.start(y); setGeometry(x, aY.current(), st::notifyWidth, st::notifyHeight); - + aOpacity.start(1); setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint); - + setAttribute(Qt::WA_MacAlwaysShowToolWindow); + show(); - + setWindowOpacity(aOpacity.current()); - + alphaDuration = posDuration = st::notifyFastAnim; anim::start(this); - + checkLastInput(); } void PsNotifyWindow::checkLastInput() { - LASTINPUTINFO lii; - lii.cbSize = sizeof(LASTINPUTINFO); - BOOL res = GetLastInputInfo(&lii); - if (!res || lii.dwTime >= started) { + // TODO + if (true) { hideTimer.start(st::notifyWaitLongHide); } else { inputTimer.start(300); @@ -1556,12 +801,12 @@ void PsNotifyWindow::unlinkHistory(History *hist) { } } -void PsNotifyWindow::enterEvent(QEvent *e) { +void PsNotifyWindow::enterEvent(QEvent */*e*/) { if (!history) return; if (App::wnd()) App::wnd()->psStopHiding(); } -void PsNotifyWindow::leaveEvent(QEvent *e) { +void PsNotifyWindow::leaveEvent(QEvent */*e*/) { if (!history) return; App::wnd()->psStartHiding(); } @@ -1578,6 +823,7 @@ void PsNotifyWindow::mousePressEvent(QMouseEvent *e) { App::wnd()->showFromTray(); App::wnd()->hideSettings(); App::main()->showPeer(history->peer->id, false, true); + unlinkHistory(); e->ignore(); } } @@ -1631,28 +877,28 @@ bool PsNotifyWindow::animStep(float64 ms) { } move(x(), aY.current()); update(); - return (dtAlpha < 1 || !hiding && dtPos < 1); + return (dtAlpha < 1 || (!hiding && dtPos < 1)); } PsNotifyWindow::~PsNotifyWindow() { if (App::wnd()) App::wnd()->psShowNextNotify(this); -}*/ +} -PsApplication::PsApplication(int argc, char *argv[]) : QApplication(argc, argv) { +PsApplication::PsApplication(int &argc, char **argv) : QApplication(argc, argv) { } void PsApplication::psInstallEventFilter() { - /*delete _psEventFilter; + delete _psEventFilter; _psEventFilter = new _PsEventFilter(); - installNativeEventFilter(_psEventFilter);*/ + installNativeEventFilter(_psEventFilter); } PsApplication::~PsApplication() { - //delete _psEventFilter; - //_psEventFilter = 0; + delete _psEventFilter; + _psEventFilter = 0; } -PsUpdateDownloader::PsUpdateDownloader(QThread *thread, const MTPDhelp_appUpdate &update) : already(0), reply(0), full(0) { +PsUpdateDownloader::PsUpdateDownloader(QThread *thread, const MTPDhelp_appUpdate &update) : reply(0), already(0), full(0) { updateUrl = qs(update.vurl); moveToThread(thread); manager.moveToThread(thread); @@ -1662,7 +908,7 @@ PsUpdateDownloader::PsUpdateDownloader(QThread *thread, const MTPDhelp_appUpdate initOutput(); } -PsUpdateDownloader::PsUpdateDownloader(QThread *thread, const QString &url) : already(0), reply(0), full(0) { +PsUpdateDownloader::PsUpdateDownloader(QThread *thread, const QString &url) : reply(0), already(0), full(0) { updateUrl = url; moveToThread(thread); manager.moveToThread(thread); @@ -2212,17 +1458,15 @@ QString psAppDataPath() { return QString(); } -QString psCurrentExeDirectory() { - /*LPWSTR *args; - int argsCount; - args = CommandLineToArgvW(GetCommandLine(), &argsCount); - if (args) { - QFileInfo info(QDir::fromNativeSeparators(QString::fromWCharArray(args[0]))); - if (info.isFile()) { - return info.absoluteDir().absolutePath() + '/'; - } - LocalFree(args); - }*/ +QString psCurrentExeDirectory(int argc, char *argv[]) { + QString first = argc ? QString::fromLocal8Bit(argv[0]) : QString(); + if (!first.isEmpty()) { + QFileInfo info(first); + if (info.exists()) { + QDir result(info.absolutePath() + qsl("/../../..")); + return result.absolutePath() + '/'; + } + } return QString(); } diff --git a/Telegram/SourceFiles/pspecific_mac.h b/Telegram/SourceFiles/pspecific_mac.h index 276ddc274..5d3ff10b1 100644 --- a/Telegram/SourceFiles/pspecific_mac.h +++ b/Telegram/SourceFiles/pspecific_mac.h @@ -1,5 +1,24 @@ +/* +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 +*/ #pragma once +#include "pspecific_mac_p.h" + inline QString psServerPrefix() { return qsl("/tmp/"); } @@ -10,44 +29,44 @@ inline void psCheckLocalSocket(const QString &serverName) { } } -/* + class PsNotifyWindow : public QWidget, public Animated { Q_OBJECT - + public: - + PsNotifyWindow(HistoryItem *item, int32 x, int32 y); - + void enterEvent(QEvent *e); void leaveEvent(QEvent *e); void mousePressEvent(QMouseEvent *e); void paintEvent(QPaintEvent *e); - + bool animStep(float64 ms); void animHide(float64 duration, anim::transition func); void startHiding(); void stopHiding(); void moveTo(int32 x, int32 y, int32 index = -1); - + void updatePeerPhoto(); - + int32 index() const { return history ? _index : -1; } - + ~PsNotifyWindow(); - -public slots: - + + public slots: + void hideByTimer(); void checkLastInput(); - + void unlinkHistory(History *hist = 0); - + private: - - DWORD started; - + +// DWORD started; + History *history; IconedButton close; QPixmap pm; @@ -59,10 +78,19 @@ private: anim::transition aOpacityFunc; anim::ivalue aY; ImagePtr peerPhoto; - + }; -typedef QList PsNotifyWindows;*/ +typedef QList PsNotifyWindows; + +class MacPrivate : public PsMacWindowPrivate { +public: + + void activeSpaceChanged(); + void notifyClicked(unsigned long long peer); + void notifyReplied(unsigned long long peer, const char *str); + +}; class PsMainWindow : public QMainWindow { Q_OBJECT @@ -76,8 +104,6 @@ public: void psInitFrameless(); void psInitSize(); - //HWND psHwnd() const; - //HMENU psMenu() const; void psFirstShow(); void psInitSysMenu(); @@ -88,9 +114,10 @@ public: bool psHandleTitle(); void psFlash(); + void psNotifySettingGot(); - bool psIsActive() const; - bool psIsOnline(int windowState) const; + bool psIsActive(int state = -1) const; + bool psIsOnline(int state) const; void psUpdateWorkmode(); @@ -99,18 +126,19 @@ public: return false; } - void psNotify(History *history); + void psNotify(History *history, MsgId msgId); void psClearNotify(History *history = 0); void psClearNotifyFast(); - //void psShowNextNotify(PsNotifyWindow *remove = 0); + void psShowNextNotify(PsNotifyWindow *remove = 0); + void psActivateNotifies(); void psStopHiding(); void psStartHiding(); - void psUpdateNotifies(); + void psUpdateNotifies(); bool psPosInited() const { return posInited; } - + ~PsMainWindow(); public slots: @@ -119,6 +147,7 @@ public slots: void psUpdateCounter(); void psSavePosition(Qt::WindowState state = Qt::WindowActive); void psIdleTimeout(); + void psNotifyFire(); protected: @@ -128,23 +157,34 @@ protected: QImage icon16, icon32, icon256; virtual void setupTrayIcon() { } -/* - typedef QSet NotifyHistories; - NotifyHistories notifyHistories; + + typedef QMap NotifyWhenMap; + typedef QMap NotifyWhenMaps; + NotifyWhenMaps notifyWhenMaps; + struct NotifyWaiter { + NotifyWaiter(MsgId msg, uint64 when) : msg(msg), when(when) { + } + MsgId msg; + uint64 when; + }; + typedef QMap NotifyWaiters; + NotifyWaiters notifyWaiters; + NotifyWaiters notifySettingWaiters; + QTimer notifyWaitTimer; + + typedef QSet NotifyWhenAlert; + typedef QMap NotifyWhenAlerts; + NotifyWhenAlerts notifyWhenAlerts; + PsNotifyWindows notifyWindows; - QTimer psUpdatedPositionTimer;*/ + QTimer psUpdatedPositionTimer; -/*private: - HWND ps_hWnd; - HWND ps_tbHider_hWnd; - HMENU ps_menu; - HICON ps_iconBig, ps_iconSmall, ps_iconOverlay; +private: + MacPrivate _private; mutable bool psIdle; mutable QTimer psIdleTimer; - - void psDestroyIcons();*/ }; @@ -153,7 +193,7 @@ class PsApplication : public QApplication { public: - PsApplication(int argc, char *argv[]); + PsApplication(int &argc, char **argv); void psInstallEventFilter(); ~PsApplication(); @@ -212,7 +252,7 @@ QString psLocalServerPrefix(); QString psCurrentCountry(); QString psCurrentLanguage(); QString psAppDataPath(); -QString psCurrentExeDirectory(); +QString psCurrentExeDirectory(int argc, char *argv[]); void psAutoStart(bool start, bool silent = false); int psCleanup(); diff --git a/Telegram/SourceFiles/pspecific_mac.mm b/Telegram/SourceFiles/pspecific_mac.mm new file mode 100644 index 000000000..e145ff29c --- /dev/null +++ b/Telegram/SourceFiles/pspecific_mac.mm @@ -0,0 +1,2466 @@ +#include "stdafx.h" +#include "pspecific.h" + +#include "lang.h" +#include "application.h" +#include "mainwidget.h" + +#define min(a, b) ((a) < (b) ? (a) : (b)) +#define max(a, b) ((a) < (b) ? (b) : (a)) + +namespace { + bool frameless = true; + bool useDWM = false; + bool useTheme = false; + bool useOpenAs = false; + bool themeInited = false; + bool finished = true; + int menuShown = 0, menuHidden = 0; + int dleft = 0, dtop = 0; + QMargins simpleMargins, margins; + //HICON bigIcon = 0, smallIcon = 0, overlayIcon = 0; + + //UINT tbCreatedMsgId = 0; + //ITaskbarList3 *tbListInterface = 0; + + /*HWND createTaskbarHider() { + HINSTANCE appinst = (HINSTANCE)GetModuleHandle(0); + HWND hWnd = 0; + + QString cn = QString("TelegramTaskbarHider"); + LPCWSTR _cn = (LPCWSTR)cn.utf16(); + WNDCLASSEX wc; + + wc.cbSize = sizeof(wc); + wc.style = 0; + wc.lpfnWndProc = DefWindowProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = appinst; + wc.hIcon = 0; + wc.hCursor = 0; + wc.hbrBackground = 0; + wc.lpszMenuName = NULL; + wc.lpszClassName = _cn; + wc.hIconSm = 0; + if (!RegisterClassEx(&wc)) { + DEBUG_LOG(("Application Error: could not register taskbar hider window class, error: %1").arg(GetLastError())); + return hWnd; + } + + hWnd = CreateWindowEx(WS_EX_TOOLWINDOW, _cn, 0, WS_POPUP, 0, 0, 0, 0, 0, 0, appinst, 0); + if (!hWnd) { + DEBUG_LOG(("Application Error: could not create taskbar hider window class, error: %1").arg(GetLastError())); + return hWnd; + } + return hWnd; + } + + enum { + _PsShadowMoved = 0x01, + _PsShadowResized = 0x02, + _PsShadowShown = 0x04, + _PsShadowHidden = 0x08, + _PsShadowActivate = 0x10, + }; + + enum { + _PsInitHor = 0x01, + _PsInitVer = 0x02, + }; + + int32 _psSize = 0; + class _PsShadowWindows { + public: + + _PsShadowWindows() : screenDC(0), max_w(0), max_h(0), _x(0), _y(0), _w(0), _h(0), hidden(true), r(0), g(0), b(0), noKeyColor(RGB(255, 255, 255)) { + for (int i = 0; i < 4; ++i) { + dcs[i] = 0; + bitmaps[i] = 0; + hwnds[i] = 0; + } + } + + void setColor(QColor c) { + r = c.red(); + g = c.green(); + b = c.blue(); + + if (!hwnds[0]) return; + Gdiplus::SolidBrush brush(Gdiplus::Color(_alphas[0], r, g, b)); + for (int i = 0; i < 4; ++i) { + Gdiplus::Graphics graphics(dcs[i]); + graphics.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); + if ((i % 2) && _h || !(i % 2) && _w) { + graphics.FillRectangle(&brush, 0, 0, (i % 2) ? _size : _w, (i % 2) ? _h : _size); + } + } + initCorners(); + + _x = _y = _w = _h = 0; + update(_PsShadowMoved | _PsShadowResized); + } + + bool init(QColor c) { + style::rect topLeft = st::wndShadow; + _fullsize = topLeft.width(); + _shift = st::wndShadowShift; + QImage cornersImage(_fullsize, _fullsize, QImage::Format_ARGB32_Premultiplied); + { + QPainter p(&cornersImage); + p.drawPixmap(QPoint(0, 0), App::sprite(), topLeft); + } + uchar *bits = cornersImage.bits(); + if (bits) { + for ( + quint32 *p = (quint32*)bits, *end = (quint32*)(bits + cornersImage.byteCount()); + p < end; + ++p + ) { + *p = (*p ^ 0x00ffffff) << 24; + } + } + + _metaSize = _fullsize + 2 * _shift; + _alphas.reserve(_metaSize); + _colors.reserve(_metaSize * _metaSize); + for (int32 j = 0; j < _metaSize; ++j) { + for (int32 i = 0; i < _metaSize; ++i) { + _colors.push_back((i < 2 * _shift || j < 2 * _shift) ? 1 : qMax(BYTE(1), BYTE(cornersImage.pixel(QPoint(i - 2 * _shift, j - 2 * _shift)) >> 24))); + } + } + uchar prev = 0; + for (int32 i = 0; i < _metaSize; ++i) { + uchar a = _colors[(_metaSize - 1) * _metaSize + i]; + if (a < prev) break; + + _alphas.push_back(a); + prev = a; + } + _psSize = _size = _alphas.size() - 2 * _shift; + + setColor(c); + + Gdiplus::GdiplusStartupInput gdiplusStartupInput; + ULONG_PTR gdiplusToken; + Gdiplus::Status gdiRes = Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); + + if (gdiRes != Gdiplus::Ok) { + DEBUG_LOG(("Application Error: could not init GDI+, error: %1").arg((int)gdiRes)); + return false; + } + blend.AlphaFormat = AC_SRC_ALPHA; + blend.SourceConstantAlpha = 255; + blend.BlendFlags = 0; + blend.BlendOp = AC_SRC_OVER; + + screenDC = GetDC(0); + if (!screenDC) return false; + + QRect avail(QDesktopWidget().availableGeometry()); + max_w = avail.width(); + if (max_w < st::wndMinWidth) max_w = st::wndMinWidth; + max_h = avail.height(); + if (max_h < st::wndMinHeight) max_h = st::wndMinHeight; + + HINSTANCE appinst = (HINSTANCE)GetModuleHandle(0); + + for (int i = 0; i < 4; ++i) { + QString cn = QString("TelegramShadow%1").arg(i); + LPCWSTR _cn = (LPCWSTR)cn.utf16(); + WNDCLASSEX wc; + + wc.cbSize = sizeof(wc); + wc.style = 0; + wc.lpfnWndProc = wndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = appinst; + wc.hIcon = 0; + wc.hCursor = 0; + wc.hbrBackground = 0; + wc.lpszMenuName = NULL; + wc.lpszClassName = _cn; + wc.hIconSm = 0; + if (!RegisterClassEx(&wc)) { + DEBUG_LOG(("Application Error: could not register shadow window class %1, error: %2").arg(i).arg(GetLastError())); + destroy(); + return false; + } + + hwnds[i] = CreateWindowEx(WS_EX_LAYERED | WS_EX_TOOLWINDOW, _cn, 0, WS_POPUP, 0, 0, 0, 0, 0, 0, appinst, 0); + if (!hwnds[i]) { + DEBUG_LOG(("Application Error: could not create shadow window class %1, error: %2").arg(i).arg(GetLastError())); + destroy(); + return false; + } + + dcs[i] = CreateCompatibleDC(screenDC); + if (!dcs[i]) { + DEBUG_LOG(("Application Error: could not create dc for shadow window class %1, error: %2").arg(i).arg(GetLastError())); + destroy(); + return false; + } + + bitmaps[i] = CreateCompatibleBitmap(screenDC, (i % 2) ? _size : max_w, (i % 2) ? max_h : _size); + if (!bitmaps[i]) { + DEBUG_LOG(("Application Error: could not create bitmap for shadow window class %1, error: %2").arg(i).arg(GetLastError())); + destroy(); + return false; + } + + SelectObject(dcs[i], bitmaps[i]); + } + + initCorners(); + return true; + } + + void initCorners(int directions = (_PsInitHor | _PsInitVer)) { + bool hor = (directions & _PsInitHor), ver = (directions & _PsInitVer); + Gdiplus::Graphics graphics0(dcs[0]), graphics1(dcs[1]), graphics2(dcs[2]), graphics3(dcs[3]); + graphics0.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); + graphics1.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); + graphics2.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); + graphics3.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); + + Gdiplus::SolidBrush brush(Gdiplus::Color(_alphas[0], r, g, b)); + if (hor) graphics0.FillRectangle(&brush, 0, 0, _fullsize - (_size - _shift), 2 * _shift); + + if (ver) { + graphics1.FillRectangle(&brush, 0, 0, _size, 2 * _shift); + graphics3.FillRectangle(&brush, 0, 0, _size, 2 * _shift); + graphics1.FillRectangle(&brush, _size - _shift, 2 * _shift, _shift, _fullsize); + graphics3.FillRectangle(&brush, 0, 2 * _shift, _shift, _fullsize); + } + + if (hor) { + for (int j = 2 * _shift; j < _size; ++j) { + for (int k = 0; k < _fullsize - (_size - _shift); ++k) { + brush.SetColor(Gdiplus::Color(_colors[j * _metaSize + k + (_size + _shift)], r, g, b)); + graphics0.FillRectangle(&brush, k, j, 1, 1); + graphics2.FillRectangle(&brush, k, _size - (j - 2 * _shift) - 1, 1, 1); + } + } + for (int j = _size; j < _size + 2 * _shift; ++j) { + for (int k = 0; k < _fullsize - (_size - _shift); ++k) { + brush.SetColor(Gdiplus::Color(_colors[j * _metaSize + k + (_size + _shift)], r, g, b)); + graphics2.FillRectangle(&brush, k, _size - (j - 2 * _shift) - 1, 1, 1); + } + } + } + if (ver) { + for (int j = 2 * _shift; j < _fullsize + 2 * _shift; ++j) { + for (int k = _shift; k < _size; ++k) { + brush.SetColor(Gdiplus::Color(_colors[j * _metaSize + (k + _shift)], r, g, b)); + graphics1.FillRectangle(&brush, _size - k - 1, j, 1, 1); + graphics3.FillRectangle(&brush, k, j, 1, 1); + } + } + } + } + void verCorners(int h, Gdiplus::Graphics *pgraphics1, Gdiplus::Graphics *pgraphics3) { + Gdiplus::SolidBrush brush(Gdiplus::Color(_alphas[0], r, g, b)); + pgraphics1->FillRectangle(&brush, _size - _shift, h - _fullsize, _shift, _fullsize); + pgraphics3->FillRectangle(&brush, 0, h - _fullsize, _shift, _fullsize); + for (int j = 0; j < _fullsize; ++j) { + for (int k = _shift; k < _size; ++k) { + brush.SetColor(Gdiplus::Color(_colors[(j + 2 * _shift) * _metaSize + k + _shift], r, g, b)); + pgraphics1->FillRectangle(&brush, _size - k - 1, h - j - 1, 1, 1); + pgraphics3->FillRectangle(&brush, k, h - j - 1, 1, 1); + } + } + } + void horCorners(int w, Gdiplus::Graphics *pgraphics0, Gdiplus::Graphics *pgraphics2) { + Gdiplus::SolidBrush brush(Gdiplus::Color(_alphas[0], r, g, b)); + pgraphics0->FillRectangle(&brush, w - 2 * _size - (_fullsize - (_size - _shift)), 0, _fullsize - (_size - _shift), 2 * _shift); + for (int j = 2 * _shift; j < _size; ++j) { + for (int k = 0; k < _fullsize - (_size - _shift); ++k) { + brush.SetColor(Gdiplus::Color(_colors[j * _metaSize + k + (_size + _shift)], r, g, b)); + pgraphics0->FillRectangle(&brush, w - 2 * _size - k - 1, j, 1, 1); + pgraphics2->FillRectangle(&brush, w - 2 * _size - k - 1, _size - (j - 2 * _shift) - 1, 1, 1); + } + } + for (int j = _size; j < _size + 2 * _shift; ++j) { + for (int k = 0; k < _fullsize - (_size - _shift); ++k) { + brush.SetColor(Gdiplus::Color(_colors[j * _metaSize + k + (_size + _shift)], r, g, b)); + pgraphics2->FillRectangle(&brush, w - 2 * _size - k - 1, _size - (j - 2 * _shift) - 1, 1, 1); + } + } + } + + void update(int changes, WINDOWPOS *pos = 0) { + HWND hwnd = Application::wnd() ? Application::wnd()->psHwnd() : 0; + if (!hwnd || !hwnds[0]) return; + + if (changes == _PsShadowActivate) { + for (int i = 0; i < 4; ++i) { + SetWindowPos(hwnds[i], hwnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); + } + return; + } + + if (changes & _PsShadowHidden) { + if (!hidden) { + for (int i = 0; i < 4; ++i) { + hidden = true; + ShowWindow(hwnds[i], SW_HIDE); + } + } + return; + } + if (!Application::wnd()->psPosInited()) return; + + int x = _x, y = _y, w = _w, h = _h; + if (pos && (!(pos->flags & SWP_NOMOVE) || !(pos->flags & SWP_NOSIZE) || !(pos->flags & SWP_NOREPOSITION))) { + if (!(pos->flags & SWP_NOMOVE)) { + x = pos->x - _size; + y = pos->y - _size; + } else if (pos->flags & SWP_NOSIZE) { + for (int i = 0; i < 4; ++i) { + SetWindowPos(hwnds[i], hwnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); + } + return; + } + if (!(pos->flags & SWP_NOSIZE)) { + w = pos->cx + 2 * _size; + h = pos->cy + 2 * _size; + } + } else { + RECT r; + GetWindowRect(hwnd, &r); + x = r.left - _size; + y = r.top - _size; + w = r.right + _size - x; + h = r.bottom + _size - y; + } + if (h < 2 * _fullsize + 2 * _shift) { + h = 2 * _fullsize + 2 * _shift; + } + if (w < 2 * (_fullsize + _shift)) { + w = 2 * (_fullsize + _shift); + } + + if (w != _w) { + int from = (_w > 2 * (_fullsize + _shift)) ? (_w - _size - _fullsize - _shift) : (_fullsize - (_size - _shift)); + int to = w - _size - _fullsize - _shift; + if (w > max_w) { + from = _fullsize - (_size - _shift); + max_w *= 2; + for (int i = 0; i < 4; i += 2) { + DeleteObject(bitmaps[i]); + bitmaps[i] = CreateCompatibleBitmap(screenDC, max_w, _size); + SelectObject(dcs[i], bitmaps[i]); + } + initCorners(_PsInitHor); + } + Gdiplus::Graphics graphics0(dcs[0]), graphics2(dcs[2]); + graphics0.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); + graphics2.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); + Gdiplus::SolidBrush brush(Gdiplus::Color(_alphas[0], r, g, b)); + if (to > from) { + graphics0.FillRectangle(&brush, from, 0, to - from, 2 * _shift); + for (int i = 2 * _shift; i < _size; ++i) { + Gdiplus::Pen pen(Gdiplus::Color(_alphas[i], r, g, b)); + graphics0.DrawLine(&pen, from, i, to, i); + graphics2.DrawLine(&pen, from, _size - (i - 2 * _shift) - 1, to, _size - (i - 2 * _shift) - 1); + } + for (int i = _size; i < _size + 2 * _shift; ++i) { + Gdiplus::Pen pen(Gdiplus::Color(_alphas[i], r, g, b)); + graphics2.DrawLine(&pen, from, _size - (i - 2 * _shift) - 1, to, _size - (i - 2 * _shift) - 1); + } + } + if (_w > w) { + graphics0.FillRectangle(&brush, w - _size - _fullsize - _shift, 0, _fullsize - (_size - _shift), _size); + graphics2.FillRectangle(&brush, w - _size - _fullsize - _shift, 0, _fullsize - (_size - _shift), _size); + } + horCorners(w, &graphics0, &graphics2); + POINT p0 = { x + _size, y }, p2 = { x + _size, y + h - _size }, f = { 0, 0 }; + SIZE s = { w - 2 * _size, _size }; + updateWindow(0, &p0, &s); + updateWindow(2, &p2, &s); + } else if (x != _x || y != _y) { + POINT p0 = { x + _size, y }, p2 = { x + _size, y + h - _size }; + updateWindow(0, &p0); + updateWindow(2, &p2); + } else if (h != _h) { + POINT p2 = { x + _size, y + h - _size }; + updateWindow(2, &p2); + } + + if (h != _h) { + int from = (_h > 2 * _fullsize + 2 * _shift) ? (_h - _fullsize) : (_fullsize + 2 * _shift); + int to = h - _fullsize; + if (h > max_h) { + from = (_fullsize + 2 * _shift); + max_h *= 2; + for (int i = 1; i < 4; i += 2) { + DeleteObject(bitmaps[i]); + bitmaps[i] = CreateCompatibleBitmap(dcs[i], _size, max_h); + SelectObject(dcs[i], bitmaps[i]); + } + initCorners(_PsInitVer); + } + Gdiplus::Graphics graphics1(dcs[1]), graphics3(dcs[3]); + graphics1.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); + graphics3.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); + + Gdiplus::SolidBrush brush(Gdiplus::Color(_alphas[0], r, g, b)); + if (to > from) { + graphics1.FillRectangle(&brush, _size - _shift, from, _shift, to - from); + graphics3.FillRectangle(&brush, 0, from, _shift, to - from); + for (int i = 2 * _shift; i < _size + _shift; ++i) { + Gdiplus::Pen pen(Gdiplus::Color(_alphas[i], r, g, b)); + graphics1.DrawLine(&pen, _size + _shift - i - 1, from, _size + _shift - i - 1, to); + graphics3.DrawLine(&pen, i - _shift, from, i - _shift, to); + } + } + if (_h > h) { + graphics1.FillRectangle(&brush, 0, h - _fullsize, _size, _fullsize); + graphics3.FillRectangle(&brush, 0, h - _fullsize, _size, _fullsize); + } + verCorners(h, &graphics1, &graphics3); + + POINT p1 = {x + w - _size, y}, p3 = {x, y}, f = {0, 0}; + SIZE s = { _size, h }; + updateWindow(1, &p1, &s); + updateWindow(3, &p3, &s); + } else if (x != _x || y != _y) { + POINT p1 = { x + w - _size, y }, p3 = { x, y }; + updateWindow(1, &p1); + updateWindow(3, &p3); + } else if (w != _w) { + POINT p1 = { x + w - _size, y }; + updateWindow(1, &p1); + } + _x = x; + _y = y; + _w = w; + _h = h; + + if (hidden && (changes & _PsShadowShown)) { + for (int i = 0; i < 4; ++i) { + SetWindowPos(hwnds[i], hwnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW | SWP_NOACTIVATE); + } + hidden = false; + } + } + + void updateWindow(int i, POINT *p, SIZE *s = 0) { + static POINT f = {0, 0}; + if (s) { + UpdateLayeredWindow(hwnds[i], (s ? screenDC : 0), p, s, (s ? dcs[i] : 0), (s ? (&f) : 0), noKeyColor, &blend, ULW_ALPHA); + } else { + SetWindowPos(hwnds[i], 0, p->x, p->y, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER); + } + } + + void destroy() { + for (int i = 0; i < 4; ++i) { + if (dcs[i]) DeleteDC(dcs[i]); + if (bitmaps[i]) DeleteObject(bitmaps[i]); + if (hwnds[i]) DestroyWindow(hwnds[i]); + dcs[i] = 0; + bitmaps[i] = 0; + hwnds[i] = 0; + } + if (screenDC) ReleaseDC(0, screenDC); + } + + private: + + int _x, _y, _w, _h; + int _metaSize, _fullsize, _size, _shift; + QVector _alphas, _colors; + + bool hidden; + + HWND hwnds[4]; + HDC dcs[4], screenDC; + HBITMAP bitmaps[4]; + int max_w, max_h; + BLENDFUNCTION blend; + + BYTE r, g, b; + COLORREF noKeyColor; + + static LRESULT CALLBACK _PsShadowWindows::wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); + + }; + _PsShadowWindows _psShadowWindows; + + LRESULT CALLBACK _PsShadowWindows::wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { + if (finished) return DefWindowProc(hwnd, msg, wParam, lParam); + + int i; + for (i = 0; i < 4; ++i) { + if (_psShadowWindows.hwnds[i] && hwnd == _psShadowWindows.hwnds[i]) { + break; + } + } + if (i == 4) return DefWindowProc(hwnd, msg, wParam, lParam); + + switch (msg) { + case WM_CLOSE: + Application::wnd()->close(); + break; + case WM_NCHITTEST: { + int32 xPos = GET_X_LPARAM(lParam), yPos = GET_Y_LPARAM(lParam); + switch (i) { + case 0: return HTTOP; + case 1: return (yPos < _psShadowWindows._y + _psSize) ? HTTOPRIGHT : ((yPos >= _psShadowWindows._y + _psShadowWindows._h - _psSize) ? HTBOTTOMRIGHT : HTRIGHT); + case 2: return HTBOTTOM; + case 3: return (yPos < _psShadowWindows._y + _psSize) ? HTTOPLEFT : ((yPos >= _psShadowWindows._y + _psShadowWindows._h - _psSize) ? HTBOTTOMLEFT : HTLEFT); + } + return HTTRANSPARENT; + } break; + + case WM_NCACTIVATE: return DefWindowProc(hwnd, msg, wParam, lParam); + case WM_NCLBUTTONDOWN: + case WM_NCLBUTTONUP: + case WM_NCLBUTTONDBLCLK: + case WM_NCMBUTTONDOWN: + case WM_NCMBUTTONUP: + case WM_NCMBUTTONDBLCLK: + case WM_NCRBUTTONDOWN: + case WM_NCRBUTTONUP: + case WM_NCRBUTTONDBLCLK: + case WM_NCXBUTTONDOWN: + case WM_NCXBUTTONUP: + case WM_NCXBUTTONDBLCLK: + case WM_NCMOUSEHOVER: + case WM_NCMOUSELEAVE: + case WM_NCMOUSEMOVE: + case WM_NCPOINTERUPDATE: + case WM_NCPOINTERDOWN: + case WM_NCPOINTERUP: + if (App::wnd() && App::wnd()->psHwnd()) { + if (msg == WM_NCLBUTTONDOWN) { + ::SetForegroundWindow(App::wnd()->psHwnd()); + } + LRESULT res = SendMessage(App::wnd()->psHwnd(), msg, wParam, lParam); + return res; + } + return 0; + break; + case WM_ACTIVATE: + if (App::wnd() && App::wnd()->psHwnd() && wParam == WA_ACTIVE) { + if ((HWND)lParam != App::wnd()->psHwnd()) { + ::SetForegroundWindow(hwnd); + ::SetWindowPos(App::wnd()->psHwnd(), hwnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); + } + } + return DefWindowProc(hwnd, msg, wParam, lParam); + break; + default: + return DefWindowProc(hwnd, msg, wParam, lParam); + } + return 0; + } + + QColor _shActive(0, 0, 0), _shInactive(0, 0, 0); + + typedef BOOL (FAR STDAPICALLTYPE *f_dwmDefWindowProc)(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, _Out_ LRESULT *plResult); + f_dwmDefWindowProc dwmDefWindowProc; + + typedef HRESULT (FAR STDAPICALLTYPE *f_dwmSetWindowAttribute)(HWND hWnd, DWORD dwAttribute, _In_ LPCVOID pvAttribute, DWORD cbAttribute); + f_dwmSetWindowAttribute dwmSetWindowAttribute; + + typedef HRESULT (FAR STDAPICALLTYPE *f_dwmExtendFrameIntoClientArea)(HWND hWnd, const MARGINS *pMarInset); + f_dwmExtendFrameIntoClientArea dwmExtendFrameIntoClientArea; + + typedef HRESULT (FAR STDAPICALLTYPE *f_setWindowTheme)(HWND hWnd, LPCWSTR pszSubAppName, LPCWSTR pszSubIdList); + f_setWindowTheme setWindowTheme; + + typedef HRESULT (FAR STDAPICALLTYPE *f_openAs_RunDLL)(HWND hWnd, HINSTANCE hInstance, LPCWSTR lpszCmdLine, int nCmdShow); + f_openAs_RunDLL openAs_RunDLL; + + typedef HRESULT (FAR STDAPICALLTYPE *f_shOpenWithDialog)(HWND hwndParent, const OPENASINFO *poainfo); + f_shOpenWithDialog shOpenWithDialog; + + template + bool loadFunction(HINSTANCE dll, LPCSTR name, TFunction &func) { + if (!dll) return false; + + func = (TFunction)GetProcAddress(dll, name); + return !!func; + } + + class _PsInitializer { + public: + _PsInitializer() { + setupDWM(); + useDWM = true; + frameless = !useDWM; + + setupUx(); + setupOpenAs(); + } + void setupDWM() { + HINSTANCE procId = LoadLibrary(L"DWMAPI.DLL"); + + if (!loadFunction(procId, "DwmDefWindowProc", dwmDefWindowProc)) return; + if (!loadFunction(procId, "DwmSetWindowAttribute", dwmSetWindowAttribute)) return; + if (!loadFunction(procId, "DwmExtendFrameIntoClientArea", dwmExtendFrameIntoClientArea)) return; + useDWM = true; + } + void setupUx() { + HINSTANCE procId = LoadLibrary(L"UXTHEME.DLL"); + + if (!loadFunction(procId, "SetWindowTheme", setWindowTheme)) return; + useTheme = true; + } + void setupOpenAs() { + HINSTANCE procId = LoadLibrary(L"SHELL32.DLL"); + + if (!loadFunction(procId, "SHOpenWithDialog", shOpenWithDialog) && !loadFunction(procId, "OpenAs_RunDLLW", openAs_RunDLL)) return; + useOpenAs = true; + } + }; + _PsInitializer _psInitializer; + + class _PsEventFilter : public QAbstractNativeEventFilter { + public: + _PsEventFilter() { + } + + bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) { + Window *wnd = Application::wnd(); + if (!wnd) return false; + + MSG *msg = (MSG*)message; + if (msg->message == WM_ENDSESSION) { + App::quit(); + return false; + } + if (msg->hwnd == wnd->psHwnd() || msg->hwnd && !wnd->psHwnd()) { + return mainWindowEvent(msg->hwnd, msg->message, msg->wParam, msg->lParam, (LRESULT*)result); + } + return false; + } + + bool mainWindowEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *result) { + if (tbCreatedMsgId && msg == tbCreatedMsgId) { + if (CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_ALL, IID_ITaskbarList3, (void**)&tbListInterface) != S_OK) { + tbListInterface = 0; + } + } + switch (msg) { + + case WM_DESTROY: { + App::quit(); + } return false; + + case WM_ACTIVATE: { + if (LOWORD(wParam) == WA_CLICKACTIVE) { + App::wnd()->inactivePress(true); + } + Application::wnd()->psUpdateMargins(); + if (LOWORD(wParam) != WA_INACTIVE) { + _psShadowWindows.setColor(_shActive); + _psShadowWindows.update(_PsShadowActivate); + } else { + _psShadowWindows.setColor(_shInactive); + } + QTimer::singleShot(0, Application::wnd(), SLOT(psUpdateCounter())); + Application::wnd()->update(); + } return false; + + case WM_NCPAINT: if (QSysInfo::WindowsVersion >= QSysInfo::WV_WINDOWS8) return false; *result = 0; return true; + + case WM_NCCALCSIZE: if (!useDWM) return false; { + if (wParam == TRUE) { + LPNCCALCSIZE_PARAMS params = (LPNCCALCSIZE_PARAMS)lParam; + params->rgrc[0].left += margins.left() - simpleMargins.left(); + params->rgrc[0].top += margins.top() - simpleMargins.top(); + params->rgrc[0].right -= margins.right() - simpleMargins.right(); + params->rgrc[0].bottom -= margins.bottom() - simpleMargins.bottom(); + } else if (wParam == FALSE) { + LPRECT rect = (LPRECT)lParam; + + rect->left += margins.left() - simpleMargins.left(); + rect->top += margins.top() - simpleMargins.top(); + rect->right += margins.right() - simpleMargins.right(); + rect->bottom += margins.bottom() - simpleMargins.bottom(); + } + *result = 0; + } return true; + + case WM_NCACTIVATE: { + Application::wnd()->psUpdateMargins(); + *result = LRESULT(TRUE); + Application::wnd()->repaint(); + } return true; + + case WM_WINDOWPOSCHANGING: + case WM_WINDOWPOSCHANGED: { + _psShadowWindows.update(_PsShadowMoved | _PsShadowResized, (WINDOWPOS*)lParam); + } return false; + + case WM_SIZE: { + if (App::wnd()) { + if (wParam == SIZE_MAXIMIZED || wParam == SIZE_RESTORED || wParam == SIZE_MINIMIZED) { + if (wParam != SIZE_RESTORED || App::wnd()->windowState() != Qt::WindowNoState) { + Qt::WindowState state = Qt::WindowNoState; + if (wParam == SIZE_MAXIMIZED) { + state = Qt::WindowMaximized; + } else if (wParam == SIZE_MINIMIZED) { + state = Qt::WindowMinimized; + } + emit App::wnd()->windowHandle()->windowStateChanged(state); + } else { + App::wnd()->psUpdatedPosition(); + } + int changes = (wParam == SIZE_MINIMIZED || wParam == SIZE_MAXIMIZED) ? _PsShadowHidden : (_PsShadowResized | _PsShadowShown); + _psShadowWindows.update(changes); + } + } + } return false; + + case WM_SHOWWINDOW: { + LONG style = GetWindowLong(hWnd, GWL_STYLE); + int changes = _PsShadowResized | ((wParam && !(style & (WS_MAXIMIZE | WS_MINIMIZE))) ? _PsShadowShown : _PsShadowHidden); + _psShadowWindows.update(changes); + } return false; + + case WM_MOVE: { + _psShadowWindows.update(_PsShadowMoved); + App::wnd()->psUpdatedPosition(); + } return false; + + case WM_NCHITTEST: { + POINTS p = MAKEPOINTS(lParam); + RECT r; + GetWindowRect(hWnd, &r); + HitTestType res = Application::wnd()->hitTest(QPoint(p.x - r.left + dleft, p.y - r.top + dtop)); + switch (res) { + case HitTestClient: + case HitTestSysButton: *result = HTCLIENT; break; + case HitTestIcon: *result = HTCAPTION; break; + case HitTestCaption: *result = HTCAPTION; break; + case HitTestTop: *result = HTTOP; break; + case HitTestTopRight: *result = HTTOPRIGHT; break; + case HitTestRight: *result = HTRIGHT; break; + case HitTestBottomRight: *result = HTBOTTOMRIGHT; break; + case HitTestBottom: *result = HTBOTTOM; break; + case HitTestBottomLeft: *result = HTBOTTOMLEFT; break; + case HitTestLeft: *result = HTLEFT; break; + case HitTestTopLeft: *result = HTTOPLEFT; break; + case HitTestNone: + default: *result = HTTRANSPARENT; break; + }; + } return true; + + case WM_NCRBUTTONUP: { + SendMessage(hWnd, WM_SYSCOMMAND, SC_MOUSEMENU, lParam); + } return true; + + case WM_NCLBUTTONDOWN: { + POINTS p = MAKEPOINTS(lParam); + RECT r; + GetWindowRect(hWnd, &r); + HitTestType res = Application::wnd()->hitTest(QPoint(p.x - r.left + dleft, p.y - r.top + dtop)); + switch (res) { + case HitTestIcon: + if (menuHidden && getms() < menuHidden + 10) { + menuHidden = 0; + if (getms() < menuShown + GetDoubleClickTime()) { + Application::wnd()->close(); + } + } else { + QRect icon = Application::wnd()->iconRect(); + p.x = r.left - dleft + icon.left(); + p.y = r.top - dtop + icon.top() + icon.height(); + Application::wnd()->psUpdateSysMenu(Application::wnd()->windowHandle()->windowState()); + menuShown = getms(); + menuHidden = 0; + TrackPopupMenu(Application::wnd()->psMenu(), TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON, p.x, p.y, 0, hWnd, 0); + menuHidden = getms(); + } + return true; + }; + } return false; + + case WM_NCLBUTTONDBLCLK: { + POINTS p = MAKEPOINTS(lParam); + RECT r; + GetWindowRect(hWnd, &r); + HitTestType res = Application::wnd()->hitTest(QPoint(p.x - r.left + dleft, p.y - r.top + dtop)); + switch (res) { + case HitTestIcon: Application::wnd()->close(); return true; + }; + } return false; + + case WM_SYSCOMMAND: { + if (wParam == SC_MOUSEMENU) { + POINTS p = MAKEPOINTS(lParam); + Application::wnd()->psUpdateSysMenu(Application::wnd()->windowHandle()->windowState()); + TrackPopupMenu(Application::wnd()->psMenu(), TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON, p.x, p.y, 0, hWnd, 0); + } + } return false; + + case WM_COMMAND: { + if (HIWORD(wParam)) return false; + int cmd = LOWORD(wParam); + switch (cmd) { + case SC_CLOSE: Application::wnd()->close(); return true; + case SC_MINIMIZE: Application::wnd()->setWindowState(Qt::WindowMinimized); return true; + case SC_MAXIMIZE: Application::wnd()->setWindowState(Qt::WindowMaximized); return true; + case SC_RESTORE: Application::wnd()->setWindowState(Qt::WindowNoState); return true; + } + } return true; + + } + return false; + } + }; + _PsEventFilter *_psEventFilter = 0;*/ + +}; + +PsMainWindow::PsMainWindow(QWidget *parent) : QMainWindow(parent), +posInited(false), trayIcon(0), trayIconMenu(0), icon256(qsl(":/gui/art/iconround256.png")) { + + //tbCreatedMsgId = RegisterWindowMessage(L"TaskbarButtonCreated"); + icon16 = icon256.scaledToWidth(16, Qt::SmoothTransformation); + icon32 = icon256.scaledToWidth(32, Qt::SmoothTransformation); + //connect(&psIdleTimer, SIGNAL(timeout()), this, SLOT(psIdleTimeout())); + //psIdleTimer.setSingleShot(false); +} + +void PsMainWindow::psIdleTimeout() { + /*LASTINPUTINFO lii; + lii.cbSize = sizeof(LASTINPUTINFO); + BOOL res = GetLastInputInfo(&lii); + if (res) { + uint64 ticks = GetTickCount(); + if (lii.dwTime >= ticks - IdleMsecs) { + psIdle = false; + psIdleTimer.stop(); + if (App::main()) App::main()->setOnline(); + } + }*/ +} + +bool PsMainWindow::psIsActive() const { + return isActiveWindow() && isVisible() && !(windowState() & Qt::WindowMinimized); +} + +bool PsMainWindow::psIsOnline(int windowState) const { + if (windowState < 0) windowState = this->windowState(); + if (windowState & Qt::WindowMinimized) { + return false; + } else if (!isVisible()) { + return false; + } + /*LASTINPUTINFO lii; + lii.cbSize = sizeof(LASTINPUTINFO); + BOOL res = GetLastInputInfo(&lii); + if (res) { + uint64 ticks = GetTickCount(); + if (lii.dwTime < ticks - IdleMsecs) { + if (!psIdle) { + psIdle = true; + psIdleTimer.start(900); + } + return false; + } else { + psIdle = false; + psIdleTimer.stop(); + } + }*/ + return true; +} + +void PsMainWindow::psRefreshTaskbarIcon() { + /*QWidget *w = new QWidget(this); + w->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint); + w->setGeometry(x() + 1, y() + 1, 1, 1); + QPalette p(w->palette()); + p.setColor(QPalette::Background, st::titleBG->c); + QWindow *wnd = w->windowHandle(); + w->setPalette(p); + w->show(); + w->activateWindow(); + delete w;*/ +} + +void PsMainWindow::psUpdateWorkmode() { + /*switch (cWorkMode()) { + case dbiwmWindowAndTray: { + setupTrayIcon(); + HWND psOwner = (HWND)GetWindowLong(ps_hWnd, GWL_HWNDPARENT); + if (psOwner) { + SetWindowLong(ps_hWnd, GWL_HWNDPARENT, 0); + psRefreshTaskbarIcon(); + } + } break; + + case dbiwmTrayOnly: { + setupTrayIcon(); + HWND psOwner = (HWND)GetWindowLong(ps_hWnd, GWL_HWNDPARENT); + if (!psOwner) { + SetWindowLong(ps_hWnd, GWL_HWNDPARENT, (LONG)ps_tbHider_hWnd); + } + } break; + + case dbiwmWindowOnly: { + if (trayIconMenu) trayIconMenu->deleteLater(); + trayIconMenu = 0; + if (trayIcon) trayIcon->deleteLater(); + trayIcon = 0; + + HWND psOwner = (HWND)GetWindowLong(ps_hWnd, GWL_HWNDPARENT); + if (psOwner) { + SetWindowLong(ps_hWnd, GWL_HWNDPARENT, 0); + psRefreshTaskbarIcon(); + } + } break; + }*/ +} + +/*HICON qt_pixmapToWinHICON(const QPixmap &); +static HICON _qt_createHIcon(const QIcon &icon, int xSize, int ySize) { + if (!icon.isNull()) { + const QPixmap pm = icon.pixmap(icon.actualSize(QSize(xSize, ySize))); + if (!pm.isNull()) + return qt_pixmapToWinHICON(pm); + } + return 0; +}*/ + +void PsMainWindow::psUpdateCounter() { + int32 counter = App::histories().unreadFull; + style::color bg = (App::histories().unreadMuted < counter) ? st::counterBG : st::counterMuteBG; + QIcon icon; + QImage cicon16(icon16), cicon32(icon32); + if (counter > 0) { + { + QString cnt = (counter < 1000) ? QString("%1").arg(counter) : QString("..%1").arg(counter % 100, 2, 10, QChar('0')); + QPainter p16(&cicon16); + p16.setBrush(bg->b); + p16.setPen(Qt::NoPen); + p16.setRenderHint(QPainter::Antialiasing); + int32 fontSize = 8; + style::font f(fontSize); + int32 w = f->m.width(cnt), d = 2, r = 3; + p16.drawRoundedRect(QRect(16 - w - d * 2, 16 - f->height, w + d * 2, f->height), r, r); + p16.setFont(f->f); + + p16.setPen(st::counterColor->p); + + p16.drawText(16 - w - d, 16 - f->height + f->ascent, cnt); + } + /*if (!tbListInterface) { + QString cnt = (counter < 10000) ? QString("%1").arg(counter) : ((counter < 1000000) ? QString("%1K").arg(counter / 1000) : QString("%1M").arg(counter / 1000000)); + QPainter p32(&cicon32); + style::font f(10); + int32 w = f->m.width(cnt), d = 3, r = 6; + p32.setBrush(bg->b); + p32.setPen(Qt::NoPen); + p32.setRenderHint(QPainter::Antialiasing); + p32.drawRoundedRect(QRect(32 - w - d * 2, 0, w + d * 2, f->height - 1), r, r); + p32.setPen(st::counterColor->p); + p32.setFont(f->f); + p32.drawText(32 - w - d, f->ascent - 1, cnt); + }*/ + } + icon.addPixmap(QPixmap::fromImage(cicon16)); + icon.addPixmap(QPixmap::fromImage(cicon32)); + if (trayIcon) { + QIcon ticon; + QImage ticon16(icon16); + if (counter > 0) { + QString cnt = (counter < 1000) ? QString("%1").arg(counter) : QString("..%1").arg(counter % 100, 2, 10, QChar('0')); + { + QPainter p16(&ticon16); + p16.setBrush(bg->b); + p16.setPen(Qt::NoPen); + p16.setRenderHint(QPainter::Antialiasing); + int32 fontSize = 8; + style::font f(fontSize); + int32 w = f->m.width(cnt), d = 2, r = 3; + p16.drawRoundedRect(QRect(16 - w - d * 2, 16 - f->height, w + d * 2, f->height), r, r); + p16.setFont(f->f); + + p16.setPen(st::counterColor->p); + + p16.drawText(16 - w - d, 16 - f->height + f->ascent, cnt); + } + } + ticon.addPixmap(QPixmap::fromImage(ticon16)); + ticon.addPixmap(QPixmap::fromImage(cicon32)); + trayIcon->setIcon(ticon); + } + + /*setWindowTitle((counter > 0) ? qsl("Telegram (%1)").arg(counter) : qsl("Telegram")); + psDestroyIcons(); + ps_iconSmall = _qt_createHIcon(icon, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON)); + ps_iconBig = _qt_createHIcon(icon, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON)); + SendMessage(ps_hWnd, WM_SETICON, 0, (LPARAM)ps_iconSmall); + SendMessage(ps_hWnd, WM_SETICON, 1, (LPARAM)(ps_iconBig ? ps_iconBig : ps_iconSmall)); + if (tbListInterface) { + if (counter > 0) { + QString cnt = (counter < 1000) ? QString("%1").arg(counter) : QString("..%1").arg(counter % 100, 2, 10, QChar('0')); + QImage oicon16(16, 16, QImage::Format_ARGB32); + int32 cntSize = cnt.size(); + oicon16.fill(st::transparent->c); + { + QPainter p16(&oicon16); + p16.setBrush(bg->b); + p16.setPen(Qt::NoPen); + p16.setRenderHint(QPainter::Antialiasing); + int32 fontSize = (cntSize < 2) ? 12 : ((cntSize < 3) ? 12 : 8); + style::font f(fontSize); + int32 w = f->m.width(cnt), d = (cntSize < 2) ? 5 : ((cntSize < 3) ? 2 : 2), r = (cntSize < 2) ? 8 : ((cntSize < 3) ? 7 : 3); + p16.drawRoundedRect(QRect(16 - w - d * 2, 16 - f->height, w + d * 2, f->height), r, r); + p16.setFont(f->f); + + p16.setPen(st::counterColor->p); + + p16.drawText(16 - w - d, 16 - f->height + f->ascent, cnt); + } + QIcon oicon(QPixmap::fromImage(oicon16)); + ps_iconOverlay = _qt_createHIcon(oicon, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON)); + } + QString description = counter > 0 ? QString("%1 unread messages").arg(counter) : qsl("No unread messages"); + static WCHAR descriptionArr[1024]; + description.toWCharArray(descriptionArr); + tbListInterface->SetOverlayIcon(ps_hWnd, ps_iconOverlay, descriptionArr); + }*/ +} + +/*namespace { + HMONITOR enumMonitor = 0; + RECT enumMonitorWork; + + BOOL CALLBACK _monitorEnumProc( + _In_ HMONITOR hMonitor, + _In_ HDC hdcMonitor, + _In_ LPRECT lprcMonitor, + _In_ LPARAM dwData + ) { + MONITORINFOEX info; + info.cbSize = sizeof(info); + GetMonitorInfo(hMonitor, &info); + if (dwData == hashCrc32(info.szDevice, sizeof(info.szDevice))) { + enumMonitor = hMonitor; + enumMonitorWork = info.rcWork; + return FALSE; + } + return TRUE; + } +}*/ + +void PsMainWindow::psInitSize() { + setMinimumWidth(st::wndMinWidth); + setMinimumHeight(st::wndMinHeight); + + TWindowPos pos(cWindowPos()); + if (cDebug()) { // temp while design + pos.w = 800; + pos.h = 600; + } + QRect avail(QDesktopWidget().availableGeometry()); + bool maximized = false; + QRect geom(avail.x() + (avail.width() - st::wndDefWidth) / 2, avail.y() + (avail.height() - st::wndDefHeight) / 2, st::wndDefWidth, st::wndDefHeight); + if (pos.w && pos.h) { + if (pos.y < 0) pos.y = 0; + //enumMonitor = 0; + //EnumDisplayMonitors(0, 0, &_monitorEnumProc, pos.moncrc); + /*if (enumMonitor) { + int32 w = enumMonitorWork.right - enumMonitorWork.left, h = enumMonitorWork.bottom - enumMonitorWork.top; + if (w >= st::wndMinWidth && h >= st::wndMinHeight) { + if (pos.w > w) pos.w = w; + if (pos.h > h) pos.h = h; + pos.x += enumMonitorWork.left; + pos.y += enumMonitorWork.top; + if (pos.x < enumMonitorWork.right - 10 && pos.y < enumMonitorWork.bottom - 10) { + geom = QRect(pos.x, pos.y, pos.w, pos.h); + } + } + }*/ + maximized = pos.maximized; + } + setGeometry(geom); +} + +void PsMainWindow::psInitFrameless() { + psUpdatedPositionTimer.setSingleShot(true); + connect(&psUpdatedPositionTimer, SIGNAL(timeout()), this, SLOT(psSavePosition())); + + if (frameless) { +// setWindowFlags(Qt::FramelessWindowHint); + } + + connect(windowHandle(), SIGNAL(windowStateChanged(Qt::WindowState)), this, SLOT(psStateChanged(Qt::WindowState))); +} + +void PsMainWindow::psSavePosition(Qt::WindowState state) { + if (state == Qt::WindowActive) state = windowHandle()->windowState(); + if (state == Qt::WindowMinimized || !posInited) return; +/* + TWindowPos pos(cWindowPos()), curPos = pos; + + if (state == Qt::WindowMaximized) { + curPos.maximized = 1; + } else { + RECT w; + GetWindowRect(ps_hWnd, &w); + curPos.x = w.left; + curPos.y = w.top; + curPos.w = w.right - w.left; + curPos.h = w.bottom - w.top; + curPos.maximized = 0; + } + + HMONITOR hMonitor = MonitorFromWindow(ps_hWnd, MONITOR_DEFAULTTONEAREST); + if (hMonitor) { + MONITORINFOEX info; + info.cbSize = sizeof(info); + GetMonitorInfo(hMonitor, &info); + if (!curPos.maximized) { + curPos.x -= info.rcWork.left; + curPos.y -= info.rcWork.top; + } + curPos.moncrc = hashCrc32(info.szDevice, sizeof(info.szDevice)); + } + + if (curPos.w >= st::wndMinWidth && curPos.h >= st::wndMinHeight) { + if (curPos.x != pos.x || curPos.y != pos.y || curPos.w != pos.w || curPos.h != pos.h || curPos.moncrc != pos.moncrc || curPos.maximized != pos.maximized) { + cSetWindowPos(curPos); + App::writeConfig(); + } + }*/ +} + +void PsMainWindow::psUpdatedPosition() { + //psUpdatedPositionTimer.start(4000); +} + +void PsMainWindow::psStateChanged(Qt::WindowState state) { + psUpdateSysMenu(state); + psUpdateMargins(); + /*if (state == Qt::WindowMinimized && GetWindowLong(ps_hWnd, GWL_HWNDPARENT)) { + minimizeToTray(); + } + psSavePosition(state);*/ +} + +//Q_DECLARE_METATYPE(QMargins); +void PsMainWindow::psFirstShow() { + //_psShadowWindows.init(_shActive); + finished = false; + + //psUpdateMargins(); + + //_psShadowWindows.update(_PsShadowHidden); + bool showShadows = true; + + show(); + if (cWindowPos().maximized) { + setWindowState(Qt::WindowMaximized); + } + + if (cFromAutoStart()) { + if (cStartMinimized()) { + setWindowState(Qt::WindowMinimized); + if (cWorkMode() == dbiwmTrayOnly || cWorkMode() == dbiwmWindowAndTray) { + hide(); + } else { + show(); + } + showShadows = false; + } else { + show(); + } + } else { + show(); + } + posInited = true; + //if (showShadows) { + // _psShadowWindows.update(_PsShadowMoved | _PsShadowResized | _PsShadowShown); + //} +} + +bool PsMainWindow::psHandleTitle() { + //return useDWM; + return true; +} + +void PsMainWindow::psInitSysMenu() { + /*Qt::WindowStates states = windowState(); + ps_menu = GetSystemMenu(ps_hWnd, FALSE); + psUpdateSysMenu(windowHandle()->windowState());*/ +} + +void PsMainWindow::psUpdateSysMenu(Qt::WindowState state) { + /*if (!ps_menu) return; + + int menuToDisable = SC_RESTORE; + if (state == Qt::WindowMaximized) { + menuToDisable = SC_MAXIMIZE; + } else if (state == Qt::WindowMinimized) { + menuToDisable = SC_MINIMIZE; + } + int itemCount = GetMenuItemCount(ps_menu); + for (int i = 0; i < itemCount; ++i) { + MENUITEMINFO itemInfo = {0}; + itemInfo.cbSize = sizeof(itemInfo); + itemInfo.fMask = MIIM_TYPE | MIIM_STATE | MIIM_ID; + if (GetMenuItemInfo(ps_menu, i, TRUE, &itemInfo)) { + if (itemInfo.fType & MFT_SEPARATOR) { + continue; + } + if (itemInfo.wID && !(itemInfo.fState & MFS_DEFAULT)) { + UINT fOldState = itemInfo.fState, fState = itemInfo.fState & ~MFS_DISABLED; + if (itemInfo.wID == SC_CLOSE) { + fState |= MFS_DEFAULT; + } else if (itemInfo.wID == menuToDisable || (itemInfo.wID != SC_MINIMIZE && itemInfo.wID != SC_MAXIMIZE && itemInfo.wID != SC_RESTORE)) { + fState |= MFS_DISABLED; + } + itemInfo.fMask = MIIM_STATE; + itemInfo.fState = fState; + if (!SetMenuItemInfo(ps_menu, i, TRUE, &itemInfo)) { + DEBUG_LOG(("PS Error: could not set state %1 to menu item %2, old state %3, error %4").arg(fState).arg(itemInfo.wID).arg(fOldState).arg(GetLastError())); + DestroyMenu(ps_menu); + ps_menu = 0; + break; + } + } + } else { + DEBUG_LOG(("PS Error: could not get state, menu item %1 of %2, error %3").arg(i).arg(itemCount).arg(GetLastError())); + DestroyMenu(ps_menu); + ps_menu = 0; + break; + } + }*/ +} + +void PsMainWindow::psUpdateMargins() { + /*if (!useDWM) return; + + RECT r, a; + + GetClientRect(ps_hWnd, &r); + a = r; + + LONG style = GetWindowLong(ps_hWnd, GWL_STYLE), styleEx = GetWindowLong(ps_hWnd, GWL_EXSTYLE); + AdjustWindowRectEx(&a, style, false, styleEx); + simpleMargins = QMargins(a.left - r.left, a.top - r.top, r.right - a.right, r.bottom - a.bottom); + if (style & WS_MAXIMIZE) { + RECT w, m; + GetWindowRect(ps_hWnd, &w); + m = w; + + HMONITOR hMonitor = MonitorFromRect(&w, MONITOR_DEFAULTTONEAREST); + if (hMonitor) { + MONITORINFO mi; + mi.cbSize = sizeof(mi); + GetMonitorInfo(hMonitor, &mi); + m = mi.rcWork; + } + + dleft = w.left - m.left; + dtop = w.top - m.top; + + margins.setLeft(simpleMargins.left() - w.left + m.left); + margins.setRight(simpleMargins.right() - m.right + w.right); + margins.setBottom(simpleMargins.bottom() - m.bottom + w.bottom); + margins.setTop(simpleMargins.top() - w.top + m.top); + } else { + margins = simpleMargins; + dleft = dtop = 0; + } + + QPlatformNativeInterface *i = QGuiApplication::platformNativeInterface(); + i->setWindowProperty(windowHandle()->handle(), "WindowsCustomMargins", QVariant::fromValue(margins)); + if (!themeInited) { + themeInited = true; + if (useTheme) { + if (QSysInfo::WindowsVersion < QSysInfo::WV_WINDOWS8) { + setWindowTheme(ps_hWnd, L" ", L" "); + QApplication::setStyle(QStyleFactory::create("Windows")); + } + } + }*/ +} + +void PsMainWindow::psFlash() { + /*if (GetForegroundWindow() == ps_hWnd) return; + + FLASHWINFO info; + info.cbSize = sizeof(info); + info.hwnd = ps_hWnd; + info.dwFlags = FLASHW_ALL; + info.dwTimeout = 0; + info.uCount = 1; + FlashWindowEx(&info);*/ +} + +/*HWND PsMainWindow::psHwnd() const { + return ps_hWnd; +} + +HMENU PsMainWindow::psMenu() const { + return ps_menu; +}*/ + +/*void PsMainWindow::psDestroyIcons() { + if (ps_iconBig) { + DestroyIcon(ps_iconBig); + ps_iconBig = 0; + } + if (ps_iconSmall) { + DestroyIcon(ps_iconSmall); + ps_iconSmall = 0; + } + if (ps_iconOverlay) { + DestroyIcon(ps_iconOverlay); + ps_iconOverlay = 0; + } +}*/ + +PsMainWindow::~PsMainWindow() { + finished = true; + //if (ps_menu) DestroyMenu(ps_menu); + //psDestroyIcons(); + //_psShadowWindows.destroy(); + //psClearNotifyFast(); + //if (ps_tbHider_hWnd) DestroyWindow(ps_tbHider_hWnd); +} + +void PsMainWindow::psNotify(History *history, MsgId msgId) { + /*if (App::quiting()) return; + if (!cDesktopNotify()) { + history->clearNotifyFrom(); + } + if (notifyHistories.constFind(history) != notifyHistories.cend()) return; + notifyHistories.insert(history); + psShowNextNotify();*/ +} + +void PsMainWindow::psClearNotify(History *history) { + /*if (!history) { + for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + (*i)->unlinkHistory(); + } + for (NotifyHistories::const_iterator i = notifyHistories.cbegin(), e = notifyHistories.cend(); i != e; ++i) { + (*i)->clearNotifyFrom(); + } + notifyHistories.clear(); + return; + } + notifyHistories.remove(history); + for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + (*i)->unlinkHistory(history); + }*/ +} + +void PsMainWindow::psClearNotifyFast() { + /*notifyHistories.clear(); + for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + (*i)->deleteLater(); + } + notifyWindows.clear();*/ +} + +/*void PsMainWindow::psShowNextNotify(PsNotifyWindow *remove) { + if (App::quiting()) return; + + int32 count = NotifyWindows; + if (remove) { + for (PsNotifyWindows::iterator i = notifyWindows.begin(), e = notifyWindows.end(); i != e; ++i) { + if ((*i) == remove) { + notifyWindows.erase(i); + break; + } + } + } + QRect r = QApplication::desktop()->availableGeometry(App::wnd()); + int32 x = r.width() - st::notifyWidth - st::notifyDeltaX, y = r.bottom() - st::notifyHeight - st::notifyDeltaY; + for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + int32 ind = (*i)->index(); + if (ind < 0) continue; + --count; + } + while (count > 0) { + HistoryItem *notify = 0; + for (NotifyHistories::iterator i = notifyHistories.begin(), e = notifyHistories.end(); i != e;) { + if ((*i)->notifyFrom) { + if (!notify || (*i)->notifyFrom->date < notify->date) { + notify = (*i)->notifyFrom; + } + ++i; + } else { + i = notifyHistories.erase(i); + } + } + if (notify) { + notifyWindows.push_back(new PsNotifyWindow(notify, x, y)); + notify->history()->getNextNotifyFrom(); + --count; + } else { + break; + } + } + count = NotifyWindows - count; + for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + int32 ind = (*i)->index(); + if (ind < 0) continue; + --count; + (*i)->moveTo(x, y - count * (st::notifyHeight + st::notifyDeltaY)); + } +}*/ + +void PsMainWindow::psStopHiding() { + /*for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + (*i)->stopHiding(); + }*/ +} + +void PsMainWindow::psStartHiding() { + /*for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + (*i)->startHiding(); + }*/ +} + +void PsMainWindow::psUpdateNotifies() { + /*for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + (*i)->updatePeerPhoto(); + }*/ +} + +void PsMainWindow::psNotifySettingGot() { +} + +/*PsNotifyWindow::PsNotifyWindow(HistoryItem *item, int32 x, int32 y) : history(item->history()), aOpacity(0), _index(0), hiding(false), started(GetTickCount()), + alphaDuration(st::notifyFastAnim), posDuration(st::notifyFastAnim), aY(y + st::notifyHeight + st::notifyDeltaY), close(this, st::notifyClose), aOpacityFunc(st::notifyFastAnimFunc) { + + int32 w = st::notifyWidth, h = st::notifyHeight; + QImage img(w, h, QImage::Format_ARGB32_Premultiplied); + img.fill(st::notifyBG->c); + + { + QPainter p(&img); + p.setPen(st::notifyBorder->p); + p.setBrush(Qt::NoBrush); + p.drawRect(0, 0, w - 1, h - 1); + + if (history->peer->photo->loaded()) { + p.drawPixmap(st::notifyPhotoPos.x(), st::notifyPhotoPos.y(), history->peer->photo->pix(st::notifyPhotoSize)); + } else { + MTP::clearLoaderPriorities(); + peerPhoto = history->peer->photo; + peerPhoto->load(true, true); + } + + int32 itemWidth = w - st::notifyPhotoPos.x() - st::notifyPhotoSize - st::notifyTextLeft - st::notifyClosePos.x() - st::notifyClose.width; + + QRect rectForName(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyTextTop, itemWidth, st::msgNameFont->height); + if (history->peer->chat) { + p.drawPixmap(QPoint(rectForName.left() + st::dlgChatImgLeft, rectForName.top() + st::dlgChatImgTop), App::sprite(), st::dlgChatImg); + rectForName.setLeft(rectForName.left() + st::dlgChatImgSkip); + } + + QDateTime now(QDateTime::currentDateTime()), lastTime(item->date); + QDate nowDate(now.date()), lastDate(lastTime.date()); + QString dt = lastTime.toString(qsl("hh:mm")); + int32 dtWidth = st::dlgHistFont->m.width(dt); + rectForName.setWidth(rectForName.width() - dtWidth - st::dlgDateSkip); + p.setFont(st::dlgDateFont->f); + p.setPen(st::dlgDateColor->p); + p.drawText(rectForName.left() + rectForName.width() + st::dlgDateSkip, rectForName.top() + st::dlgHistFont->ascent, dt); + + const HistoryItem *textCachedFor = 0; + Text itemTextCache(itemWidth); + bool active = false; + item->drawInDialog(p, QRect(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyItemTop + st::msgNameFont->height, itemWidth, 2 * st::dlgFont->height), active, textCachedFor, itemTextCache); + + p.setPen(st::dlgNameColor->p); + history->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); + } + pm = QPixmap::fromImage(img); + + hideTimer.setSingleShot(true); + connect(&hideTimer, SIGNAL(timeout()), this, SLOT(hideByTimer())); + + inputTimer.setSingleShot(true); + connect(&inputTimer, SIGNAL(timeout()), this, SLOT(checkLastInput())); + + connect(&close, SIGNAL(clicked()), this, SLOT(unlinkHistory())); + close.setAcceptBoth(true); + close.move(w - st::notifyClose.width - st::notifyClosePos.x(), st::notifyClosePos.y()); + close.show(); + + aY.start(y); + setGeometry(x, aY.current(), st::notifyWidth, st::notifyHeight); + + aOpacity.start(1); + setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint); + + show(); + + setWindowOpacity(aOpacity.current()); + + alphaDuration = posDuration = st::notifyFastAnim; + anim::start(this); + + checkLastInput(); +} + +void PsNotifyWindow::checkLastInput() { + LASTINPUTINFO lii; + lii.cbSize = sizeof(LASTINPUTINFO); + BOOL res = GetLastInputInfo(&lii); + if (!res || lii.dwTime >= started) { + hideTimer.start(st::notifyWaitLongHide); + } else { + inputTimer.start(300); + } +} + +void PsNotifyWindow::moveTo(int32 x, int32 y, int32 index) { + if (index >= 0) { + _index = index; + } + move(x, aY.current()); + aY.start(y); + aOpacity.restart(); + posDuration = st::notifyFastAnim; + anim::start(this); +} + +void PsNotifyWindow::updatePeerPhoto() { + if (!peerPhoto->isNull() && peerPhoto->loaded()) { + QImage img(pm.toImage()); + { + QPainter p(&img); + p.drawPixmap(st::notifyPhotoPos.x(), st::notifyPhotoPos.y(), peerPhoto->pix(st::notifyPhotoSize)); + } + peerPhoto = ImagePtr(); + pm = QPixmap::fromImage(img); + update(); + } +} + +void PsNotifyWindow::unlinkHistory(History *hist) { + if (!hist || hist == history) { + animHide(st::notifyFastAnim, st::notifyFastAnimFunc); + history = 0; + App::wnd()->psShowNextNotify(); + } +} + +void PsNotifyWindow::enterEvent(QEvent *e) { + if (!history) return; + if (App::wnd()) App::wnd()->psStopHiding(); +} + +void PsNotifyWindow::leaveEvent(QEvent *e) { + if (!history) return; + App::wnd()->psStartHiding(); +} + +void PsNotifyWindow::startHiding() { + hideTimer.start(st::notifyWaitShortHide); +} + +void PsNotifyWindow::mousePressEvent(QMouseEvent *e) { + if (!history) return; + if (e->button() == Qt::RightButton) { + unlinkHistory(); + } else if (history) { + App::wnd()->showFromTray(); + App::wnd()->hideSettings(); + App::main()->showPeer(history->peer->id, false, true); + e->ignore(); + } +} + +void PsNotifyWindow::paintEvent(QPaintEvent *e) { + QPainter p(this); + p.drawPixmap(0, 0, pm); +} + +void PsNotifyWindow::animHide(float64 duration, anim::transition func) { + if (!history) return; + alphaDuration = duration; + aOpacityFunc = func; + aOpacity.start(0); + aY.restart(); + hiding = true; + anim::start(this); +} + +void PsNotifyWindow::stopHiding() { + if (!history) return; + alphaDuration = st::notifyFastAnim; + aOpacityFunc = st::notifyFastAnimFunc; + aOpacity.start(1); + aY.restart(); + hiding = false; + hideTimer.stop(); + anim::start(this); +} + +void PsNotifyWindow::hideByTimer() { + if (!history) return; + animHide(st::notifySlowHide, st::notifySlowHideFunc); +} + +bool PsNotifyWindow::animStep(float64 ms) { + float64 dtAlpha = ms / alphaDuration, dtPos = ms / posDuration; + if (dtAlpha >= 1) { + aOpacity.finish(); + if (hiding) { + deleteLater(); + } + } else { + aOpacity.update(dtAlpha, aOpacityFunc); + } + setWindowOpacity(aOpacity.current()); + if (dtPos >= 1) { + aY.finish(); + } else { + aY.update(dtPos, anim::linear); + } + move(x(), aY.current()); + update(); + return (dtAlpha < 1 || !hiding && dtPos < 1); +} + +PsNotifyWindow::~PsNotifyWindow() { + if (App::wnd()) App::wnd()->psShowNextNotify(this); +}*/ + +PsApplication::PsApplication(int argc, char *argv[]) : QApplication(argc, argv) { +} + +void PsApplication::psInstallEventFilter() { + /*delete _psEventFilter; + _psEventFilter = new _PsEventFilter(); + installNativeEventFilter(_psEventFilter);*/ +} + +PsApplication::~PsApplication() { + //delete _psEventFilter; + //_psEventFilter = 0; +} + +PsUpdateDownloader::PsUpdateDownloader(QThread *thread, const MTPDhelp_appUpdate &update) : already(0), reply(0), full(0) { + updateUrl = qs(update.vurl); + moveToThread(thread); + manager.moveToThread(thread); + App::setProxySettings(manager); + + connect(thread, SIGNAL(started()), this, SLOT(start())); + initOutput(); +} + +PsUpdateDownloader::PsUpdateDownloader(QThread *thread, const QString &url) : already(0), reply(0), full(0) { + updateUrl = url; + moveToThread(thread); + manager.moveToThread(thread); + App::setProxySettings(manager); + + connect(thread, SIGNAL(started()), this, SLOT(start())); + initOutput(); +} + +void PsUpdateDownloader::initOutput() { + QString fileName; + QRegularExpressionMatch m = QRegularExpression(qsl("/([^/\\?]+)(\\?|$)")).match(updateUrl); + if (m.hasMatch()) { + fileName = m.captured(1).replace(QRegularExpression(qsl("[^a-zA-Z0-9_\\-]")), QString()); + } + if (fileName.isEmpty()) { + fileName = qsl("tupdate-%1").arg(rand()); + } + QString dirStr = cWorkingDir() + qsl("tupdates/"); + fileName = dirStr + fileName; + QFileInfo file(fileName); + + QDir dir(dirStr); + if (dir.exists()) { + QFileInfoList all = dir.entryInfoList(QDir::Files); + for (QFileInfoList::iterator i = all.begin(), e = all.end(); i != e; ++i) { + if (i->absoluteFilePath() != file.absoluteFilePath()) { + QFile::remove(i->absoluteFilePath()); + } + } + } else { + dir.mkdir(dir.absolutePath()); + } + outputFile.setFileName(fileName); + if (file.exists()) { + uint64 fullSize = file.size(); + if (fullSize < INT_MAX) { + int32 goodSize = (int32)fullSize; + if (goodSize % UpdateChunk) { + goodSize = goodSize - (goodSize % UpdateChunk); + if (goodSize) { + if (outputFile.open(QIODevice::ReadOnly)) { + QByteArray goodData = outputFile.readAll().mid(0, goodSize); + outputFile.close(); + if (outputFile.open(QIODevice::WriteOnly)) { + outputFile.write(goodData); + outputFile.close(); + + QMutexLocker lock(&mutex); + already = goodSize; + } + } + } + } else { + QMutexLocker lock(&mutex); + already = goodSize; + } + } + if (!already) { + QFile::remove(fileName); + } + } +} + +void PsUpdateDownloader::start() { + sendRequest(); +} + +void PsUpdateDownloader::sendRequest() { + QNetworkRequest req(updateUrl); + QByteArray rangeHeaderValue = "bytes=" + QByteArray::number(already) + "-";// + QByteArray::number(already + cUpdateChunk() - 1); + req.setRawHeader("Range", rangeHeaderValue); + req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true); + if (reply) reply->deleteLater(); + reply = manager.get(req); + connect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(partFinished(qint64,qint64))); + connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(partFailed(QNetworkReply::NetworkError))); + connect(reply, SIGNAL(metaDataChanged()), this, SLOT(partMetaGot())); +} + +void PsUpdateDownloader::partMetaGot() { + typedef QList Pairs; + Pairs pairs = reply->rawHeaderPairs(); + for (Pairs::iterator i = pairs.begin(), e = pairs.end(); i != e; ++i) { + if (QString::fromUtf8(i->first).toLower() == "content-range") { + QRegularExpressionMatch m = QRegularExpression(qsl("/(\\d+)([^\\d]|$)")).match(QString::fromUtf8(i->second)); + if (m.hasMatch()) { + { + QMutexLocker lock(&mutex); + full = m.captured(1).toInt(); + } + emit App::app()->updateDownloading(already, full); + } + } + } +} + +int32 PsUpdateDownloader::ready() { + QMutexLocker lock(&mutex); + return already; +} + +int32 PsUpdateDownloader::size() { + QMutexLocker lock(&mutex); + return full; +} + +void PsUpdateDownloader::partFinished(qint64 got, qint64 total) { + if (!reply) return; + + QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); + if (statusCode.isValid()) { + int status = statusCode.toInt(); + if (status != 200 && status != 206 && status != 416) { + LOG(("Update Error: Bad HTTP status received in partFinished(): %1").arg(status)); + return fatalFail(); + } + } + + if (!already && !full) { + QMutexLocker lock(&mutex); + full = total; + } + DEBUG_LOG(("Update Info: part %1 of %2").arg(got).arg(total)); + + if (!outputFile.isOpen()) { + if (!outputFile.open(QIODevice::Append)) { + LOG(("Update Error: Could not open output file '%1' for appending").arg(outputFile.fileName())); + return fatalFail(); + } + } + QByteArray r = reply->readAll(); + if (!r.isEmpty()) { + outputFile.write(r); + + QMutexLocker lock(&mutex); + already += r.size(); + } + if (got >= total) { + reply->deleteLater(); + reply = 0; + outputFile.close(); + unpackUpdate(); + } else { + emit App::app()->updateDownloading(already, full); + } +} + +void PsUpdateDownloader::partFailed(QNetworkReply::NetworkError e) { + if (!reply) return; + + QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); + reply->deleteLater(); + reply = 0; + if (statusCode.isValid()) { + int status = statusCode.toInt(); + if (status == 416) { // Requested range not satisfiable + outputFile.close(); + unpackUpdate(); + return; + } + } + LOG(("Update Error: failed to download part starting from %1, error %2").arg(already).arg(e)); + emit App::app()->updateFailed(); +} + +void PsUpdateDownloader::deleteDir(const QString &dir) { + /*std::wstring wDir = QDir::toNativeSeparators(dir).toStdWString(); + WCHAR path[4096]; + memcpy(path, wDir.c_str(), (wDir.size() + 1) * sizeof(WCHAR)); + path[wDir.size() + 1] = 0; + SHFILEOPSTRUCT file_op = { + NULL, + FO_DELETE, + path, + L"", + FOF_NOCONFIRMATION | + FOF_NOERRORUI | + FOF_SILENT, + false, + 0, + L"" + }; + int res = SHFileOperation(&file_op);*/ +} + +void PsUpdateDownloader::fatalFail() { + clearAll(); + emit App::app()->updateFailed(); +} + +void PsUpdateDownloader::clearAll() { + deleteDir(cWorkingDir() + qsl("tupdates")); +} + +void PsUpdateDownloader::unpackUpdate() { + /*QByteArray packed; + if (!outputFile.open(QIODevice::ReadOnly)) { + LOG(("Update Error: cant read updates file!")); + return fatalFail(); + } + + const int32 hSigLen = 128, hShaLen = 20, hPropsLen = LZMA_PROPS_SIZE, hOriginalSizeLen = sizeof(int32), hSize = hSigLen + hShaLen + hPropsLen + hOriginalSizeLen; // header + + QByteArray compressed = outputFile.readAll(); + int32 compressedLen = compressed.size() - hSize; + if (compressedLen <= 0) { + LOG(("Update Error: bad compressed size: %1").arg(compressed.size())); + return fatalFail(); + } + outputFile.close(); + + QString tempDirPath = cWorkingDir() + qsl("tupdates/temp"), readyDirPath = cWorkingDir() + qsl("tupdates/ready"); + deleteDir(tempDirPath); + deleteDir(readyDirPath); + + QDir tempDir(tempDirPath), readyDir(readyDirPath); + if (tempDir.exists() || readyDir.exists()) { + LOG(("Update Error: cant clear tupdates/temp or tupdates/ready dir!")); + return fatalFail(); + } + + uchar sha1Buffer[20]; + bool goodSha1 = !memcmp(compressed.constData() + hSigLen, hashSha1(compressed.constData() + hSigLen + hShaLen, compressedLen + hPropsLen + hOriginalSizeLen, sha1Buffer), hShaLen); + if (!goodSha1) { + LOG(("Update Error: bad SHA1 hash of update file!")); + return fatalFail(); + } + + RSA *pbKey = PEM_read_bio_RSAPublicKey(BIO_new_mem_buf(const_cast(UpdatesPublicKey), -1), 0, 0, 0); + if (!pbKey) { + LOG(("Update Error: cant read public rsa key!")); + return fatalFail(); + } + if (RSA_verify(NID_sha1, (const uchar*)(compressed.constData() + hSigLen), hShaLen, (const uchar*)(compressed.constData()), hSigLen, pbKey) != 1) { // verify signature + RSA_free(pbKey); + LOG(("Update Error: bad RSA signature of update file!")); + return fatalFail(); + } + RSA_free(pbKey); + + QByteArray uncompressed; + + int32 uncompressedLen; + memcpy(&uncompressedLen, compressed.constData() + hSigLen + hShaLen + hPropsLen, hOriginalSizeLen); + uncompressed.resize(uncompressedLen); + + size_t resultLen = uncompressed.size(); + SizeT srcLen = compressedLen; + int uncompressRes = LzmaUncompress((uchar*)uncompressed.data(), &resultLen, (const uchar*)(compressed.constData() + hSize), &srcLen, (const uchar*)(compressed.constData() + hSigLen + hShaLen), LZMA_PROPS_SIZE); + if (uncompressRes != SZ_OK) { + LOG(("Update Error: could not uncompress lzma, code: %1").arg(uncompressRes)); + return fatalFail(); + } + + tempDir.mkdir(tempDir.absolutePath()); + + quint32 version; + { + QBuffer buffer(&uncompressed); + buffer.open(QIODevice::ReadOnly); + QDataStream stream(&buffer); + stream.setVersion(QDataStream::Qt_5_1); + + stream >> version; + if (stream.status() != QDataStream::Ok) { + LOG(("Update Error: cant read version from downloaded stream, status: %1").arg(stream.status())); + return fatalFail(); + } + if (version <= AppVersion) { + LOG(("Update Error: downloaded version %1 is not greater, than mine %2").arg(version).arg(AppVersion)); + return fatalFail(); + } + + quint32 filesCount; + stream >> filesCount; + if (stream.status() != QDataStream::Ok) { + LOG(("Update Error: cant read files count from downloaded stream, status: %1").arg(stream.status())); + return fatalFail(); + } + if (!filesCount) { + LOG(("Update Error: update is empty!")); + return fatalFail(); + } + for (int32 i = 0; i < filesCount; ++i) { + QString relativeName; + quint32 fileSize; + QByteArray fileInnerData; + + stream >> relativeName >> fileSize >> fileInnerData; + if (stream.status() != QDataStream::Ok) { + LOG(("Update Error: cant read file from downloaded stream, status: %1").arg(stream.status())); + return fatalFail(); + } + if (fileSize != fileInnerData.size()) { + LOG(("Update Error: bad file size %1 not matching data size %2").arg(fileSize).arg(fileInnerData.size())); + return fatalFail(); + } + + QFile f(tempDirPath + '/' + relativeName); + if (!f.open(QIODevice::WriteOnly)) { + LOG(("Update Error: cant open file '%1' for writing").arg(tempDirPath + '/' + relativeName)); + return fatalFail(); + } + if (f.write(fileInnerData) != fileSize) { + f.close(); + LOG(("Update Error: cant write file '%1'").arg(tempDirPath + '/' + relativeName)); + return fatalFail(); + } + f.close(); + } + + // create tdata/version file + tempDir.mkdir(QDir(tempDirPath + qsl("/tdata")).absolutePath()); + std::wstring versionString = ((version % 1000) ? QString("%1.%2.%3").arg(int(version / 1000000)).arg(int((version % 1000000) / 1000)).arg(int(version % 1000)) : QString("%1.%2").arg(int(version / 1000000)).arg(int((version % 1000000) / 1000))).toStdWString(); + DWORD versionNum = DWORD(version), versionLen = DWORD(versionString.size() * sizeof(WCHAR)); + WCHAR versionStr[32]; + memcpy(versionStr, versionString.c_str(), versionLen); + + QFile fVersion(tempDirPath + qsl("/tdata/version")); + if (!fVersion.open(QIODevice::WriteOnly)) { + LOG(("Update Error: cant write version file '%1'").arg(tempDirPath + qsl("/version"))); + return fatalFail(); + } + fVersion.write((const char*)&versionNum, sizeof(DWORD)); + fVersion.write((const char*)&versionLen, sizeof(DWORD)); + fVersion.write((const char*)&versionStr[0], versionLen); + fVersion.close(); + } + + if (!tempDir.rename(tempDir.absolutePath(), readyDir.absolutePath())) { + LOG(("Update Error: cant rename temp dir '%1' to ready dir '%2'").arg(tempDir.absolutePath()).arg(readyDir.absolutePath())); + return fatalFail(); + } + deleteDir(tempDirPath); + outputFile.remove(); + + emit App::app()->updateReady();*/ +} + +PsUpdateDownloader::~PsUpdateDownloader() { + delete reply; + reply = 0; +} + +/*namespace { + BOOL CALLBACK _ActivateProcess(HWND hWnd, LPARAM lParam) { + uint64 &processId(*(uint64*)lParam); + + DWORD dwProcessId; + ::GetWindowThreadProcessId(hWnd, &dwProcessId); + + if ((uint64)dwProcessId == processId) { // found top-level window + static const int32 nameBufSize = 1024; + WCHAR nameBuf[nameBufSize]; + int32 len = GetWindowText(hWnd, nameBuf, nameBufSize); + if (len && len < nameBufSize) { + if (QRegularExpression(qsl("^Telegram(\\s*\\(\\d+\\))?$")).match(QString::fromStdWString(nameBuf)).hasMatch()) { + BOOL res = ::SetForegroundWindow(hWnd); + return FALSE; + } + } + } + return TRUE; + } +}*/ + +void psActivateProcess(uint64 pid) { + //::EnumWindows((WNDENUMPROC)_ActivateProcess, (LPARAM)&pid); +} + +QString psCurrentCountry() { + /*int chCount = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME, 0, 0); + if (chCount && chCount < 128) { + WCHAR wstrCountry[128]; + int len = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME, wstrCountry, chCount); + return len ? QString::fromStdWString(std::wstring(wstrCountry)) : QString::fromLatin1(DefaultCountry); + } + return QString::fromLatin1(DefaultCountry);*/ + return QString(""); + //TODO +} + +/*namespace { + QString langById(int lngId) { + int primary = lngId & 0xFF; + switch (primary) { + case 0x36: return qsl("af"); + case 0x1C: return qsl("sq"); + case 0x5E: return qsl("am"); + case 0x01: return qsl("ar"); + case 0x2B: return qsl("hy"); + case 0x4D: return qsl("as"); + case 0x2C: return qsl("az"); + case 0x45: return qsl("bn"); + case 0x6D: return qsl("ba"); + case 0x2D: return qsl("eu"); + case 0x23: return qsl("be"); + case 0x1A: + if (lngId == LANG_CROATIAN) { + return qsl("hr"); + } else if (lngId == LANG_BOSNIAN_NEUTRAL || lngId == LANG_BOSNIAN) { + return qsl("bs"); + } + return qsl("sr"); + break; + case 0x7E: return qsl("br"); + case 0x02: return qsl("bg"); + case 0x92: return qsl("ku"); + case 0x03: return qsl("ca"); + case 0x04: return qsl("zh"); + case 0x83: return qsl("co"); + case 0x05: return qsl("cs"); + case 0x06: return qsl("da"); + case 0x65: return qsl("dv"); + case 0x13: return qsl("nl"); + case 0x09: return qsl("en"); + case 0x25: return qsl("et"); + case 0x38: return qsl("fo"); + case 0x0B: return qsl("fi"); + case 0x0c: return qsl("fr"); + case 0x62: return qsl("fy"); + case 0x56: return qsl("gl"); + case 0x37: return qsl("ka"); + case 0x07: return qsl("de"); + case 0x08: return qsl("el"); + case 0x6F: return qsl("kl"); + case 0x47: return qsl("gu"); + case 0x68: return qsl("ha"); + case 0x0D: return qsl("he"); + case 0x39: return qsl("hi"); + case 0x0E: return qsl("hu"); + case 0x0F: return qsl("is"); + case 0x70: return qsl("ig"); + case 0x21: return qsl("id"); + case 0x5D: return qsl("iu"); + case 0x3C: return qsl("ga"); + case 0x34: return qsl("xh"); + case 0x35: return qsl("zu"); + case 0x10: return qsl("it"); + case 0x11: return qsl("ja"); + case 0x4B: return qsl("kn"); + case 0x3F: return qsl("kk"); + case 0x53: return qsl("kh"); + case 0x87: return qsl("rw"); + case 0x12: return qsl("ko"); + case 0x40: return qsl("ky"); + case 0x54: return qsl("lo"); + case 0x26: return qsl("lv"); + case 0x27: return qsl("lt"); + case 0x6E: return qsl("lb"); + case 0x2F: return qsl("mk"); + case 0x3E: return qsl("ms"); + case 0x4C: return qsl("ml"); + case 0x3A: return qsl("mt"); + case 0x81: return qsl("mi"); + case 0x4E: return qsl("mr"); + case 0x50: return qsl("mn"); + case 0x61: return qsl("ne"); + case 0x14: return qsl("no"); + case 0x82: return qsl("oc"); + case 0x48: return qsl("or"); + case 0x63: return qsl("ps"); + case 0x29: return qsl("fa"); + case 0x15: return qsl("pl"); + case 0x16: return qsl("pt"); + case 0x67: return qsl("ff"); + case 0x46: return qsl("pa"); + case 0x18: return qsl("ro"); + case 0x17: return qsl("rm"); + case 0x19: return qsl("ru"); + case 0x3B: return qsl("se"); + case 0x4F: return qsl("sa"); + case 0x32: return qsl("tn"); + case 0x59: return qsl("sd"); + case 0x5B: return qsl("si"); + case 0x1B: return qsl("sk"); + case 0x24: return qsl("sl"); + case 0x0A: return qsl("es"); + case 0x41: return qsl("sw"); + case 0x1D: return qsl("sv"); + case 0x28: return qsl("tg"); + case 0x49: return qsl("ta"); + case 0x44: return qsl("tt"); + case 0x4A: return qsl("te"); + case 0x1E: return qsl("th"); + case 0x51: return qsl("bo"); + case 0x73: return qsl("ti"); + case 0x1F: return qsl("tr"); + case 0x42: return qsl("tk"); + case 0x22: return qsl("uk"); + case 0x20: return qsl("ur"); + case 0x80: return qsl("ug"); + case 0x43: return qsl("uz"); + case 0x2A: return qsl("vi"); + case 0x52: return qsl("cy"); + case 0x88: return qsl("wo"); + case 0x78: return qsl("ii"); + case 0x6A: return qsl("yo"); + } + return QString::fromLatin1(DefaultLanguage); + } +}*/ + +QString psCurrentLanguage() { +/* int chCount = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SNAME, 0, 0); + if (chCount && chCount < 128) { + WCHAR wstrLocale[128]; + int len = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SNAME, wstrLocale, chCount); + if (!len) return QString::fromLatin1(DefaultLanguage); + QString locale = QString::fromStdWString(std::wstring(wstrLocale)); + QRegularExpressionMatch m = QRegularExpression("(^|[^a-z])([a-z]{2})-").match(locale); + if (m.hasMatch()) { + return m.captured(2); + } + } + chCount = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ILANGUAGE, 0, 0); + if (chCount && chCount < 128) { + WCHAR wstrLocale[128]; + int len = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ILANGUAGE, wstrLocale, chCount), lngId = 0; + if (len < 5) return QString::fromLatin1(DefaultLanguage); + + for (int i = 0; i < 4; ++i) { + WCHAR ch = wstrLocale[i]; + lngId *= 16; + if (ch >= WCHAR('0') && ch <= WCHAR('9')) { + lngId += (ch - WCHAR('0')); + } else if (ch >= WCHAR('A') && ch <= WCHAR('F')) { + lngId += (10 + ch - WCHAR('A')); + } else { + return QString::fromLatin1(DefaultLanguage); + } + } + return langById(lngId); + } + return QString::fromLatin1(DefaultLanguage);*/ + return QString("en"); +} + +QString psAppDataPath() { + /*static const int maxFileLen = MAX_PATH * 10; + WCHAR wstrPath[maxFileLen]; + if (GetEnvironmentVariable(L"APPDATA", wstrPath, maxFileLen)) { + QDir appData(QString::fromStdWString(std::wstring(wstrPath))); + return appData.absolutePath() + "/" + QString::fromWCharArray(AppName) + "/"; + }*/ + return QString(); +} + +QString psCurrentExeDirectory() { + /*LPWSTR *args; + int argsCount; + args = CommandLineToArgvW(GetCommandLine(), &argsCount); + if (args) { + QFileInfo info(QDir::fromNativeSeparators(QString::fromWCharArray(args[0]))); + if (info.isFile()) { + return info.absoluteDir().absolutePath() + '/'; + } + LocalFree(args); + }*/ + return QString(); +} + +void psDoCleanup() { + try { + psAutoStart(false, true); + } catch (...) { + } +} + +int psCleanup() { + /*__try + { + psDoCleanup(); + } + __except(EXCEPTION_EXECUTE_HANDLER) + { + return 0; + }*/ + return 0; +} + +void psDoFixPrevious() { + /*try { + static const int bufSize = 4096; + DWORD checkType, checkSize = bufSize * 2; + WCHAR checkStr[bufSize]; + + QString appId = QString::fromStdWString(AppId); + QString newKeyStr1 = QString("Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%1_is1").arg(appId); + QString newKeyStr2 = QString("Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%1_is1").arg(appId); + QString oldKeyStr1 = QString("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%1_is1").arg(appId); + QString oldKeyStr2 = QString("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%1_is1").arg(appId); + HKEY newKey1, newKey2, oldKey1, oldKey2; + LSTATUS newKeyRes1 = RegOpenKeyEx(HKEY_CURRENT_USER, newKeyStr1.toStdWString().c_str(), 0, KEY_READ, &newKey1); + LSTATUS newKeyRes2 = RegOpenKeyEx(HKEY_CURRENT_USER, newKeyStr2.toStdWString().c_str(), 0, KEY_READ, &newKey2); + LSTATUS oldKeyRes1 = RegOpenKeyEx(HKEY_LOCAL_MACHINE, oldKeyStr1.toStdWString().c_str(), 0, KEY_READ, &oldKey1); + LSTATUS oldKeyRes2 = RegOpenKeyEx(HKEY_LOCAL_MACHINE, oldKeyStr2.toStdWString().c_str(), 0, KEY_READ, &oldKey2); + + bool existNew1 = (newKeyRes1 == ERROR_SUCCESS) && (RegQueryValueEx(newKey1, L"InstallDate", 0, &checkType, (BYTE*)checkStr, &checkSize) == ERROR_SUCCESS); checkSize = bufSize * 2; + bool existNew2 = (newKeyRes2 == ERROR_SUCCESS) && (RegQueryValueEx(newKey2, L"InstallDate", 0, &checkType, (BYTE*)checkStr, &checkSize) == ERROR_SUCCESS); checkSize = bufSize * 2; + bool existOld1 = (oldKeyRes1 == ERROR_SUCCESS) && (RegQueryValueEx(oldKey1, L"InstallDate", 0, &checkType, (BYTE*)checkStr, &checkSize) == ERROR_SUCCESS); checkSize = bufSize * 2; + bool existOld2 = (oldKeyRes2 == ERROR_SUCCESS) && (RegQueryValueEx(oldKey2, L"InstallDate", 0, &checkType, (BYTE*)checkStr, &checkSize) == ERROR_SUCCESS); checkSize = bufSize * 2; + + if (newKeyRes1 == ERROR_SUCCESS) RegCloseKey(newKey1); + if (newKeyRes2 == ERROR_SUCCESS) RegCloseKey(newKey2); + if (oldKeyRes1 == ERROR_SUCCESS) RegCloseKey(oldKey1); + if (oldKeyRes2 == ERROR_SUCCESS) RegCloseKey(oldKey2); + + if (existNew1 || existNew2) { + oldKeyRes1 = existOld1 ? RegDeleteKey(HKEY_LOCAL_MACHINE, oldKeyStr1.toStdWString().c_str()) : ERROR_SUCCESS; + oldKeyRes2 = existOld2 ? RegDeleteKey(HKEY_LOCAL_MACHINE, oldKeyStr2.toStdWString().c_str()) : ERROR_SUCCESS; + } + + QString userDesktopLnk, commonDesktopLnk; + WCHAR userDesktopFolder[MAX_PATH], commonDesktopFolder[MAX_PATH]; + HRESULT userDesktopRes = SHGetFolderPath(0, CSIDL_DESKTOPDIRECTORY, 0, SHGFP_TYPE_CURRENT, userDesktopFolder); + HRESULT commonDesktopRes = SHGetFolderPath(0, CSIDL_COMMON_DESKTOPDIRECTORY, 0, SHGFP_TYPE_CURRENT, commonDesktopFolder); + if (SUCCEEDED(userDesktopRes)) { + userDesktopLnk = QString::fromWCharArray(userDesktopFolder) + "\\Telegram.lnk"; + } + if (SUCCEEDED(commonDesktopRes)) { + commonDesktopLnk = QString::fromWCharArray(commonDesktopFolder) + "\\Telegram.lnk"; + } + QFile userDesktopFile(userDesktopLnk), commonDesktopFile(commonDesktopLnk); + if (QFile::exists(userDesktopLnk) && QFile::exists(commonDesktopLnk) && userDesktopLnk != commonDesktopLnk) { + bool removed = QFile::remove(commonDesktopLnk); + } + } catch (...) { + }*/ +} + +int psFixPrevious() { + /*__try + { + psDoFixPrevious(); + } + __except(EXCEPTION_EXECUTE_HANDLER) + { + return 0; + }*/ + return 0; +} + +bool psCheckReadyUpdate() { + /*QString readyPath = cWorkingDir() + qsl("tupdates/ready"); + if (!QDir(readyPath).exists()) { + return false; + } + + // check ready version + QString versionPath = readyPath + qsl("/tdata/version"); + { + QFile fVersion(versionPath); + if (!fVersion.open(QIODevice::ReadOnly)) { + LOG(("Update Error: cant read version file '%1'").arg(versionPath)); + PsUpdateDownloader::clearAll(); + return false; + } + DWORD versionNum; + if (fVersion.read((char*)&versionNum, sizeof(DWORD)) != sizeof(DWORD)) { + LOG(("Update Error: cant read version from file '%1'").arg(versionPath)); + PsUpdateDownloader::clearAll(); + return false; + } + fVersion.close(); + if (versionNum <= AppVersion) { + LOG(("Update Error: cant install version %1 having version %2").arg(versionNum).arg(AppVersion)); + PsUpdateDownloader::clearAll(); + return false; + } + } + + QString curUpdater = (cExeDir() + "Updater.exe"); + QFileInfo updater(cWorkingDir() + "tupdates/ready/Updater.exe"); + if (!updater.exists()) { + QFileInfo current(curUpdater); + if (!current.exists()) { + PsUpdateDownloader::clearAll(); + return false; + } + if (CopyFile(current.absoluteFilePath().toStdWString().c_str(), updater.absoluteFilePath().toStdWString().c_str(), TRUE) == FALSE) { + PsUpdateDownloader::clearAll(); + return false; + } + } + if (CopyFile(updater.absoluteFilePath().toStdWString().c_str(), curUpdater.toStdWString().c_str(), FALSE) == FALSE) { + PsUpdateDownloader::clearAll(); + return false; + } + if (DeleteFile(updater.absoluteFilePath().toStdWString().c_str()) == FALSE) { + PsUpdateDownloader::clearAll(); + return false; + }*/ + return false; // TODO +} + +void psPostprocessFile(const QString &name) { + /*std::wstring zoneFile = QDir::toNativeSeparators(name).toStdWString() + L":Zone.Identifier"; + HANDLE f = CreateFile(zoneFile.c_str(), GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); + if (f == INVALID_HANDLE_VALUE) { // :( + return; + } + + const char data[] = "[ZoneTransfer]\r\nZoneId=3\r\n"; + + DWORD written = 0; + BOOL result = WriteFile(f, data, sizeof(data), &written, NULL); + CloseHandle(f); + + if (!result || written != sizeof(data)) { // :( + return; + }*/ +} + +void psOpenFile(const QString &name, bool openWith) { + /*std::wstring wname = QDir::toNativeSeparators(name).toStdWString(); + + if (openWith && useOpenAs) { + if (shOpenWithDialog) { + OPENASINFO info; + info.oaifInFlags = OAIF_ALLOW_REGISTRATION | OAIF_REGISTER_EXT | OAIF_EXEC; + info.pcszClass = NULL; + info.pcszFile = wname.c_str(); + shOpenWithDialog(0, &info); + } else { + openAs_RunDLL(0, 0, wname.c_str(), SW_SHOWNORMAL); + } + } else { + ShellExecute(0, L"open", wname.c_str(), 0, 0, SW_SHOWNORMAL); + }*/ +} + +void psShowInFolder(const QString &name) { + //QString nameEscaped = QDir::toNativeSeparators(name).replace('"', qsl("\"\"")); + //ShellExecute(0, 0, qsl("explorer").toStdWString().c_str(), (qsl("/select,") + nameEscaped).toStdWString().c_str(), 0, SW_SHOWNORMAL); +} + +void psExecUpdater() { + /*QString targs = qsl("-update"); + if (cFromAutoStart()) targs += qsl(" -autostart"); + if (cDebug()) targs += qsl(" -debug"); + + QString updater(QDir::toNativeSeparators(cExeDir() + "Updater.exe")), wdir(QDir::toNativeSeparators(cWorkingDir())); + + DEBUG_LOG(("Application Info: executing %1 %2").arg(cExeDir() + "Updater.exe").arg(targs)); + HINSTANCE r = ShellExecute(0, 0, updater.toStdWString().c_str(), targs.toStdWString().c_str(), wdir.isEmpty() ? 0 : wdir.toStdWString().c_str(), SW_SHOWNORMAL); + if (long(r) < 32) { + DEBUG_LOG(("Application Error: failed to execute %1, working directory: '%2', result: %3").arg(updater).arg(wdir).arg(long(r))); + QString readyPath = cWorkingDir() + qsl("tupdates/ready"); + PsUpdateDownloader::deleteDir(readyPath); + }*/ +} + +void psExecTelegram() { + /*QString targs = qsl("-noupdate -tosettings"); + if (cFromAutoStart()) targs += qsl(" -autostart"); + if (cDebug()) targs += qsl(" -debug"); + if (cDataFile() != (cTestMode() ? qsl("data_test") : qsl("data"))) targs += qsl(" -key \"") + cDataFile() + '"'; + + QString telegram(QDir::toNativeSeparators(cExeDir() + "Telegram.exe")), wdir(QDir::toNativeSeparators(cWorkingDir())); + + DEBUG_LOG(("Application Info: executing %1 %2").arg(cExeDir() + "Telegram.exe").arg(targs)); + HINSTANCE r = ShellExecute(0, 0, telegram.toStdWString().c_str(), targs.toStdWString().c_str(), wdir.isEmpty() ? 0 : wdir.toStdWString().c_str(), SW_SHOWNORMAL); + if (long(r) < 32) { + DEBUG_LOG(("Application Error: failed to execute %1, working directory: '%2', result: %3").arg(telegram).arg(wdir).arg(long(r))); + }*/ +} + +void psAutoStart(bool start, bool silent) { + /*WCHAR startupFolder[MAX_PATH]; + HRESULT hres = SHGetFolderPath(0, CSIDL_STARTUP, 0, SHGFP_TYPE_CURRENT, startupFolder); + if (SUCCEEDED(hres)) { + QString lnk = QString::fromWCharArray(startupFolder) + "\\Telegram.lnk"; + if (start) { + IShellLink* psl; + hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl); + if (SUCCEEDED(hres)) { + IPersistFile* ppf; + + QString exe = QDir::toNativeSeparators(QDir(cExeDir()).absolutePath() + "//Telegram.exe"), dir = QDir::toNativeSeparators(QDir(cWorkingDir()).absolutePath()); + psl->SetArguments(L"-autostart"); + psl->SetPath(exe.toStdWString().c_str()); + psl->SetWorkingDirectory(dir.toStdWString().c_str()); + psl->SetDescription(L"Telegram autorun link.\nYou can disable autorun in Telegram settings."); + + hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf); + + if (SUCCEEDED(hres)) { + hres = ppf->Save(lnk.toStdWString().c_str(), TRUE); + ppf->Release(); + } else { + if (!silent) LOG(("App Error: could not create interface IID_IPersistFile %1").arg(hres)); + } + psl->Release(); + } else { + if (!silent) LOG(("App Error: could not create instance of IID_IShellLink %1").arg(hres)); + } + } else { + QFile::remove(lnk); + } + } else { + if (!silent) LOG(("App Error: could not get CSIDL_STARTUP folder %1").arg(hres)); + }*/ +} diff --git a/Telegram/SourceFiles/pspecific_mac_p.h b/Telegram/SourceFiles/pspecific_mac_p.h new file mode 100644 index 000000000..0e822470f --- /dev/null +++ b/Telegram/SourceFiles/pspecific_mac_p.h @@ -0,0 +1,51 @@ +/* +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 +*/ +#pragma once + +class PsMacWindowData; + +class PsMacWindowPrivate { +public: + + PsMacWindowPrivate(); + + void setWindowBadge(const char *utf8str); + void startBounce(); + + void holdOnTop(WId winId); + void showOverAll(WId winId); + void activateWnd(WId winId); + void showNotify(unsigned long long peer, const char *utf8title, const char *subtitle, const char *utf8msg); + void clearNotifies(unsigned long long peer = 0); + + virtual void activeSpaceChanged() { + } + virtual void notifyClicked(unsigned long long peer) { + } + virtual void notifyReplied(unsigned long long peer, const char *str) { + } + + ~PsMacWindowPrivate(); + + PsMacWindowData *data; + +}; + +void _debugShowAlert(const char *utf8str); +void _outputDebugString(const char *utf8str); +int64 _idleTime(); diff --git a/Telegram/SourceFiles/pspecific_mac_p.mm b/Telegram/SourceFiles/pspecific_mac_p.mm new file mode 100644 index 000000000..c5828bb15 --- /dev/null +++ b/Telegram/SourceFiles/pspecific_mac_p.mm @@ -0,0 +1,258 @@ +/* +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 +*/ +#include "stdafx.h" +#include "pspecific_mac_p.h" + +#include +#include +#include + +@interface ObserverHelper : NSObject { +} + +- (id) init:(PsMacWindowPrivate *)aWnd; +- (void) activeSpaceDidChange:(NSNotification *)aNotification; + +@end + +@interface NotifyHandler : NSObject { +} + +- (id) init:(PsMacWindowPrivate *)aWnd; + +- (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification; + +- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification; + +@end + +class PsMacWindowData { +public: + + PsMacWindowData(PsMacWindowPrivate *wnd) : + wnd(wnd), + observerHelper([[ObserverHelper alloc] init:wnd]), + notifyHandler([[NotifyHandler alloc] init:wnd]) { + } + + void onNotifyClick(NSUserNotification *notification) { + NSNumber *peerObj = [[notification userInfo] objectForKey:@"peer"]; + unsigned long long peerLong = [peerObj unsignedLongLongValue]; + wnd->notifyClicked(peerLong); + } + + void onNotifyReply(NSUserNotification *notification) { +// notification.response + } + + ~PsMacWindowData() { + [observerHelper release]; + [notifyHandler release]; + } + + PsMacWindowPrivate *wnd; + ObserverHelper *observerHelper; + NotifyHandler *notifyHandler; +}; + +@implementation ObserverHelper { + PsMacWindowPrivate *wnd; +} + +- (id) init:(PsMacWindowPrivate *)aWnd { + if (self = [super init]) { + wnd = aWnd; + } + return self; +} + +- (void) activeSpaceDidChange:(NSNotification *)aNotification { + wnd->activeSpaceChanged(); +} + +@end + +@implementation NotifyHandler { + PsMacWindowPrivate *wnd; +} + +- (id) init:(PsMacWindowPrivate *)aWnd { + if (self = [super init]) { + wnd = aWnd; + } + return self; +} + +- (void) userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification { + if (notification.activationType == NSUserNotificationActivationTypeReplied){ + wnd->data->onNotifyReply(notification); + } else if (notification.activationType == NSUserNotificationActivationTypeContentsClicked) { + wnd->data->onNotifyClick(notification); + } + [center removeDeliveredNotification: notification]; +} + +- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification { + return YES; +} + +@end + +PsMacWindowPrivate::PsMacWindowPrivate() : data(new PsMacWindowData(this)) { + [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:data->observerHelper selector:@selector(activeSpaceDidChange:) name:NSWorkspaceActiveSpaceDidChangeNotification object:nil]; + NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter]; + [center setDelegate:data->notifyHandler]; +} + +void PsMacWindowPrivate::setWindowBadge(const char *utf8str) { + NSString *badgeString = [[NSString alloc] initWithUTF8String:utf8str]; + [[NSApp dockTile] setBadgeLabel:badgeString]; + [badgeString release]; +} + +void PsMacWindowPrivate::startBounce() { + [NSApp requestUserAttention:NSInformationalRequest]; +} + +void PsMacWindowPrivate::holdOnTop(WId winId) { + NSWindow *wnd = [reinterpret_cast(winId) window]; + [wnd setHidesOnDeactivate:NO]; +} + +void PsMacWindowPrivate::showOverAll(WId winId) { + NSWindow *wnd = [reinterpret_cast(winId) window]; + [wnd setLevel:NSFloatingWindowLevel]; + [wnd setStyleMask:NSUtilityWindowMask | NSNonactivatingPanelMask]; + [wnd setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary|NSWindowCollectionBehaviorIgnoresCycle]; +} + +void PsMacWindowPrivate::activateWnd(WId winId) { + NSWindow *wnd = [reinterpret_cast(winId) window]; + [wnd orderFront:wnd]; +} + +void PsMacWindowPrivate::showNotify(unsigned long long peer, const char *utf8title, const char *utf8subtitle, const char *utf8msg) { + NSUserNotification *notification = [[NSUserNotification alloc] init]; + + NSDictionary *uinfo = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithUnsignedLongLong:peer],@"peer",nil]; + [notification setUserInfo:uinfo]; + [uinfo release]; + + NSString *title = [[NSString alloc] initWithUTF8String:utf8title]; + [notification setTitle:title]; + [title release]; + + NSString *subtitle = [[NSString alloc] initWithUTF8String:utf8subtitle]; + [notification setSubtitle:subtitle]; + [subtitle release]; + + NSString *msg = [[NSString alloc] initWithUTF8String:utf8msg]; + [notification setInformativeText:msg]; + [msg release]; + +// [notification setHasReplyButton:YES]; + + [notification setSoundName:nil]; + + NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter]; + [center deliverNotification:notification]; + + [notification release]; +} + +void PsMacWindowPrivate::clearNotifies(unsigned long long peer) { + NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter]; + if (peer) { + NSArray *notifies = [center deliveredNotifications]; + for (id notify in notifies) { + if ([[[notify userInfo] objectForKey:@"peer"] unsignedLongLongValue] == peer) { + [center removeDeliveredNotification:notify]; + } + } + } else { + [center removeAllDeliveredNotifications]; + } +} + +void _debugShowAlert(const char *utf8str) { + NSString *text = [[NSString alloc] initWithUTF8String: utf8str]; + 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) { + NSString *text = [[NSString alloc] initWithUTF8String:utf8str]; + NSLog(@"%@", text); + [text release]; +} + +PsMacWindowPrivate::~PsMacWindowPrivate() { + delete data; +} + +int64 _idleTime() { // taken from https://github.com/trueinteractions/tint/issues/53 + CFMutableDictionaryRef properties = 0; + CFTypeRef obj; + mach_port_t masterPort; + io_iterator_t iter; + io_registry_entry_t curObj; + + IOMasterPort(MACH_PORT_NULL, &masterPort); + + /* Get IOHIDSystem */ + IOServiceGetMatchingServices(masterPort, IOServiceMatching("IOHIDSystem"), &iter); + if (iter == 0) { + return -1; + } else { + curObj = IOIteratorNext(iter); + } + if (IORegistryEntryCreateCFProperties(curObj, &properties, kCFAllocatorDefault, 0) == KERN_SUCCESS && properties != NULL) { + obj = CFDictionaryGetValue(properties, CFSTR("HIDIdleTime")); + CFRetain(obj); + } else { + return -1; + } + + uint64 err = ~0L, result = err; + if (obj) { + CFTypeID type = CFGetTypeID(obj); + + if (type == CFDataGetTypeID()) { + CFDataGetBytes((CFDataRef) obj, CFRangeMake(0, sizeof(result)), (UInt8*)&result); + } else if (type == CFNumberGetTypeID()) { + CFNumberGetValue((CFNumberRef)obj, kCFNumberSInt64Type, &result); + } else { + // error + } + + CFRelease(obj); + + if (result != err) { + result /= 1000000; // return as ms + } + } else { + // error + } + + CFRelease((CFTypeRef)properties); + IOObjectRelease(curObj); + IOObjectRelease(iter); + return (result == err) ? -1 : int64(result); +} diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index 79fae055a..4bf579be4 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -1,3 +1,4 @@ + /* This file is part of Telegram Desktop, an unofficial desktop messaging app, see https://telegram.org @@ -1878,7 +1879,7 @@ PsNotifyWindow::~PsNotifyWindow() { if (App::wnd()) App::wnd()->psShowNextNotify(this); } -PsApplication::PsApplication(int argc, char *argv[]) : QApplication(argc, argv) { +PsApplication::PsApplication(int &argc, char **argv) : QApplication(argc, argv) { } void PsApplication::psInstallEventFilter() { @@ -2444,12 +2445,12 @@ QString psAppDataPath() { WCHAR wstrPath[maxFileLen]; if (GetEnvironmentVariable(L"APPDATA", wstrPath, maxFileLen)) { QDir appData(QString::fromStdWString(std::wstring(wstrPath))); - return appData.absolutePath() + "/" + QString::fromWCharArray(AppName) + "/"; + return appData.absolutePath() + '/' + QString::fromWCharArray(AppName) + '/'; } return QString(); } -QString psCurrentExeDirectory() { +QString psCurrentExeDirectory(int argc, char *argv[]) { LPWSTR *args; int argsCount; args = CommandLineToArgvW(GetCommandLine(), &argsCount); diff --git a/Telegram/SourceFiles/pspecific_wnd.h b/Telegram/SourceFiles/pspecific_wnd.h index 70634a5e3..6189c380d 100644 --- a/Telegram/SourceFiles/pspecific_wnd.h +++ b/Telegram/SourceFiles/pspecific_wnd.h @@ -187,7 +187,7 @@ class PsApplication : public QApplication { public: - PsApplication(int argc, char *argv[]); + PsApplication(int &argc, char **argv); void psInstallEventFilter(); ~PsApplication(); @@ -246,7 +246,7 @@ QString psLocalServerPrefix(); QString psCurrentCountry(); QString psCurrentLanguage(); QString psAppDataPath(); -QString psCurrentExeDirectory(); +QString psCurrentExeDirectory(int argc, char *argv[]); void psAutoStart(bool start, bool silent = false); int psCleanup(); diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index 97bc10f08..c9e24dcb1 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -65,9 +65,23 @@ RecentEmojiPreload gRecentEmojisPreload; QString gLangFile; +bool gRetina = false; +float64 gRetinaFactor = 1.; +bool gCustomNotifies = false; + +#ifdef Q_OS_WIN +DBIPlatform gPlatform = dbipWindows; +#elif defined Q_OS_MAC +DBIPlatform gPlatform = dbipMac; +#elif defined Q_OS_LINUX +DBIPlatform gPlatform = dbipLinux; +#else +#error Unknown platform +#endif + void settingsParseArgs(int argc, char *argv[]) { - gExeDir = psCurrentExeDirectory(); - for (uint32 i = 0; i < argc; ++i) { + gExeDir = psCurrentExeDirectory(argc, argv); + for (int32 i = 0; i < argc; ++i) { if (string("-release") == argv[i]) { gTestMode = false; } else if (string("-debug") == argv[i]) { diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index ebb40f905..d69ae3df2 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -130,4 +130,10 @@ const RecentEmojiPack &cGetRecentEmojis(); DeclareReadSetting(QString, LangFile); +DeclareSetting(bool, Retina); +DeclareSetting(float64, RetinaFactor); +DeclareSetting(bool, CustomNotifies); + +DeclareReadSetting(DBIPlatform, Platform); + void settingsParseArgs(int argc, char *argv[]); diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index 4823d7a62..78da9d64b 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -96,17 +96,17 @@ QString scaleLabel(DBIScale scale) { } bool scaleIs(DBIScale scale) { - return cRealScale() == scale || cRealScale() == dbisAuto && cScreenScale() == scale; + return cRealScale() == scale || (cRealScale() == dbisAuto && cScreenScale() == scale); } SettingsInner::SettingsInner(Settings *parent) : QWidget(parent), _self(App::self()), // profile - _phoneText(_self ? App::formatPhone(_self->phone) : QString()), - _uploadPhoto(this, lang(lng_settings_upload), st::btnSetUpload), - _cancelPhoto(this, lang(lng_cancel)), - _nameOver(false), _photoOver(false), a_photo(0), _nameCache(_self ? _self->name : QString()), + _nameCache(_self ? _self->name : QString()), + _phoneText(_self ? App::formatPhone(_self->phone) : QString()), + _uploadPhoto(this, lang(lng_settings_upload), st::btnSetUpload), + _cancelPhoto(this, lang(lng_cancel)), _nameOver(false), _photoOver(false), a_photo(0), // notifications _desktopNotify(this, lang(lng_settings_desktop_notify), cDesktopNotify()), @@ -1066,8 +1066,8 @@ void Settings::animShow(const QPixmap &bgAnimCache, bool back) { anim::stop(this); showAll(); - _animCache = grab(rect()); - + _animCache = myGrab(this, rect()); + a_coord = back ? anim::ivalue(-st::introSlideShift, 0) : anim::ivalue(st::introSlideShift, 0); a_alpha = anim::fvalue(0, 1); a_bgCoord = back ? anim::ivalue(0, st::introSlideShift) : anim::ivalue(0, -st::introSlideShift); diff --git a/Telegram/SourceFiles/types.cpp b/Telegram/SourceFiles/types.cpp index 1ae96b393..e426c50cf 100644 --- a/Telegram/SourceFiles/types.cpp +++ b/Telegram/SourceFiles/types.cpp @@ -79,24 +79,54 @@ namespace { QReadWriteLock unixtimeLock; volatile int32 unixtimeDelta = 0; volatile bool unixtimeWasSet = false; - volatile uint64 msgIdStart, msgIdLocal = 0; + volatile uint64 _msgIdStart, _msgIdLocal = 0, _msgIdMsStart; uint32 _reqId = 0; + + void _initMsgIdConstants() { +#ifdef Q_OS_WIN + LARGE_INTEGER li; + QueryPerformanceCounter(&li); + _msgIdMsStart = li.QuadPart; +#elif defined Q_OS_MAC + _msgIdMsStart = mach_absolute_time(); +#else + timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + _msgIdMsStart = 1000000000 * uint64(ts.tv_sec) + uint64(ts.tv_nsec); +#endif + + uint32 msgIdRand; + memset_rand(&msgIdRand, sizeof(uint32)); + _msgIdStart = (((uint64)((uint32)unixtime()) << 32) | (uint64)msgIdRand); + } } int32 myunixtime() { return (int32)time(NULL); } +void unixtimeInit() { + { + QWriteLocker locker(&unixtimeLock); + unixtimeWasSet = false; + unixtimeDelta = 0; + } + _initMsgIdConstants(); +} + void unixtimeSet(int32 serverTime, bool force) { - QWriteLocker locker(&unixtimeLock); - if (force) { - DEBUG_LOG(("MTP Info: forced setting client unixtime to %1").arg(serverTime)); - } else { - if (unixtimeWasSet) return; - DEBUG_LOG(("MTP Info: setting client unixtime to %1").arg(serverTime)); - } - unixtimeWasSet = true; - unixtimeDelta = serverTime + 1 - myunixtime(); + { + QWriteLocker locker(&unixtimeLock); + if (force) { + DEBUG_LOG(("MTP Info: forced setting client unixtime to %1").arg(serverTime)); + } else { + if (unixtimeWasSet) return; + DEBUG_LOG(("MTP Info: setting client unixtime to %1").arg(serverTime)); + } + unixtimeWasSet = true; + unixtimeDelta = serverTime + 1 - myunixtime(); + } + _initMsgIdConstants(); } int32 unixtime() { @@ -121,7 +151,7 @@ MTPint toServerTime(const int32 &clientTime) { namespace { float64 _msFreq; float64 _msgIdCoef; - uint64 _msStart = 0; + int64 _msStart = 0; class _MsInitializer { public: @@ -137,7 +167,7 @@ namespace { QueryPerformanceCounter(&li); _msStart = li.QuadPart; #elif defined Q_OS_MAC - mach_timebase_info_data_t tb = { 0 }; + mach_timebase_info_data_t tb = { 0, 0 }; mach_timebase_info(&tb); _msFreq = (float64(tb.numer) / tb.denom) / 1000000.; @@ -163,24 +193,11 @@ namespace { } } }; - - class _MsgIdInitializer { - public: - _MsgIdInitializer() { - uint32 msgIdRand; - memset_rand(&msgIdRand, sizeof(uint32)); - msgIdStart = (((uint64)((uint32)time(NULL)) << 32) | (uint64)msgIdRand); - } - }; - + void _msInitialize() { static _MsInitializer _msInitializer; } - void _msgIdInitialize() { - static _MsgIdInitializer _msgIdInitializer; - } - class _MsStarter { public: _MsStarter() { @@ -212,16 +229,13 @@ uint64 getms() { } uint64 msgid() { - _msInitialize(); - _msgIdInitialize(); - #ifdef Q_OS_WIN LARGE_INTEGER li; QueryPerformanceCounter(&li); - uint64 result = msgIdStart + (uint64)floor((li.QuadPart - _msStart) * _msgIdCoef); + int64 result = _msgIdStart + (int64)floor((li.QuadPart - _msgIdMsStart) * _msgIdCoef); #elif defined Q_OS_MAC - uint64 msCount = mach_absolute_time(); - uint64 result = msgIdStart + (uint64)floor((msCount - _msStart) * _msgIdCoef); + int64 msCount = mach_absolute_time(); + int64 result = _msgIdStart + (int64)floor((msCount - _msgIdMsStart) * _msgIdCoef); #else uint64 result = 0; //TODO @@ -229,8 +243,7 @@ uint64 msgid() { result &= ~0x03L; - QWriteLocker locker(&unixtimeLock); - return result + ((uint64)unixtimeDelta << 32) + (msgIdLocal += 4); + return result + (_msgIdLocal += 4); } uint32 reqid() { diff --git a/Telegram/SourceFiles/types.h b/Telegram/SourceFiles/types.h index e82f71a18..363286ba2 100644 --- a/Telegram/SourceFiles/types.h +++ b/Telegram/SourceFiles/types.h @@ -70,6 +70,7 @@ private: class MTPint; int32 myunixtime(); +void unixtimeInit(); void unixtimeSet(int32 servertime, bool force = false); int32 unixtime(); int32 fromServerTime(const MTPint &serverTime); @@ -268,6 +269,12 @@ enum DBIEmojiTab { dbietSymbols = 4, }; +enum DBIPlatform { + dbipWindows = 0, + dbipMac = 1, + dbipLinux = 2, +}; + typedef enum { HitTestNone = 0, HitTestClient, diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index 2febf5bb3..dab1fc75f 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -117,6 +117,7 @@ void Window::init() { setWindowIcon(myIcon); App::app()->installEventFilter(this); + connect(windowHandle(), SIGNAL(activeChanged()), this, SLOT(checkHistoryActivation())); QPalette p(palette()); p.setColor(QPalette::Window, st::wndBG->c); @@ -153,7 +154,7 @@ void Window::clearWidgets() { void Window::setupIntro(bool anim) { if (intro && (intro->animating() || intro->isVisible()) && !main) return; - QPixmap bg = grab(QRect(0, st::titleHeight, width(), height() - st::titleHeight)); + QPixmap bg = myGrab(this, QRect(0, st::titleHeight, width(), height() - st::titleHeight)); clearWidgets(); intro = new IntroWidget(this); @@ -172,7 +173,7 @@ void Window::getNotifySetting(const MTPInputNotifyPeer &peer, uint32 msWait) { } void Window::setupMain(bool anim) { - QPixmap bg = grab(QRect(0, st::titleHeight, width(), height() - st::titleHeight)); + QPixmap bg = myGrab(this, QRect(0, st::titleHeight, width(), height() - st::titleHeight)); clearWidgets(); main = new MainWidget(this); main->move(0, st::titleHeight); @@ -193,7 +194,7 @@ void Window::showSettings() { if (settings) { return hideSettings(); } - QPixmap bg = grab(QRect(0, st::titleHeight, width(), height() - st::titleHeight)); + QPixmap bg = myGrab(this, QRect(0, st::titleHeight, width(), height() - st::titleHeight)); if (intro) { anim::stop(intro); @@ -222,7 +223,7 @@ void Window::hideSettings(bool fast) { main->show(); } } else { - QPixmap bg = grab(QRect(0, st::titleHeight, width(), height() - st::titleHeight)); + QPixmap bg = myGrab(this, QRect(0, st::titleHeight, width(), height() - st::titleHeight)); anim::stop(settings); settings->hide(); @@ -338,12 +339,12 @@ bool Window::layerShown() { return !!layerBG || !!_topWidget; } -bool Window::historyIsActive() const { - return psIsActive() && main && main->historyIsActive() && (!settings || !settings->isVisible()); +bool Window::historyIsActive(int state) const { + return psIsActive(state) && main && main->historyIsActive() && (!settings || !settings->isVisible()); } -void Window::checkHistoryActivation() { - if (main && MTP::authedId() && historyIsActive()) { +void Window::checkHistoryActivation(int state) { + if (main && MTP::authedId() && historyIsActive(state)) { main->historyWasRead(); } } @@ -442,7 +443,7 @@ QRect Window::iconRect() const { bool Window::eventFilter(QObject *obj, QEvent *evt) { if (obj == App::app() && (evt->type() == QEvent::ApplicationActivate)) { - checkHistoryActivation(); + QTimer::singleShot(1, this, SLOT(checkHistoryActivation())); } return PsMainWindow::eventFilter(obj, evt); } @@ -572,7 +573,7 @@ void Window::noTopWidget(QWidget *w) { void Window::showFromTray(QSystemTrayIcon::ActivationReason reason) { if (reason != QSystemTrayIcon::Context) { - activate(); + activate(); setWindowIcon(myIcon); psUpdateCounter(); if (App::main()) App::main()->setOnline(windowState()); diff --git a/Telegram/SourceFiles/window.h b/Telegram/SourceFiles/window.h index b7ddc9140..66fca6df2 100644 --- a/Telegram/SourceFiles/window.h +++ b/Telegram/SourceFiles/window.h @@ -122,8 +122,7 @@ public: bool layerShown(); - bool historyIsActive() const; - void checkHistoryActivation(); + bool historyIsActive(int state = -1) const; bool getPhotoCoords(PhotoData *photo, int32 &x, int32 &y, int32 &w) const; bool getVideoCoords(VideoData *video, int32 &x, int32 &y, int32 &w) const; @@ -153,6 +152,8 @@ public: public slots: + void checkHistoryActivation(int state = -1); + void showSettings(); void layerHidden(); void updateTitleStatus(); diff --git a/Telegram/Style.plist b/Telegram/Style.plist new file mode 100644 index 000000000..0aa83965c --- /dev/null +++ b/Telegram/Style.plist @@ -0,0 +1,20 @@ + + + + + CFBundleExecutable + MetaStyle + CFBundleGetInfoString + MetaStyle compiler + CFBundleIdentifier + com.tdesktop.${PRODUCT_NAME:rfc1034identifier} + CFBundlePackageType + APPL + CFBundleSignature + ???? + NOTE + + NSPrincipalClass + NSApplication + + diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist new file mode 100644 index 000000000..053296071 --- /dev/null +++ b/Telegram/Telegram.plist @@ -0,0 +1,22 @@ + + + + + CFBundleExecutable + Telegram + CFBundleGetInfoString + Telegram Desktop messaging app + CFBundleIdentifier + com.tdesktop.${PRODUCT_NAME:rfc1034identifier} + CFBundlePackageType + APPL + CFBundleShortVersionString + 0.5.1 + CFBundleSignature + ???? + NOTE + + NSPrincipalClass + NSApplication + + diff --git a/Telegram/Telegram.pro b/Telegram/Telegram.pro new file mode 100644 index 000000000..f21d06e91 --- /dev/null +++ b/Telegram/Telegram.pro @@ -0,0 +1,199 @@ +QT += core gui widgets network multimedia + +CONFIG(debug, debug|release) { + DEFINES += _DEBUG + OBJECTS_DIR = ./../Mac/DebugIntermediate + MOC_DIR = ./GeneratedFiles/Debug + RCC_DIR = ./GeneratedFiles + DESTDIR = ./../Mac/Debug +} +CONFIG(release, debug|release) { + OBJECTS_DIR = ./../Mac/ReleaseIntermediate + MOC_DIR = ./GeneratedFiles/Release + RCC_DIR = ./GeneratedFiles + DESTDIR = ./../Mac/Release +} + +macx { + QMAKE_INFO_PLIST = ./SourceFiles/Telegram.plist + OBJECTIVE_SOURCES += ./SourceFiles/pspecific_mac_p.mm + OBJECTIVE_HEADERS += ./SourceFiles/pspecific_mac_p.h + QMAKE_LFLAGS += -framework Cocoa +} + +SOURCES += \ + ./SourceFiles/main.cpp \ + ./SourceFiles/stdafx.cpp \ + ./SourceFiles/app.cpp \ + ./SourceFiles/application.cpp \ + ./SourceFiles/dialogswidget.cpp \ + ./SourceFiles/dropdown.cpp \ + ./SourceFiles/fileuploader.cpp \ + ./SourceFiles/history.cpp \ + ./SourceFiles/historywidget.cpp \ + ./SourceFiles/langloaderplain.cpp \ + ./SourceFiles/layerwidget.cpp \ + ./SourceFiles/profilewidget.cpp \ + ./SourceFiles/localimageloader.cpp \ + ./SourceFiles/logs.cpp \ + ./SourceFiles/mainwidget.cpp \ + ./SourceFiles/settings.cpp \ + ./SourceFiles/settingswidget.cpp \ + ./SourceFiles/supporttl.cpp \ + ./SourceFiles/sysbuttons.cpp \ + ./SourceFiles/title.cpp \ + ./SourceFiles/types.cpp \ + ./SourceFiles/window.cpp \ + ./SourceFiles/mtproto/mtp.cpp \ + ./SourceFiles/mtproto/mtpConnection.cpp \ + ./SourceFiles/mtproto/mtpDC.cpp \ + ./SourceFiles/mtproto/mtpFileLoader.cpp \ + ./SourceFiles/mtproto/mtpRPC.cpp \ + ./SourceFiles/mtproto/mtpSession.cpp \ + ./SourceFiles/gui/animation.cpp \ + ./SourceFiles/gui/boxshadow.cpp \ + ./SourceFiles/gui/button.cpp \ + ./SourceFiles/gui/countrycodeinput.cpp \ + ./SourceFiles/gui/countryinput.cpp \ + ./SourceFiles/gui/emoji_config.cpp \ + ./SourceFiles/gui/filedialog.cpp \ + ./SourceFiles/gui/flatbutton.cpp \ + ./SourceFiles/gui/flatcheckbox.cpp \ + ./SourceFiles/gui/flatinput.cpp \ + ./SourceFiles/gui/flatlabel.cpp \ + ./SourceFiles/gui/flattextarea.cpp \ + ./SourceFiles/gui/images.cpp \ + ./SourceFiles/gui/phoneinput.cpp \ + ./SourceFiles/gui/scrollarea.cpp \ + ./SourceFiles/gui/style_core.cpp \ + ./SourceFiles/gui/text.cpp \ + ./SourceFiles/gui/twidget.cpp \ + ./GeneratedFiles/lang.cpp \ + ./GeneratedFiles/style_auto.cpp \ + ./SourceFiles/boxes/aboutbox.cpp \ + ./SourceFiles/boxes/addcontactbox.cpp \ + ./SourceFiles/boxes/addparticipantbox.cpp \ + ./SourceFiles/boxes/confirmbox.cpp \ + ./SourceFiles/boxes/connectionbox.cpp \ + ./SourceFiles/boxes/contactsbox.cpp \ + ./SourceFiles/boxes/downloadpathbox.cpp \ + ./SourceFiles/boxes/emojibox.cpp \ + ./SourceFiles/boxes/newgroupbox.cpp \ + ./SourceFiles/boxes/photocropbox.cpp \ + ./SourceFiles/boxes/photosendbox.cpp \ + ./SourceFiles/intro/intro.cpp \ + ./SourceFiles/intro/introcode.cpp \ + ./SourceFiles/intro/introphone.cpp \ + ./SourceFiles/intro/introsignup.cpp \ + ./SourceFiles/intro/introsteps.cpp + +HEADERS += \ + ./SourceFiles/stdafx.h \ + ./SourceFiles/app.h \ + ./SourceFiles/application.h \ + ./SourceFiles/config.h \ + ./SourceFiles/countries.h \ + ./SourceFiles/dialogswidget.h \ + ./SourceFiles/dropdown.h \ + ./SourceFiles/fileuploader.h \ + ./SourceFiles/history.h \ + ./SourceFiles/historywidget.h \ + ./SourceFiles/langloaderplain.h \ + ./SourceFiles/layerwidget.h \ + ./SourceFiles/profilewidget.h \ + ./SourceFiles/localimageloader.h \ + ./SourceFiles/logs.h \ + ./SourceFiles/mainwidget.h \ + ./SourceFiles/settings.h \ + ./SourceFiles/settingswidget.h \ + ./SourceFiles/style.h \ + ./SourceFiles/supporttl.h \ + ./SourceFiles/sysbuttons.h \ + ./SourceFiles/title.h \ + ./SourceFiles/types.h \ + ./SourceFiles/window.h \ + ./SourceFiles/mtproto/mtpSessionImpl.h \ + ./SourceFiles/mtproto/mtp.h \ + ./SourceFiles/mtproto/mtpAuthKey.h \ + ./SourceFiles/mtproto/mtpConnection.h \ + ./SourceFiles/mtproto/mtpCoreTypes.h \ + ./SourceFiles/mtproto/mtpDC.h \ + ./SourceFiles/mtproto/mtpFileLoader.h \ + ./SourceFiles/mtproto/mtpPublicRSA.h \ + ./SourceFiles/mtproto/mtpRPC.h \ + ./SourceFiles/mtproto/mtpScheme.h \ + ./SourceFiles/mtproto/mtpSession.h \ + ./SourceFiles/pspecific.h \ + ./SourceFiles/gui/animation.h \ + ./SourceFiles/gui/boxshadow.h \ + ./SourceFiles/gui/button.h \ + ./SourceFiles/gui/countrycodeinput.h \ + ./SourceFiles/gui/countryinput.h \ + ./SourceFiles/gui/emoji_config.h \ + ./SourceFiles/gui/filedialog.h \ + ./SourceFiles/gui/flatbutton.h \ + ./SourceFiles/gui/flatcheckbox.h \ + ./SourceFiles/gui/flatinput.h \ + ./SourceFiles/gui/flatlabel.h \ + ./SourceFiles/gui/flattextarea.h \ + ./SourceFiles/gui/images.h \ + ./SourceFiles/gui/phoneinput.h \ + ./SourceFiles/gui/scrollarea.h \ + ./SourceFiles/gui/style_core.h \ + ./SourceFiles/gui/text.h \ + ./SourceFiles/gui/twidget.h \ + ./GeneratedFiles/lang.h \ + ./GeneratedFiles/style_auto.h \ + ./GeneratedFiles/style_classes.h \ + ./SourceFiles/boxes/aboutbox.h \ + ./SourceFiles/boxes/addcontactbox.h \ + ./SourceFiles/boxes/addparticipantbox.h \ + ./SourceFiles/boxes/confirmbox.h \ + ./SourceFiles/boxes/connectionbox.h \ + ./SourceFiles/boxes/contactsbox.h \ + ./SourceFiles/boxes/downloadpathbox.h \ + ./SourceFiles/boxes/emojibox.h \ + ./SourceFiles/boxes/newgroupbox.h \ + ./SourceFiles/boxes/photocropbox.h \ + ./SourceFiles/boxes/photosendbox.h \ + ./SourceFiles/intro/intro.h \ + ./SourceFiles/intro/introcode.h \ + ./SourceFiles/intro/introphone.h \ + ./SourceFiles/intro/introsignup.h \ + ./SourceFiles/intro/introsteps.h + +win32 { +SOURCES += \ + ./SourceFiles/pspecific_wnd.cpp +HEADERS += \ + ./SourceFiles/pspecific_wnd.h +} + +macx { +SOURCES += \ + ./SourceFiles/pspecific_mac.cpp +HEADERS += \ + ./SourceFiles/pspecific_mac.h +} + +CONFIG += precompile_header + +PRECOMPILED_HEADER = ./SourceFiles/stdafx.h + +INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui\ + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore\ + ./../../Libraries/QtStatic/qtbase/include\ + ./SourceFiles\ + ./GeneratedFiles\ + ./../../Libraries/lzma/C\ + ./../../Libraries/libexif-0.6.20 + +LIBS += -lcrypto -lssl -lz +LIBS += ./../../Libraries/libexif-0.6.20/libexif/.libs/libexif.a + +RESOURCES += \ + ./SourceFiles/telegram.qrc + +CONFIG(debug, debug|release) { + DEFINES += _DEBUG +} diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj new file mode 100644 index 000000000..f75a0bff4 --- /dev/null +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -0,0 +1,1722 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXAggregateTarget section */ + 07AA07135D01069052F55A12 /* Preprocess */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "Telegram" */; + buildPhases = ( + 7EF0942E79C014DCEC8976BC /* Qt Preprocessors */, + ); + dependencies = ( + 07C3AF42194CCC510016CFF1 /* PBXTargetDependency */, + ); + name = Preprocess; + productName = "Qt Preprocess"; + }; + 07C3AF39194CCC310016CFF1 /* Meta Compile */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 07C3AF3D194CCC310016CFF1 /* Build configuration list for PBXAggregateTarget "Meta Compile" */; + buildPhases = ( + 07C3AF3A194CCC310016CFF1 /* Meta Style */, + 07C3AF3B194CCC310016CFF1 /* Meta Lang */, + ); + dependencies = ( + ); + name = "Meta Compile"; + productName = "Qt Preprocess"; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 0250AB6761AC71A2E3155EEA /* moc_introphone.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 1B4A65B84270FF2FED008EB6 /* moc_introphone.cpp */; settings = {ATTRIBUTES = (); }; }; + 02F93BF511880983D3C57B84 /* dialogswidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = E466873F01ABA1E55E914489 /* dialogswidget.cpp */; settings = {ATTRIBUTES = (); }; }; + 03270F718426CFE84729079E /* flattextarea.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 5C7FD422BBEDA858D7237AE9 /* flattextarea.cpp */; settings = {ATTRIBUTES = (); }; }; + 06EABCC49D2EEE4076322BE7 /* moc_mtp.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 924D4939FD169BB4B8AEB1C9 /* moc_mtp.cpp */; settings = {ATTRIBUTES = (); }; }; + 07C3AF26194336250016CFF1 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 07C3AF24194335ED0016CFF1 /* Images.xcassets */; }; + 0A49F3A5DC0680FB31519670 /* phoneinput.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 7C8F9CA4FCE8AF8FCCCB961E /* phoneinput.cpp */; settings = {ATTRIBUTES = (); }; }; + 0CB7DE9A54CC9BF86FB7B5CA /* mtp.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 6D50D70712776D7ED3B00E5C /* mtp.cpp */; settings = {ATTRIBUTES = (); }; }; + 0F0FC25286E16E5F78962FEE /* moc_newgroupbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 69FE16874104731CE2A66E0D /* moc_newgroupbox.cpp */; settings = {ATTRIBUTES = (); }; }; + 0F7872E39EA570249D420912 /* moc_intro.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = A37C7E516201B0264A4CDA38 /* moc_intro.cpp */; settings = {ATTRIBUTES = (); }; }; + 113AA97DEE7847C7D2DCFF71 /* logs.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 974DB34EEB8F83B91614C0B0 /* logs.cpp */; settings = {ATTRIBUTES = (); }; }; + 1299DDAE203A7EDFED9F5D6B /* main.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 5271C394C1E7646D117CE67E /* main.cpp */; settings = {ATTRIBUTES = (); }; }; + 15364689D2AB5A30E87A689F /* Security.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 205259EEEE2BADA5E64741E3 /* Security.framework */; }; + 19A66ECD6EE2F8356F27D32D /* layerwidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 5A9B4C6C59856143F3D0DE53 /* layerwidget.cpp */; settings = {ATTRIBUTES = (); }; }; + 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 */; }; + 1BD711B4C358EA7D727BF358 /* moc_flatcheckbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 58E05D0B8B104D83F43F9859 /* moc_flatcheckbox.cpp */; settings = {ATTRIBUTES = (); }; }; + 1DF53374E3B6A31661548D08 /* historywidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = A83D2C19F756D3371E5999A8 /* historywidget.cpp */; settings = {ATTRIBUTES = (); }; }; + 26A81090DC8B5BCF7278FDFF /* qrc_telegram.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = D6FF6676816C4E374D374060 /* qrc_telegram.cpp */; settings = {ATTRIBUTES = (); }; }; + 298BFAB73BF182297584F96F /* contactsbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8C800AAC9549E6E9E7046BED /* contactsbox.cpp */; settings = {ATTRIBUTES = (); }; }; + 2A20C3BF118707980A2493E1 /* qtmultimedia_m3u in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 4EC011DBE92DD1FD208D94D2 /* qtmultimedia_m3u */; }; + 2A500B102B7CE80F3EB6E13E /* moc_mtpFileLoader.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 5591A965D1DC024FBDB40151 /* moc_mtpFileLoader.cpp */; settings = {ATTRIBUTES = (); }; }; + 2EF5D0AC9A18F9FE9B8A1ACA /* moc_introsignup.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 58A7114F60E7D09E73283983 /* moc_introsignup.cpp */; settings = {ATTRIBUTES = (); }; }; + 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; }; + 352349751855EF76DECA4D60 /* moc_historywidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 2C99425D7670941EAF07B453 /* moc_historywidget.cpp */; settings = {ATTRIBUTES = (); }; }; + 35A1A39F8EAB37889EB3D397 /* CoreAudio.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = BEF9DFDA6822604126A7E233 /* CoreAudio.framework */; }; + 37A3C6C782A0E4BC7B09536B /* langloaderplain.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = AF5776B0652744978B7DF6D3 /* langloaderplain.cpp */; settings = {ATTRIBUTES = (); }; }; + 3A62C3A2FB56A83C9C3A3AFF /* moc_phoneinput.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = B8100EAB0521FC7A937D2E4F /* moc_phoneinput.cpp */; settings = {ATTRIBUTES = (); }; }; + 3AA6E7264581F82856FB37F7 /* text.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 135FD3715BFDC50AD7B00E04 /* text.cpp */; settings = {ATTRIBUTES = (); }; }; + 3ABE4F9B2264F770D944106D /* emojibox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 0ECF1EB9BF3786A16731F685 /* emojibox.cpp */; settings = {ATTRIBUTES = (); }; }; + 3F6EB1F5B98E704960FEA686 /* moc_scrollarea.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8918F4B71ED5FC138AFD3F70 /* moc_scrollarea.cpp */; settings = {ATTRIBUTES = (); }; }; + 4078D5D614EB3ECF7F1848C7 /* types.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 7D075A915E8739C1B6BC5F43 /* types.cpp */; settings = {ATTRIBUTES = (); }; }; + 4426AF526AAD86D6F73CE36F /* addcontactbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 7CA6945B22800A0F30B75DA5 /* addcontactbox.cpp */; settings = {ATTRIBUTES = (); }; }; + 48D8FC93AA8FF5D184649F49 /* localimageloader.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 5A7F88F9C7F08D3DDE6EEF6B /* localimageloader.cpp */; settings = {ATTRIBUTES = (); }; }; + 496FD9CEEB508016AFB9F928 /* qico in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8F500B5166907B6D9A7C3E3D /* qico */; }; + 4978DE680549639AE9AA9CA6 /* introsignup.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = A9FF4818C6775109B3DBFA18 /* introsignup.cpp */; settings = {ATTRIBUTES = (); }; }; + 49C3C1BF153F7FC078A25CE4 /* moc_downloadpathbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 6532A0DC7EFE446967682E83 /* moc_downloadpathbox.cpp */; settings = {ATTRIBUTES = (); }; }; + 4B0036C794BEA27AF9419768 /* moc_layerwidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 1FE45A67215BEA2434F588E8 /* moc_layerwidget.cpp */; settings = {ATTRIBUTES = (); }; }; + 4BF3F8D0797BC8A0C1FAD13C /* introphone.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 61C679D8B4B332026BD34200 /* introphone.cpp */; settings = {ATTRIBUTES = (); }; }; + 4EB68D0C8182BCE33529C421 /* AudioToolbox.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 3C44131FDCFEF4396B9EA2BA /* AudioToolbox.framework */; }; + 4F27F5F76AA3F78C8CA27339 /* moc_introcode.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8B98A212C068D6CC7CE73CAA /* moc_introcode.cpp */; settings = {ATTRIBUTES = (); }; }; + 4FEA8F51B7BC7CAC71347A1A /* connectionbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 51355181C0E6689B0B764543 /* connectionbox.cpp */; settings = {ATTRIBUTES = (); }; }; + 5058CB9D7BFFCE9F404A3700 /* Qt5Network in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 6700DD555BF1C0FC338FB959 /* Qt5Network */; }; + 565F748438E6CE0148C54AFE /* moc_flatinput.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 1E5EEB5782B6357057356F9E /* moc_flatinput.cpp */; settings = {ATTRIBUTES = (); }; }; + 597623A24AE744145BE84968 /* qtmedia_audioengine in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = A490341D0650372A5757B367 /* qtmedia_audioengine */; }; + 59789101736112A570B8EFE6 /* qjp2 in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = F0681BC551FC8A2B132FC646 /* qjp2 */; }; + 5CE57D44510AB2A11886AB52 /* title.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 2BB2A1BB8DB0993F78F4E3C7 /* title.cpp */; settings = {ATTRIBUTES = (); }; }; + 5FC914F652D1B16FDA8F0634 /* moc_contactsbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 26083D8E535AFF927591E1A5 /* moc_contactsbox.cpp */; settings = {ATTRIBUTES = (); }; }; + 60CB4898955209B665E7B07D /* moc_twidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 55A654A2EE8554FF062742B8 /* moc_twidget.cpp */; settings = {ATTRIBUTES = (); }; }; + 668DDDA0C55405E7FCFD6CA5 /* CoreServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 9742F24EE18EA44D52824F1E /* CoreServices.framework */; }; + 68FFEB7CA30BF0149161B809 /* window.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = CA56ACFB53D87637192CC9B2 /* window.cpp */; settings = {ATTRIBUTES = (); }; }; + 6A8BC88AB464B92706EFE6FF /* moc_countryinput.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 9D9F4744B2F9FF22569D4535 /* moc_countryinput.cpp */; settings = {ATTRIBUTES = (); }; }; + 6C79FBC5CFA36AC3EA6ABBD4 /* moc_dropdown.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = AC9B5F6FB4B984C8D76F7AE2 /* moc_dropdown.cpp */; settings = {ATTRIBUTES = (); }; }; + 6E4DB0CBEF415196AFD4149F /* fileuploader.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 9B36BB8C5B8CA7B07F3F35F0 /* fileuploader.cpp */; settings = {ATTRIBUTES = (); }; }; + 6EF5A4ECC0EF19EA016EBA3E /* dropdown.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 710C982FC773400941B3AFBC /* dropdown.cpp */; settings = {ATTRIBUTES = (); }; }; + 700925F3B2C6163D38140CEA /* history.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 26B83A58EE268598E703875D /* history.cpp */; settings = {ATTRIBUTES = (); }; }; + 7062978F12EEA525893A5E6F /* moc_aboutbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 9A69B711DE4B9C89BA803750 /* moc_aboutbox.cpp */; settings = {ATTRIBUTES = (); }; }; + 7422A321DF80CF9FAC7CB51B /* newgroupbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 5FCB7CBBAF4AE338D4B05C76 /* newgroupbox.cpp */; settings = {ATTRIBUTES = (); }; }; + 74343521EECC740F777DAFE6 /* pspecific_mac.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = F4EECA1187A744AEF5165243 /* pspecific_mac.cpp */; settings = {ATTRIBUTES = (); }; }; + 77B998AC22A13EF3DDEE07AC /* photocropbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = E908A6C86F93FA27DF70866C /* photocropbox.cpp */; settings = {ATTRIBUTES = (); }; }; + 77DA1217B595B799FB72CDDA /* flatinput.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 9AB1479D7D63386FD2046620 /* flatinput.cpp */; settings = {ATTRIBUTES = (); }; }; + 7BEFA1D273AD62772AA33D73 /* app.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 06E379415713F34B83F99C35 /* app.cpp */; settings = {ATTRIBUTES = (); }; }; + 7C2B2DEE467A4C4679F1C3C9 /* filedialog.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = DE4C0E3685DDAE58F9397B13 /* filedialog.cpp */; settings = {ATTRIBUTES = (); }; }; + 7CA5405B8503BFFC60932D2B /* qicns in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 31120EDB269DFF13E1D49847 /* qicns */; }; + 7F76437B577F737145996DC3 /* qtga in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DCEFD9167C239650120B0145 /* qtga */; }; + 822C2860FBFAF3EAE42C5A3F /* moc_fileuploader.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 3D54A9F3266BB8739520E3FB /* moc_fileuploader.cpp */; settings = {ATTRIBUTES = (); }; }; + 830CB6F547B8C80A569A0271 /* addparticipantbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 40E88FBA282991C8CBDFE94D /* addparticipantbox.cpp */; settings = {ATTRIBUTES = (); }; }; + 832C50BFD7D09AF042A51D4F /* flatbutton.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = F1A04BDB750C2AE652797B04 /* flatbutton.cpp */; settings = {ATTRIBUTES = (); }; }; + 8771A8C96E9C391044035D99 /* OpenGL.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D4B32C2222F82AC56BADEB21 /* OpenGL.framework */; }; + 878DCAF0C5B0DB2EB4EDFD3D /* supporttl.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 0B2F770F53FBB0DBF738D89B /* supporttl.cpp */; settings = {ATTRIBUTES = (); }; }; + 8883FF366F2623E89D90A9E6 /* qgenericbearer in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 9A55B8F7C143D66AD9EAE304 /* qgenericbearer */; }; + 89ADB41E48A3B5E24ABB626C /* profilewidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = CF32DF59C7823E4F3397EF3C /* profilewidget.cpp */; settings = {ATTRIBUTES = (); }; }; + 8B22E794EFF0EAFF964A3043 /* introsteps.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = C34459FA465B57DF4DB80D12 /* introsteps.cpp */; settings = {ATTRIBUTES = (); }; }; + 8B71D1C7BB9DCEE6511219C2 /* moc_flatlabel.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 2181F5E34DE0A4B2F811E2E2 /* moc_flatlabel.cpp */; settings = {ATTRIBUTES = (); }; }; + 8C4BA0DB55E2C40DE5F5E990 /* moc_pspecific_mac.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 74772222DA764BE4623EAC5D /* moc_pspecific_mac.cpp */; settings = {ATTRIBUTES = (); }; }; + 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 */; }; + 8E26A0653012B8E8C3E865EC /* application.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = C20F9DD8C7B031B8E20D5653 /* application.cpp */; settings = {ATTRIBUTES = (); }; }; + 8F65F0D95B1F0CEB859F2FB3 /* boxshadow.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 08A7682548FB7E671FF03822 /* boxshadow.cpp */; settings = {ATTRIBUTES = (); }; }; + 8F6F5D7F82036331E8C6DAE6 /* moc_mtpConnection.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = B714EA71A09A832FAA846A0A /* moc_mtpConnection.cpp */; settings = {ATTRIBUTES = (); }; }; + 90085DF442550A0845D5AF37 /* style_core.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 420A06A32B66D250142B4B6D /* style_core.cpp */; settings = {ATTRIBUTES = (); }; }; + 9357E7B12AD6D88B157ACA05 /* introcode.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = A0090709DE1B155085362C36 /* introcode.cpp */; settings = {ATTRIBUTES = (); }; }; + 9809A3AF1946D51ACB41D716 /* moc_photocropbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = AF61D864B8C444ADD4E1B391 /* moc_photocropbox.cpp */; settings = {ATTRIBUTES = (); }; }; + 98E4F55DB5D8E64AB9F08C83 /* moc_localimageloader.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 1D7899ACAA9F973CADFA34C1 /* moc_localimageloader.cpp */; settings = {ATTRIBUTES = (); }; }; + 99F0A9B2AFE5ABDCBFC04510 /* mtpRPC.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 89F92B278CA31C393E245056 /* mtpRPC.cpp */; settings = {ATTRIBUTES = (); }; }; + 9A0D5DDC7816FC2538EB6A96 /* moc_window.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 6B46A0EE3C3B9D3B5A24946E /* moc_window.cpp */; settings = {ATTRIBUTES = (); }; }; + 9A523F51135FD4E2464673A6 /* moc_mtpSession.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 63AF8520023B4EA40306CB03 /* moc_mtpSession.cpp */; settings = {ATTRIBUTES = (); }; }; + 9B6E32D1B74A14273D68E439 /* Qt5MultimediaWidgets in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 833B45FEF5DC4AD0E8ADA64A /* Qt5MultimediaWidgets */; }; + 9D294F23E02CFDF22C288382 /* moc_emojibox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 0C0DC15EB416789673526AA5 /* moc_emojibox.cpp */; settings = {ATTRIBUTES = (); }; }; + 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 04391BE7A8B9D811E255100A /* Qt5Gui */; }; + A0A6B97F7DBEC81004EC9461 /* confirmbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 6610564B876E47D289A596DB /* confirmbox.cpp */; settings = {ATTRIBUTES = (); }; }; + A24E4B5B683764E07683ECEC /* moc_mainwidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 3A220FD1AE5AD9FE3DC073A4 /* moc_mainwidget.cpp */; settings = {ATTRIBUTES = (); }; }; + A297B1E3CE33CC501DFEDB6E /* mtpSession.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 0FBED3C6654EA3753EB39831 /* mtpSession.cpp */; settings = {ATTRIBUTES = (); }; }; + A3F8F2284013928A02AE5C38 /* qwbmp in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8CF51323544B886B8F4A2232 /* qwbmp */; }; + A469EC9C4C367E0B773A9BB7 /* moc_settingswidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 93AFE74928551FC3D7E8390B /* moc_settingswidget.cpp */; settings = {ATTRIBUTES = (); }; }; + A9563D9C9FD0D76FAAF1CA96 /* qdds in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D3D1BE0BEA3AEE0551AD39AC /* qdds */; }; + AC6C131416AEC557C854BA70 /* moc_photosendbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 9E0704DE8650D7952DC6B7AE /* moc_photosendbox.cpp */; settings = {ATTRIBUTES = (); }; }; + ADE99904299B99EB6135E8D9 /* scrollarea.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 6E1859D714E4471E053D90C9 /* scrollarea.cpp */; settings = {ATTRIBUTES = (); }; }; + AE148AA3BCDD25B1BBA4E6CA /* moc_addparticipantbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8C7AEF8DED4F7B6E6F89F330 /* moc_addparticipantbox.cpp */; settings = {ATTRIBUTES = (); }; }; + B0B88EFE444C0DE673389418 /* moc_flatbutton.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = C9FFCCE4FCB845744636795F /* moc_flatbutton.cpp */; settings = {ATTRIBUTES = (); }; }; + B2F5B08BFFBBE7E37D3863BB /* moc_button.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 46292F489228B60010794CE4 /* moc_button.cpp */; settings = {ATTRIBUTES = (); }; }; + B3C3392253201C328D9C6736 /* qtaudio_coreaudio in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 3BBB805F6180E363BF89151A /* qtaudio_coreaudio */; }; + B3CD52E504409DC1B560024F /* countrycodeinput.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 751C8D0E0BE6D16937B77A2C /* countrycodeinput.cpp */; settings = {ATTRIBUTES = (); }; }; + B460F624007324313696BE86 /* QuartzCore.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 7EC00404ACD5AB0E97726B0E /* QuartzCore.framework */; }; + B58956C9C026BD3A7FD9ECDF /* libexif.a in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 4AF15B5A0A43EB62D6DAF211 /* libexif.a */; }; + B6346B66B0A2228A91D8A5D9 /* mtpDC.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 315C7FACB4A9E18AA95486CA /* mtpDC.cpp */; settings = {ATTRIBUTES = (); }; }; + B6F50D5FBFAEB16DD0E5B1C3 /* moc_countrycodeinput.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = A1F48DF3E5D0D7C741C1EAC4 /* moc_countrycodeinput.cpp */; settings = {ATTRIBUTES = (); }; }; + B780F9E21269259B90A1F32A /* moc_mtpDC.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 2C540BAEABD7F9B5FA11008E /* moc_mtpDC.cpp */; settings = {ATTRIBUTES = (); }; }; + B78304F135DEF1F7A68393A6 /* CoreMedia.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 547CCADBD1CC5050167EF948 /* CoreMedia.framework */; }; + B8CA3E1E11A7E0E7DF9E1CDE /* mtpFileLoader.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 01D6341DC31FE5997F7BB159 /* mtpFileLoader.cpp */; settings = {ATTRIBUTES = (); }; }; + B8DA82DA1B195A933A0805E7 /* sysbuttons.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 6B90F69947805586A6FAE80E /* sysbuttons.cpp */; settings = {ATTRIBUTES = (); }; }; + B91D13BCC3963CB9C12D24A4 /* flatcheckbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = AF4585F593B1C9D0D4FD061C /* flatcheckbox.cpp */; settings = {ATTRIBUTES = (); }; }; + B99CCE43EEFCD3E18F6D16D1 /* settingswidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8CCCACE96535180FEB557712 /* settingswidget.cpp */; settings = {ATTRIBUTES = (); }; }; + B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 5A80A1907B6CFFB524C1E57D /* Qt5Core */; }; + BA41D511A9BBCA09365DF88C /* downloadpathbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8DF456E9A416E4C3C2D6946C /* downloadpathbox.cpp */; settings = {ATTRIBUTES = (); }; }; + BE6AB9DF1C4880624131C669 /* Qt5Widgets in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */; }; + C03447C9A7D9FF73463B8BB5 /* countryinput.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 3E329D4547CC23585307FA32 /* countryinput.cpp */; settings = {ATTRIBUTES = (); }; }; + C06DDE378A7AC1FA9E6FF69A /* qtiff in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = F2453BA07315EB9F34F1CD57 /* qtiff */; }; + C0D2E925FB8B08D9AA280753 /* Qt5Multimedia in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 112159B026FDEF9CD4E24175 /* Qt5Multimedia */; }; + C14E6C902F6435B3149ECD64 /* moc_profilewidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 48003469151B9DDE82E851FB /* moc_profilewidget.cpp */; settings = {ATTRIBUTES = (); }; }; + C1F9D5CA8AF3AD8EBC9D7310 /* moc_application.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = E181C525E21A16F2D4396CA7 /* moc_application.cpp */; settings = {ATTRIBUTES = (); }; }; + C329997D36D34D568CE16C9A /* moc_animation.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = A1479F94376F9732B57C69DB /* moc_animation.cpp */; settings = {ATTRIBUTES = (); }; }; + C9CC5CE020283D113D81179C /* Qt5OpenGL in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AA5379CB06E908AC80BE7B82 /* Qt5OpenGL */; }; + CCA737EE379CDB10CC9A0F23 /* AVFoundation.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 21F907AB8D19BD779147A085 /* AVFoundation.framework */; }; + CDB0266A8B7CB20A95266BCD /* emoji_config.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = B3062303CE8F4EB9325CB3DC /* emoji_config.cpp */; settings = {ATTRIBUTES = (); }; }; + D0EECF370C58DDCACBC71BAD /* CoreWLAN.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = F26998DF735BCE5F975508ED /* CoreWLAN.framework */; }; + D1FA8AF31837B51C762A9D4D /* qcocoa in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D53D8E6A188E05078A114294 /* qcocoa */; }; + D1FC601FC2F9F3E33F3A14E9 /* animation.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = D3FE9C29B6A61D7C3C4B731B /* animation.cpp */; settings = {ATTRIBUTES = (); }; }; + D22929A2B8C5281567FCACDC /* Qt5PlatformSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */; }; + D3D955F61644264D27FC2796 /* qtaccessiblewidgets in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = A7782E2B07CB2D1D14F431B0 /* qtaccessiblewidgets */; }; + D4639595C3BCF2A39D88DF6E /* SystemConfiguration.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = FF5BDAB0076F3391B219EA52 /* SystemConfiguration.framework */; }; + D67628B07A49239E73C2150B /* telegram_plugin_import.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = FB0DCE17FF02138B3C1B1219 /* telegram_plugin_import.cpp */; settings = {ATTRIBUTES = (); }; }; + D6874C00733283846ACA9AB2 /* moc_confirmbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = CE7FFE194127BD789A2C877A /* moc_confirmbox.cpp */; settings = {ATTRIBUTES = (); }; }; + D7EF8F129FCCE9AB3F3F081F /* button.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 4D55B83DFDFE3D492CDBD27A /* button.cpp */; settings = {ATTRIBUTES = (); }; }; + D846C6F212B438DC2FD5FF71 /* moc_dialogswidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 3B3ED09AB00290D78CF1181B /* moc_dialogswidget.cpp */; settings = {ATTRIBUTES = (); }; }; + D87463318C8E5211C8C8670A /* stdafx.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 5A5431331A13AA7B07414240 /* stdafx.cpp */; settings = {ATTRIBUTES = (); }; }; + DAD6F5593C3427F014531342 /* AudioUnit.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 186D09F4CB713AD4B8BDD260 /* AudioUnit.framework */; }; + DC52E36A03D974A1A0C9AA2A /* qqt7engine in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 1C21DCD421D7B7E0462F1121 /* qqt7engine */; }; + DE6A34CA3A5561888FA01AF1 /* flatlabel.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 763ED3C6815ED6C89E352652 /* flatlabel.cpp */; settings = {ATTRIBUTES = (); }; }; + DF259E9677CC63AF8754032B /* mtpConnection.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = B8D9AFA42E8633154A9817A2 /* mtpConnection.cpp */; settings = {ATTRIBUTES = (); }; }; + DF36EA42D67ED39E58CB7DF9 /* settings.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 8A28F7789408AA839F48A5F2 /* settings.cpp */; settings = {ATTRIBUTES = (); }; }; + E3194392BD6D0726F75FA72E /* mainwidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 047DAFB0A7DE92C63033A43C /* mainwidget.cpp */; settings = {ATTRIBUTES = (); }; }; + E3D7A5CA24541D5DB69D6606 /* images.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 6A510365F9F6367ECB0DB065 /* images.cpp */; settings = {ATTRIBUTES = (); }; }; + E45E51A644D5FC9F942ECE55 /* AGL.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */; }; + E8B28580819B882A5964561A /* moc_addcontactbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 81780025807318AEA3B8A6FF /* moc_addcontactbox.cpp */; settings = {ATTRIBUTES = (); }; }; + E8D95529CED88F18818C9A8B /* intro.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 0771C4C94B623FC34BF62983 /* intro.cpp */; settings = {ATTRIBUTES = (); }; }; + E97B3CFAB59B49BACFFC5F7C /* moc_title.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 1080B6D395843B8F76A2E45E /* moc_title.cpp */; settings = {ATTRIBUTES = (); }; }; + E9F1CE7F9B18C7C85A50E62D /* style_auto.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 99B8D38F7F5858601230911E /* style_auto.cpp */; settings = {ATTRIBUTES = (); }; }; + EBA5E17368D2BBC6014E92B9 /* qcorewlanbearer in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = EE03BC5CA4628A6D6BEB0122 /* qcorewlanbearer */; }; + EBE29731916DB43BF49FE7A4 /* aboutbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = C194EDD00F76216057D48A5C /* aboutbox.cpp */; settings = {ATTRIBUTES = (); }; }; + ED2557A57C6782721DC494AF /* moc_connectionbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = FEC58F9D8A0963E5A9D4BE6F /* moc_connectionbox.cpp */; settings = {ATTRIBUTES = (); }; }; + EDFF7E777D3A3730A9BB3FC2 /* QTKit.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 2AC1C71FA3CD6FD909ED0276 /* QTKit.framework */; }; + EEBE9C2FA7C9F066508EF99B /* qavfmediaplayer in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = EDD43CF4FA85D97A1140E973 /* qavfmediaplayer */; }; + F26454630C80841CBDCFE1CA /* Foundation.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = FCC237CA5AD60B9BA4447615 /* Foundation.framework */; }; + F278C423357CA99797EA30AB /* photosendbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = D1C9C77F1318F5A55C9BF289 /* photosendbox.cpp */; settings = {ATTRIBUTES = (); }; }; + F2A75ACAC9DF6A3F4E5711E7 /* AppKit.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 723F90793B2C195E2CCB2233 /* AppKit.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 */; }; + F91C59BECCE70070B06E8385 /* lang.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 4B6C62A2448B708B3FF40411 /* lang.cpp */; settings = {ATTRIBUTES = (); }; }; + FA603B17F803E8D6B55C2F2B /* pspecific_mac_p.mm in Compile Sources */ = {isa = PBXBuildFile; fileRef = 73737DC91E390C4AB18FB595 /* pspecific_mac_p.mm */; settings = {ATTRIBUTES = (); }; }; + FBD56E2AC34F76BFFDB68619 /* qmng in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 83D37373949868693FB7816D /* qmng */; }; + FCC949FEA178F9F5D7478027 /* moc_flattextarea.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = D12A6BD8EE80B8B308E481AD /* moc_flattextarea.cpp */; settings = {ATTRIBUTES = (); }; }; + FCE6518C548DF7BC82228A4A /* twidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = BB1602EA641643DE565005B1 /* twidget.cpp */; settings = {ATTRIBUTES = (); }; }; + FD2FE0C564A7389A2E609EC7 /* moc_sysbuttons.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = B88236FC554B694F618D848C /* moc_sysbuttons.cpp */; settings = {ATTRIBUTES = (); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 07C3AF22194335970016CFF1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6DB9C3763D02B1415CD9D565 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 07AA07135D01069052F55A12; + remoteInfo = "Qt Preprocess"; + }; + 07C3AF41194CCC510016CFF1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6DB9C3763D02B1415CD9D565 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 07C3AF39194CCC310016CFF1; + remoteInfo = "Meta Compile"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 01D6341DC31FE5997F7BB159 /* mtpFileLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpFileLoader.cpp; path = SourceFiles/mtproto/mtpFileLoader.cpp; sourceTree = ""; }; + 032C1BF3E727B450A4851D48 /* emojibox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = emojibox.h; path = SourceFiles/boxes/emojibox.h; sourceTree = ""; }; + 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.3.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 047DAFB0A7DE92C63033A43C /* mainwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mainwidget.cpp; path = SourceFiles/mainwidget.cpp; sourceTree = ""; }; + 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 = ""; }; + 06E379415713F34B83F99C35 /* app.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = app.cpp; path = SourceFiles/app.cpp; sourceTree = ""; }; + 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 = ""; }; + 0771C4C94B623FC34BF62983 /* intro.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = intro.cpp; path = SourceFiles/intro/intro.cpp; sourceTree = ""; }; + 07C3AF24194335ED0016CFF1 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Telegram/Images.xcassets; sourceTree = SOURCE_ROOT; }; + 07C3AF27194336B90016CFF1 /* pspecific_mac_p.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pspecific_mac_p.h; path = SourceFiles/pspecific_mac_p.h; sourceTree = SOURCE_ROOT; }; + 07C3AF2819433ABF0016CFF1 /* lang.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = lang.txt; path = Resources/lang.txt; sourceTree = SOURCE_ROOT; }; + 07C3AF2919433ABF0016CFF1 /* style_classes.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = style_classes.txt; path = Resources/style_classes.txt; sourceTree = SOURCE_ROOT; }; + 07C3AF2A19433ABF0016CFF1 /* style.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = style.txt; path = Resources/style.txt; sourceTree = SOURCE_ROOT; }; + 08A7682548FB7E671FF03822 /* boxshadow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = boxshadow.cpp; path = SourceFiles/gui/boxshadow.cpp; sourceTree = ""; }; + 098EA7CE256AAFAE4A17EB77 /* introcode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introcode.h; path = SourceFiles/intro/introcode.h; sourceTree = ""; }; + 09FD01F2BD652EB838A296D8 /* application.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = application.h; path = SourceFiles/application.h; sourceTree = ""; }; + 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 = ""; }; + 0B2F770F53FBB0DBF738D89B /* supporttl.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = supporttl.cpp; path = SourceFiles/supporttl.cpp; sourceTree = ""; }; + 0BDE09020E45EFA57DCB2E25 /* photosendbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = photosendbox.h; path = SourceFiles/boxes/photosendbox.h; sourceTree = ""; }; + 0C0DC15EB416789673526AA5 /* moc_emojibox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_emojibox.cpp; path = GeneratedFiles/Debug/moc_emojibox.cpp; sourceTree = ""; }; + 0CAA815FFFEDCD84808E11F5 /* logs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = logs.h; path = SourceFiles/logs.h; sourceTree = ""; }; + 0ECF1EB9BF3786A16731F685 /* emojibox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = emojibox.cpp; path = SourceFiles/boxes/emojibox.cpp; sourceTree = ""; }; + 0F8FFD87AEBAC448568570DC /* images.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = images.h; path = SourceFiles/gui/images.h; sourceTree = ""; }; + 0FBED3C6654EA3753EB39831 /* mtpSession.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpSession.cpp; path = SourceFiles/mtproto/mtpSession.cpp; sourceTree = ""; }; + 0FC38EE7F29EF895925A2C49 /* style_core.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style_core.h; path = SourceFiles/gui/style_core.h; sourceTree = ""; }; + 1080B6D395843B8F76A2E45E /* moc_title.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_title.cpp; path = GeneratedFiles/Debug/moc_title.cpp; sourceTree = ""; }; + 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 = ""; }; + 112159B026FDEF9CD4E24175 /* Qt5Multimedia */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Multimedia; path = "/usr/local/Qt-5.3.0/lib/libQt5Multimedia$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 120EBCD9A37DB9A36BFE58C0 /* contactsbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = contactsbox.h; path = SourceFiles/boxes/contactsbox.h; sourceTree = ""; }; + 1292B92B4848460640F6A391 /* telegram.qrc */ = {isa = PBXFileReference; lastKnownFileType = text; name = telegram.qrc; path = SourceFiles/telegram.qrc; sourceTree = ""; }; + 135FD3715BFDC50AD7B00E04 /* text.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = text.cpp; path = SourceFiles/gui/text.cpp; sourceTree = ""; }; + 143405635D04698F421A12EA /* aboutbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = aboutbox.h; path = SourceFiles/boxes/aboutbox.h; sourceTree = ""; }; + 14437BFDCD58FF1742EF1B35 /* photocropbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = photocropbox.h; path = SourceFiles/boxes/photocropbox.h; sourceTree = ""; }; + 152B8D1BCECEB7B0C77E073C /* intro.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = intro.h; path = SourceFiles/intro/intro.h; sourceTree = ""; }; + 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 = ""; }; + 186D09F4CB713AD4B8BDD260 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = ""; }; + 19618554524B8D928F13940D /* emoji_config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = emoji_config.h; path = SourceFiles/gui/emoji_config.h; sourceTree = ""; }; + 1A4C47331E186344291B8178 /* dropdown.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dropdown.h; path = SourceFiles/dropdown.h; sourceTree = ""; }; + 1B4A65B84270FF2FED008EB6 /* moc_introphone.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_introphone.cpp; path = GeneratedFiles/Debug/moc_introphone.cpp; sourceTree = ""; }; + 1C21DCD421D7B7E0462F1121 /* qqt7engine */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qqt7engine; path = "/usr/local/Qt-5.3.0/plugins/mediaservice/libqqt7engine$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 1D7899ACAA9F973CADFA34C1 /* moc_localimageloader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_localimageloader.cpp; path = GeneratedFiles/Debug/moc_localimageloader.cpp; sourceTree = ""; }; + 1DC02F674A7192FF8BE391A7 /* types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = types.h; path = SourceFiles/types.h; sourceTree = ""; }; + 1DEFC0760BB9340529F582F7 /* confirmbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = confirmbox.h; path = SourceFiles/boxes/confirmbox.h; sourceTree = ""; }; + 1E5EEB5782B6357057356F9E /* moc_flatinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flatinput.cpp; path = GeneratedFiles/Debug/moc_flatinput.cpp; sourceTree = ""; }; + 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 = ""; }; + 1FE45A67215BEA2434F588E8 /* moc_layerwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_layerwidget.cpp; path = GeneratedFiles/Debug/moc_layerwidget.cpp; sourceTree = ""; }; + 205259EEEE2BADA5E64741E3 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = /System/Library/Frameworks/Security.framework; sourceTree = ""; }; + 206B4F5CBD5354BCE19FF32F /* countries.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = countries.h; path = SourceFiles/countries.h; sourceTree = ""; }; + 2181F5E34DE0A4B2F811E2E2 /* moc_flatlabel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flatlabel.cpp; path = GeneratedFiles/Debug/moc_flatlabel.cpp; sourceTree = ""; }; + 21F907AB8D19BD779147A085 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = /System/Library/Frameworks/AVFoundation.framework; sourceTree = ""; }; + 220B97F8F62C720E6059A64B /* profilewidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = profilewidget.h; path = SourceFiles/profilewidget.h; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 245F3B3B43CC450EBA6650B5 /* addparticipantbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = addparticipantbox.h; path = SourceFiles/boxes/addparticipantbox.h; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 24F7D3E789E91B10E422C116 /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = config.h; path = SourceFiles/config.h; sourceTree = ""; }; + 25CA12A22B83B0B038C5B5DE /* langloaderplain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = langloaderplain.h; path = SourceFiles/langloaderplain.h; sourceTree = ""; }; + 26083D8E535AFF927591E1A5 /* moc_contactsbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_contactsbox.cpp; path = GeneratedFiles/Debug/moc_contactsbox.cpp; sourceTree = ""; }; + 26B83A58EE268598E703875D /* history.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = history.cpp; path = SourceFiles/history.cpp; sourceTree = ""; }; + 27E7471A4EC90E84353AA16F /* mtpCoreTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpCoreTypes.h; path = SourceFiles/mtproto/mtpCoreTypes.h; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 2AC1C71FA3CD6FD909ED0276 /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = ""; }; + 2BB2A1BB8DB0993F78F4E3C7 /* title.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = title.cpp; path = SourceFiles/title.cpp; sourceTree = ""; }; + 2C540BAEABD7F9B5FA11008E /* moc_mtpDC.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpDC.cpp; path = GeneratedFiles/Debug/moc_mtpDC.cpp; sourceTree = ""; }; + 2C99425D7670941EAF07B453 /* moc_historywidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_historywidget.cpp; path = GeneratedFiles/Debug/moc_historywidget.cpp; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 2EA58EF6CDF368B0132BAEB9 /* settings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = settings.h; path = SourceFiles/settings.h; sourceTree = ""; }; + 301BB513F2F5D447B3BF22DF /* window.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = window.h; path = SourceFiles/window.h; sourceTree = ""; }; + 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 = ""; }; + 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 315C7FACB4A9E18AA95486CA /* mtpDC.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpDC.cpp; path = SourceFiles/mtproto/mtpDC.cpp; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 34E1DF19219C52D7DB20224A /* flatlabel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatlabel.h; path = SourceFiles/gui/flatlabel.h; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 36BDA5D01BED543A92886669 /* Telegram.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = Telegram.pro; sourceTree = ""; }; + 36F718DC72345A84987DB0F6 /* flatbutton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatbutton.h; path = SourceFiles/gui/flatbutton.h; sourceTree = ""; }; + 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 = ""; }; + 39C1ADF085370E033CB7E7E1 /* style_classes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style_classes.h; path = GeneratedFiles/style_classes.h; sourceTree = ""; }; + 3A220FD1AE5AD9FE3DC073A4 /* moc_mainwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mainwidget.cpp; path = GeneratedFiles/Debug/moc_mainwidget.cpp; sourceTree = ""; }; + 3B3ED09AB00290D78CF1181B /* moc_dialogswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_dialogswidget.cpp; path = GeneratedFiles/Debug/moc_dialogswidget.cpp; sourceTree = ""; }; + 3BBB805F6180E363BF89151A /* qtaudio_coreaudio */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtaudio_coreaudio; path = "/usr/local/Qt-5.3.0/plugins/audio/libqtaudio_coreaudio$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 3BE70E2A82DC2BF402165ED5 /* sysbuttons.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sysbuttons.h; path = SourceFiles/sysbuttons.h; sourceTree = ""; }; + 3C44131FDCFEF4396B9EA2BA /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; + 3D54A9F3266BB8739520E3FB /* moc_fileuploader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_fileuploader.cpp; path = GeneratedFiles/Debug/moc_fileuploader.cpp; sourceTree = ""; }; + 3E329D4547CC23585307FA32 /* countryinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = countryinput.cpp; path = SourceFiles/gui/countryinput.cpp; sourceTree = ""; }; + 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 = ""; }; + 40E88FBA282991C8CBDFE94D /* addparticipantbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = addparticipantbox.cpp; path = SourceFiles/boxes/addparticipantbox.cpp; sourceTree = ""; }; + 420A06A32B66D250142B4B6D /* style_core.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = style_core.cpp; path = SourceFiles/gui/style_core.cpp; sourceTree = ""; }; + 42FA90460B1A91C414157EAC /* supporttl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = supporttl.h; path = SourceFiles/supporttl.h; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 4604687EBA85611C9E8A9CDF /* button.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = button.h; path = SourceFiles/gui/button.h; sourceTree = ""; }; + 46292F489228B60010794CE4 /* moc_button.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_button.cpp; path = GeneratedFiles/Debug/moc_button.cpp; sourceTree = ""; }; + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.3.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 48003469151B9DDE82E851FB /* moc_profilewidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_profilewidget.cpp; path = GeneratedFiles/Debug/moc_profilewidget.cpp; sourceTree = ""; }; + 4AF15B5A0A43EB62D6DAF211 /* libexif.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libexif.a; path = "../../Libraries/libexif-0.6.20/libexif/.libs/libexif.a"; sourceTree = ""; }; + 4B6C62A2448B708B3FF40411 /* lang.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = lang.cpp; path = GeneratedFiles/lang.cpp; sourceTree = ""; }; + 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 = ""; }; + 4D1099F2D3696E8A0E17D37D /* mtpSession.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpSession.h; path = SourceFiles/mtproto/mtpSession.h; sourceTree = ""; }; + 4D504A849F15EB58E53A4E5F /* title.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = title.h; path = SourceFiles/title.h; sourceTree = ""; }; + 4D55B83DFDFE3D492CDBD27A /* button.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = button.cpp; path = SourceFiles/gui/button.cpp; sourceTree = ""; }; + 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; + 4E4D06EC4D2C82C7D6E079A2 /* flatinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatinput.h; path = SourceFiles/gui/flatinput.h; sourceTree = ""; }; + 4EC011DBE92DD1FD208D94D2 /* qtmultimedia_m3u */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtmultimedia_m3u; path = "/usr/local/Qt-5.3.0/plugins/playlistformats/libqtmultimedia_m3u$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + 5059175BDCEC77B7246DE1B9 /* flatcheckbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatcheckbox.h; path = SourceFiles/gui/flatcheckbox.h; sourceTree = ""; }; + 507CCEEC4CBA3E3BD6EEDED1 /* twidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = twidget.h; path = SourceFiles/gui/twidget.h; sourceTree = ""; }; + 51355181C0E6689B0B764543 /* connectionbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = connectionbox.cpp; path = SourceFiles/boxes/connectionbox.cpp; sourceTree = ""; }; + 5271C394C1E7646D117CE67E /* main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = SourceFiles/main.cpp; sourceTree = ""; }; + 547CCADBD1CC5050167EF948 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = /System/Library/Frameworks/CoreMedia.framework; sourceTree = ""; }; + 5591A965D1DC024FBDB40151 /* moc_mtpFileLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpFileLoader.cpp; path = GeneratedFiles/Debug/moc_mtpFileLoader.cpp; sourceTree = ""; }; + 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 = ""; }; + 55A654A2EE8554FF062742B8 /* moc_twidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_twidget.cpp; path = GeneratedFiles/Debug/moc_twidget.cpp; sourceTree = ""; }; + 55B4A93DD455EED91C899A8E /* dialogswidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dialogswidget.h; path = SourceFiles/dialogswidget.h; sourceTree = ""; }; + 58A7114F60E7D09E73283983 /* moc_introsignup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_introsignup.cpp; path = GeneratedFiles/Debug/moc_introsignup.cpp; sourceTree = ""; }; + 58E05D0B8B104D83F43F9859 /* moc_flatcheckbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flatcheckbox.cpp; path = GeneratedFiles/Debug/moc_flatcheckbox.cpp; sourceTree = ""; }; + 59E514973BA9BF6599252DDC /* flattextarea.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flattextarea.h; path = SourceFiles/gui/flattextarea.h; sourceTree = ""; }; + 5A5431331A13AA7B07414240 /* stdafx.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = stdafx.cpp; path = SourceFiles/stdafx.cpp; sourceTree = ""; }; + 5A7F88F9C7F08D3DDE6EEF6B /* localimageloader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = localimageloader.cpp; path = SourceFiles/localimageloader.cpp; sourceTree = ""; }; + 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.3.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5A9B4C6C59856143F3D0DE53 /* layerwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = layerwidget.cpp; path = SourceFiles/layerwidget.cpp; sourceTree = ""; }; + 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 = ""; }; + 5C7FD422BBEDA858D7237AE9 /* flattextarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flattextarea.cpp; path = SourceFiles/gui/flattextarea.cpp; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 5FCB7CBBAF4AE338D4B05C76 /* newgroupbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = newgroupbox.cpp; path = SourceFiles/boxes/newgroupbox.cpp; sourceTree = ""; }; + 6011DDB120E1B2D4803E129A /* stdafx.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = stdafx.h; path = SourceFiles/stdafx.h; sourceTree = ""; }; + 60C0061633AC4244EA634B2A /* countrycodeinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = countrycodeinput.h; path = SourceFiles/gui/countrycodeinput.h; sourceTree = ""; }; + 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 = ""; }; + 61C679D8B4B332026BD34200 /* introphone.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introphone.cpp; path = SourceFiles/intro/introphone.cpp; sourceTree = ""; }; + 62807F13DBD204D0716143AD /* Telegram.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Telegram.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 63AF8520023B4EA40306CB03 /* moc_mtpSession.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpSession.cpp; path = GeneratedFiles/Debug/moc_mtpSession.cpp; sourceTree = ""; }; + 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 = ""; }; + 6532A0DC7EFE446967682E83 /* moc_downloadpathbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_downloadpathbox.cpp; path = GeneratedFiles/Debug/moc_downloadpathbox.cpp; sourceTree = ""; }; + 6610564B876E47D289A596DB /* confirmbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = confirmbox.cpp; path = SourceFiles/boxes/confirmbox.cpp; sourceTree = ""; }; + 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 = ""; }; + 6700DD555BF1C0FC338FB959 /* Qt5Network */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Network; path = "/usr/local/Qt-5.3.0/lib/libQt5Network$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 6868ADA9E9A9801B2BA92B97 /* countryinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = countryinput.h; path = SourceFiles/gui/countryinput.h; sourceTree = ""; }; + 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 = ""; }; + 69FE16874104731CE2A66E0D /* moc_newgroupbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_newgroupbox.cpp; path = GeneratedFiles/Debug/moc_newgroupbox.cpp; sourceTree = ""; }; + 6A510365F9F6367ECB0DB065 /* images.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = images.cpp; path = SourceFiles/gui/images.cpp; sourceTree = ""; }; + 6B46A0EE3C3B9D3B5A24946E /* moc_window.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_window.cpp; path = GeneratedFiles/Debug/moc_window.cpp; sourceTree = ""; }; + 6B90F69947805586A6FAE80E /* sysbuttons.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sysbuttons.cpp; path = SourceFiles/sysbuttons.cpp; sourceTree = ""; }; + 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 = ""; }; + 6C86B6E6AB1857B735B720D6 /* layerwidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = layerwidget.h; path = SourceFiles/layerwidget.h; sourceTree = ""; }; + 6D50D70712776D7ED3B00E5C /* mtp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtp.cpp; path = SourceFiles/mtproto/mtp.cpp; sourceTree = ""; }; + 6E1859D714E4471E053D90C9 /* scrollarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = scrollarea.cpp; path = SourceFiles/gui/scrollarea.cpp; sourceTree = ""; }; + 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 = ""; }; + 6E8FD0ED1B60D43929944CD2 /* text.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = text.h; path = SourceFiles/gui/text.h; sourceTree = ""; }; + 710C982FC773400941B3AFBC /* dropdown.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = dropdown.cpp; path = SourceFiles/dropdown.cpp; sourceTree = ""; }; + 723F90793B2C195E2CCB2233 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 73737DC91E390C4AB18FB595 /* pspecific_mac_p.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = pspecific_mac_p.mm; path = SourceFiles/pspecific_mac_p.mm; sourceTree = ""; }; + 74772222DA764BE4623EAC5D /* moc_pspecific_mac.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_pspecific_mac.cpp; path = GeneratedFiles/Debug/moc_pspecific_mac.cpp; sourceTree = ""; }; + 748F1BCCBEEB3675768960FB /* mtpAuthKey.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpAuthKey.h; path = SourceFiles/mtproto/mtpAuthKey.h; sourceTree = ""; }; + 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 = ""; }; + 751C8D0E0BE6D16937B77A2C /* countrycodeinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = countrycodeinput.cpp; path = SourceFiles/gui/countrycodeinput.cpp; sourceTree = ""; }; + 763ED3C6815ED6C89E352652 /* flatlabel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatlabel.cpp; path = SourceFiles/gui/flatlabel.cpp; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 7C8F9CA4FCE8AF8FCCCB961E /* phoneinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = phoneinput.cpp; path = SourceFiles/gui/phoneinput.cpp; sourceTree = ""; }; + 7CA6945B22800A0F30B75DA5 /* addcontactbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = addcontactbox.cpp; path = SourceFiles/boxes/addcontactbox.cpp; sourceTree = ""; }; + 7CDE9D7CB2C729BC3612372B /* addcontactbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = addcontactbox.h; path = SourceFiles/boxes/addcontactbox.h; sourceTree = ""; }; + 7D075A915E8739C1B6BC5F43 /* types.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = types.cpp; path = SourceFiles/types.cpp; sourceTree = ""; }; + 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 = ""; }; + 7DBFC0B5EAF874BA10E3D603 /* mtpScheme.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpScheme.h; path = SourceFiles/mtproto/mtpScheme.h; sourceTree = ""; }; + 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 = ""; }; + 7EC00404ACD5AB0E97726B0E /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = /System/Library/Frameworks/QuartzCore.framework; sourceTree = ""; }; + 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 = ""; }; + 81780025807318AEA3B8A6FF /* moc_addcontactbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_addcontactbox.cpp; path = GeneratedFiles/Debug/moc_addcontactbox.cpp; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 833B45FEF5DC4AD0E8ADA64A /* Qt5MultimediaWidgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5MultimediaWidgets; path = "/usr/local/Qt-5.3.0/lib/libQt5MultimediaWidgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 83728F60A64483E0AA933D76 /* pspecific.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pspecific.h; path = SourceFiles/pspecific.h; sourceTree = ""; }; + 83A36F229E897566E011B79E /* scrollarea.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = scrollarea.h; path = SourceFiles/gui/scrollarea.h; sourceTree = ""; }; + 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 85FABD67716E36CD8B3CA4FA /* animation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = animation.h; path = SourceFiles/gui/animation.h; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 8880067F9BFD46108777E134 /* mtp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtp.h; path = SourceFiles/mtproto/mtp.h; sourceTree = ""; }; + 8918F4B71ED5FC138AFD3F70 /* moc_scrollarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_scrollarea.cpp; path = GeneratedFiles/Debug/moc_scrollarea.cpp; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 89F92B278CA31C393E245056 /* mtpRPC.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpRPC.cpp; path = SourceFiles/mtproto/mtpRPC.cpp; sourceTree = ""; }; + 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 = ""; }; + 8A28F7789408AA839F48A5F2 /* settings.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = settings.cpp; path = SourceFiles/settings.cpp; sourceTree = ""; }; + 8A9D926C08392F7A9BC83B0C /* fileuploader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fileuploader.h; path = SourceFiles/fileuploader.h; sourceTree = ""; }; + 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 = ""; }; + 8B98A212C068D6CC7CE73CAA /* moc_introcode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_introcode.cpp; path = GeneratedFiles/Debug/moc_introcode.cpp; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 8C7AEF8DED4F7B6E6F89F330 /* moc_addparticipantbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_addparticipantbox.cpp; path = GeneratedFiles/Debug/moc_addparticipantbox.cpp; sourceTree = ""; }; + 8C800AAC9549E6E9E7046BED /* contactsbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = contactsbox.cpp; path = SourceFiles/boxes/contactsbox.cpp; sourceTree = ""; }; + 8CCCACE96535180FEB557712 /* settingswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = settingswidget.cpp; path = SourceFiles/settingswidget.cpp; sourceTree = ""; }; + 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; + 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 = ""; }; + 8DF456E9A416E4C3C2D6946C /* downloadpathbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = downloadpathbox.cpp; path = SourceFiles/boxes/downloadpathbox.cpp; sourceTree = ""; }; + 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 = ""; }; + 8EB83A4D34226609E79A613A /* connectionbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = connectionbox.h; path = SourceFiles/boxes/connectionbox.h; sourceTree = ""; }; + 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 924D4939FD169BB4B8AEB1C9 /* moc_mtp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtp.cpp; path = GeneratedFiles/Debug/moc_mtp.cpp; sourceTree = ""; }; + 93AFE74928551FC3D7E8390B /* moc_settingswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_settingswidget.cpp; path = GeneratedFiles/Debug/moc_settingswidget.cpp; sourceTree = ""; }; + 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 = ""; }; + 963123025C466CB8DD9CF4AF /* mtpConnection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpConnection.h; path = SourceFiles/mtproto/mtpConnection.h; sourceTree = ""; }; + 96ACDDE3DCB798B97F9EA2F4 /* mtpFileLoader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpFileLoader.h; path = SourceFiles/mtproto/mtpFileLoader.h; sourceTree = ""; }; + 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; + 974DB34EEB8F83B91614C0B0 /* logs.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = logs.cpp; path = SourceFiles/logs.cpp; sourceTree = ""; }; + 99B8D38F7F5858601230911E /* style_auto.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = style_auto.cpp; path = GeneratedFiles/style_auto.cpp; sourceTree = ""; }; + 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 = ""; }; + 9A55B8F7C143D66AD9EAE304 /* qgenericbearer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qgenericbearer; path = "/usr/local/Qt-5.3.0/plugins/bearer/libqgenericbearer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 9A69B711DE4B9C89BA803750 /* moc_aboutbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_aboutbox.cpp; path = GeneratedFiles/Debug/moc_aboutbox.cpp; sourceTree = ""; }; + 9AB1479D7D63386FD2046620 /* flatinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatinput.cpp; path = SourceFiles/gui/flatinput.cpp; sourceTree = ""; }; + 9B36BB8C5B8CA7B07F3F35F0 /* fileuploader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = fileuploader.cpp; path = SourceFiles/fileuploader.cpp; sourceTree = ""; }; + 9BD0BE66E93ACE27D00D6D75 /* filedialog.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = filedialog.h; path = SourceFiles/gui/filedialog.h; sourceTree = ""; }; + 9D9F4744B2F9FF22569D4535 /* moc_countryinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_countryinput.cpp; path = GeneratedFiles/Debug/moc_countryinput.cpp; sourceTree = ""; }; + 9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; + 9E0704DE8650D7952DC6B7AE /* moc_photosendbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_photosendbox.cpp; path = GeneratedFiles/Debug/moc_photosendbox.cpp; sourceTree = ""; }; + 9EFD7CB36012BFC00CC79434 /* style_auto.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style_auto.h; path = GeneratedFiles/style_auto.h; sourceTree = ""; }; + A0090709DE1B155085362C36 /* introcode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introcode.cpp; path = SourceFiles/intro/introcode.cpp; sourceTree = ""; }; + 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 = ""; }; + A1479F94376F9732B57C69DB /* moc_animation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_animation.cpp; path = GeneratedFiles/Debug/moc_animation.cpp; sourceTree = ""; }; + A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; + A1F48DF3E5D0D7C741C1EAC4 /* moc_countrycodeinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_countrycodeinput.cpp; path = GeneratedFiles/Debug/moc_countrycodeinput.cpp; sourceTree = ""; }; + A3622760CEC6D6827A25E710 /* mtpPublicRSA.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpPublicRSA.h; path = SourceFiles/mtproto/mtpPublicRSA.h; sourceTree = ""; }; + A37C7E516201B0264A4CDA38 /* moc_intro.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_intro.cpp; path = GeneratedFiles/Debug/moc_intro.cpp; sourceTree = ""; }; + A490341D0650372A5757B367 /* qtmedia_audioengine */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtmedia_audioengine; path = "/usr/local/Qt-5.3.0/plugins/mediaservice/libqtmedia_audioengine$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + A7782E2B07CB2D1D14F431B0 /* qtaccessiblewidgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtaccessiblewidgets; path = "/usr/local/Qt-5.3.0/plugins/accessible/libqtaccessiblewidgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + A83D2C19F756D3371E5999A8 /* historywidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = historywidget.cpp; path = SourceFiles/historywidget.cpp; sourceTree = ""; }; + 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 = ""; }; + A9FF4818C6775109B3DBFA18 /* introsignup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introsignup.cpp; path = SourceFiles/intro/introsignup.cpp; sourceTree = ""; }; + AA5379CB06E908AC80BE7B82 /* Qt5OpenGL */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5OpenGL; path = "/usr/local/Qt-5.3.0/lib/libQt5OpenGL$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = ""; }; + 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 = ""; }; + AC9B5F6FB4B984C8D76F7AE2 /* moc_dropdown.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_dropdown.cpp; path = GeneratedFiles/Debug/moc_dropdown.cpp; sourceTree = ""; }; + 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 = ""; }; + AD0C395D671BC024083A5FC7 /* localimageloader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = localimageloader.h; path = SourceFiles/localimageloader.h; sourceTree = ""; }; + AD90723EF02EAD016FD49CC9 /* introsteps.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introsteps.h; path = SourceFiles/intro/introsteps.h; sourceTree = ""; }; + ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + AF4585F593B1C9D0D4FD061C /* flatcheckbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatcheckbox.cpp; path = SourceFiles/gui/flatcheckbox.cpp; sourceTree = ""; }; + AF5776B0652744978B7DF6D3 /* langloaderplain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = langloaderplain.cpp; path = SourceFiles/langloaderplain.cpp; sourceTree = ""; }; + AF61D864B8C444ADD4E1B391 /* moc_photocropbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_photocropbox.cpp; path = GeneratedFiles/Debug/moc_photocropbox.cpp; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + B3062303CE8F4EB9325CB3DC /* emoji_config.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = emoji_config.cpp; path = SourceFiles/gui/emoji_config.cpp; sourceTree = ""; }; + 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 = ""; }; + B3D42654F18B1FE49512C404 /* mtpDC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpDC.h; path = SourceFiles/mtproto/mtpDC.h; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + B714EA71A09A832FAA846A0A /* moc_mtpConnection.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpConnection.cpp; path = GeneratedFiles/Debug/moc_mtpConnection.cpp; sourceTree = ""; }; + B8100EAB0521FC7A937D2E4F /* moc_phoneinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_phoneinput.cpp; path = GeneratedFiles/Debug/moc_phoneinput.cpp; sourceTree = ""; }; + 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 = ""; }; + B88236FC554B694F618D848C /* moc_sysbuttons.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_sysbuttons.cpp; path = GeneratedFiles/Debug/moc_sysbuttons.cpp; sourceTree = ""; }; + 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 = ""; }; + B8D9AFA42E8633154A9817A2 /* mtpConnection.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpConnection.cpp; path = SourceFiles/mtproto/mtpConnection.cpp; sourceTree = ""; }; + B97D4DB97FE881648644211A /* downloadpathbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = downloadpathbox.h; path = SourceFiles/boxes/downloadpathbox.h; sourceTree = ""; }; + BB1602EA641643DE565005B1 /* twidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = twidget.cpp; path = SourceFiles/gui/twidget.cpp; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + BDAB6725B830DEE896DC0F55 /* boxshadow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = boxshadow.h; path = SourceFiles/gui/boxshadow.h; sourceTree = ""; }; + 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 = ""; }; + BEF9DFDA6822604126A7E233 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; }; + 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 = ""; }; + C194EDD00F76216057D48A5C /* aboutbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = aboutbox.cpp; path = SourceFiles/boxes/aboutbox.cpp; sourceTree = ""; }; + C19DF71B273A4843553518F2 /* app.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = app.h; path = SourceFiles/app.h; sourceTree = ""; }; + C20F9DD8C7B031B8E20D5653 /* application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = application.cpp; path = SourceFiles/application.cpp; sourceTree = ""; }; + C34459FA465B57DF4DB80D12 /* introsteps.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introsteps.cpp; path = SourceFiles/intro/introsteps.cpp; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + C52030E4534894A117CA66CA /* qavfcamera */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qavfcamera; path = "/usr/local/Qt-5.3.0/plugins/mediaservice/libqavfcamera$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + C63C6D083EBEB13A60256DF3 /* historywidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = historywidget.h; path = SourceFiles/historywidget.h; sourceTree = ""; }; + 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 = ""; }; + C913E6A1001E07EE7C13CE93 /* style.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style.h; path = SourceFiles/style.h; sourceTree = ""; }; + C9FFCCE4FCB845744636795F /* moc_flatbutton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flatbutton.cpp; path = GeneratedFiles/Debug/moc_flatbutton.cpp; sourceTree = ""; }; + CA56ACFB53D87637192CC9B2 /* window.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = window.cpp; path = SourceFiles/window.cpp; sourceTree = ""; }; + 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 = ""; }; + CE0D5EFE401BF9815FACE579 /* pspecific_mac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pspecific_mac.h; path = SourceFiles/pspecific_mac.h; sourceTree = ""; }; + CE7FFE194127BD789A2C877A /* moc_confirmbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_confirmbox.cpp; path = GeneratedFiles/Debug/moc_confirmbox.cpp; sourceTree = ""; }; + 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 = ""; }; + CF1690B68F3B278E78823DB9 /* history.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = history.h; path = SourceFiles/history.h; sourceTree = ""; }; + CF32DF59C7823E4F3397EF3C /* profilewidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = profilewidget.cpp; path = SourceFiles/profilewidget.cpp; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + D12A6BD8EE80B8B308E481AD /* moc_flattextarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flattextarea.cpp; path = GeneratedFiles/Debug/moc_flattextarea.cpp; sourceTree = ""; }; + D1C9C77F1318F5A55C9BF289 /* photosendbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = photosendbox.cpp; path = SourceFiles/boxes/photosendbox.cpp; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D3FE9C29B6A61D7C3C4B731B /* animation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = animation.cpp; path = SourceFiles/gui/animation.cpp; sourceTree = ""; }; + D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.3.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.3.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D6FF6676816C4E374D374060 /* qrc_telegram.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = qrc_telegram.cpp; path = GeneratedFiles/qrc_telegram.cpp; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.3.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DC23E0B79FF53F35BA8F76A1 /* introsignup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introsignup.h; path = SourceFiles/intro/introsignup.h; sourceTree = ""; }; + DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DE4C0E3685DDAE58F9397B13 /* filedialog.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = filedialog.cpp; path = SourceFiles/gui/filedialog.cpp; sourceTree = ""; }; + 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 = ""; }; + DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; + 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 = ""; }; + E181C525E21A16F2D4396CA7 /* moc_application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_application.cpp; path = GeneratedFiles/Debug/moc_application.cpp; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + E466873F01ABA1E55E914489 /* dialogswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = dialogswidget.cpp; path = SourceFiles/dialogswidget.cpp; sourceTree = ""; }; + 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 = ""; }; + E55D7EB1AAD7FB1CA69BA9E4 /* lang.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = lang.h; path = GeneratedFiles/lang.h; sourceTree = ""; }; + 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 = ""; }; + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.3.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + E908A6C86F93FA27DF70866C /* photocropbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = photocropbox.cpp; path = SourceFiles/boxes/photocropbox.cpp; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + EC4D4A7398CAAD47386D9CA0 /* mtpSessionImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpSessionImpl.h; path = SourceFiles/mtproto/mtpSessionImpl.h; sourceTree = ""; }; + EDD43CF4FA85D97A1140E973 /* qavfmediaplayer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qavfmediaplayer; path = "/usr/local/Qt-5.3.0/plugins/mediaservice/libqavfmediaplayer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + EE03BC5CA4628A6D6BEB0122 /* qcorewlanbearer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcorewlanbearer; path = "/usr/local/Qt-5.3.0/plugins/bearer/libqcorewlanbearer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + EF1AD6A66D0C28A6A15E2C30 /* introphone.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introphone.h; path = SourceFiles/intro/introphone.h; sourceTree = ""; }; + F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 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 = ""; }; + F1A04BDB750C2AE652797B04 /* flatbutton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatbutton.cpp; path = SourceFiles/gui/flatbutton.cpp; sourceTree = ""; }; + F1B68FFCE8AE823F6D45EB06 /* phoneinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = phoneinput.h; path = SourceFiles/gui/phoneinput.h; sourceTree = ""; }; + F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F26998DF735BCE5F975508ED /* CoreWLAN.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreWLAN.framework; path = /System/Library/Frameworks/CoreWLAN.framework; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + 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 = ""; }; + F4EECA1187A744AEF5165243 /* pspecific_mac.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = pspecific_mac.cpp; path = SourceFiles/pspecific_mac.cpp; sourceTree = ""; }; + 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 = ""; }; + F80095A026AF9453E9C2B8BD /* settingswidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = settingswidget.h; path = SourceFiles/settingswidget.h; sourceTree = ""; }; + 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 = ""; }; + 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 = ""; }; + FB0DCE17FF02138B3C1B1219 /* telegram_plugin_import.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = telegram_plugin_import.cpp; sourceTree = ""; }; + FB61F72601D91BF3AC730D20 /* mtpRPC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpRPC.h; path = SourceFiles/mtproto/mtpRPC.h; sourceTree = ""; }; + FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 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 = ""; }; + FE8FD20832B4C226E345CFBA /* mainwidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mainwidget.h; path = SourceFiles/mainwidget.h; sourceTree = ""; }; + FEC58F9D8A0963E5A9D4BE6F /* moc_connectionbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_connectionbox.cpp; path = GeneratedFiles/Debug/moc_connectionbox.cpp; sourceTree = ""; }; + FF5BDAB0076F3391B219EA52 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = /System/Library/Frameworks/SystemConfiguration.framework; sourceTree = ""; }; + FF66B5DCBB004CD8703F0207 /* newgroupbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = newgroupbox.h; path = SourceFiles/boxes/newgroupbox.h; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D1C883685E82D5676953459A /* Link Binary With Libraries */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */, + B58956C9C026BD3A7FD9ECDF /* libexif.a 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 */, + 15364689D2AB5A30E87A689F /* Security.framework in Link Binary With Libraries */, + D4639595C3BCF2A39D88DF6E /* SystemConfiguration.framework in Link Binary With Libraries */, + F8ED42CF8679BF83227DAFC4 /* Carbon.framework in Link Binary With Libraries */, + 4EB68D0C8182BCE33529C421 /* AudioToolbox.framework in Link Binary With Libraries */, + 35A1A39F8EAB37889EB3D397 /* CoreAudio.framework in Link Binary With Libraries */, + B460F624007324313696BE86 /* QuartzCore.framework in Link Binary With Libraries */, + CCA737EE379CDB10CC9A0F23 /* AVFoundation.framework in Link Binary With Libraries */, + B78304F135DEF1F7A68393A6 /* CoreMedia.framework in Link Binary With Libraries */, + F2A75ACAC9DF6A3F4E5711E7 /* AppKit.framework in Link Binary With Libraries */, + DAD6F5593C3427F014531342 /* AudioUnit.framework in Link Binary With Libraries */, + EEBE9C2FA7C9F066508EF99B /* qavfmediaplayer in Link Binary With Libraries */, + DC52E36A03D974A1A0C9AA2A /* qqt7engine in Link Binary With Libraries */, + EDFF7E777D3A3730A9BB3FC2 /* QTKit.framework in Link Binary With Libraries */, + 9B6E32D1B74A14273D68E439 /* Qt5MultimediaWidgets in Link Binary With Libraries */, + C9CC5CE020283D113D81179C /* Qt5OpenGL in Link Binary With Libraries */, + 597623A24AE744145BE84968 /* qtmedia_audioengine in Link Binary With Libraries */, + B3C3392253201C328D9C6736 /* qtaudio_coreaudio in Link Binary With Libraries */, + 2A20C3BF118707980A2493E1 /* qtmultimedia_m3u in Link Binary With Libraries */, + C0D2E925FB8B08D9AA280753 /* Qt5Multimedia in Link Binary With Libraries */, + D3D955F61644264D27FC2796 /* qtaccessiblewidgets in Link Binary With Libraries */, + EBA5E17368D2BBC6014E92B9 /* qcorewlanbearer in Link Binary With Libraries */, + D0EECF370C58DDCACBC71BAD /* CoreWLAN.framework in Link Binary With Libraries */, + 8883FF366F2623E89D90A9E6 /* qgenericbearer in Link Binary With Libraries */, + 5058CB9D7BFFCE9F404A3700 /* Qt5Network in Link Binary With Libraries */, + D1FA8AF31837B51C762A9D4D /* qcocoa 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 */ + 130BDDB6FC4D60CF394D95AF /* GeneratedFiles */ = { + isa = PBXGroup; + children = ( + 4B6C62A2448B708B3FF40411 /* lang.cpp */, + 99B8D38F7F5858601230911E /* style_auto.cpp */, + E55D7EB1AAD7FB1CA69BA9E4 /* lang.h */, + 9EFD7CB36012BFC00CC79434 /* style_auto.h */, + 39C1ADF085370E033CB7E7E1 /* style_classes.h */, + ); + name = GeneratedFiles; + sourceTree = ""; + }; + 1A6AA22F4A758C4B5F5138FB /* mtproto */ = { + isa = PBXGroup; + children = ( + 6D50D70712776D7ED3B00E5C /* mtp.cpp */, + B8D9AFA42E8633154A9817A2 /* mtpConnection.cpp */, + 315C7FACB4A9E18AA95486CA /* mtpDC.cpp */, + 01D6341DC31FE5997F7BB159 /* mtpFileLoader.cpp */, + 89F92B278CA31C393E245056 /* mtpRPC.cpp */, + 0FBED3C6654EA3753EB39831 /* mtpSession.cpp */, + EC4D4A7398CAAD47386D9CA0 /* mtpSessionImpl.h */, + 8880067F9BFD46108777E134 /* mtp.h */, + 748F1BCCBEEB3675768960FB /* mtpAuthKey.h */, + 963123025C466CB8DD9CF4AF /* mtpConnection.h */, + 27E7471A4EC90E84353AA16F /* mtpCoreTypes.h */, + B3D42654F18B1FE49512C404 /* mtpDC.h */, + 96ACDDE3DCB798B97F9EA2F4 /* mtpFileLoader.h */, + A3622760CEC6D6827A25E710 /* mtpPublicRSA.h */, + FB61F72601D91BF3AC730D20 /* mtpRPC.h */, + 7DBFC0B5EAF874BA10E3D603 /* mtpScheme.h */, + 4D1099F2D3696E8A0E17D37D /* mtpSession.h */, + ); + name = mtproto; + sourceTree = ""; + }; + 25B08E2869634E9BCBA333A2 /* Generated Sources */ = { + isa = PBXGroup; + children = ( + D0B536A85E53302E4F66CE23 /* GeneratedFiles */, + ); + name = "Generated Sources"; + sourceTree = ""; + }; + 2EB56BE3C2D93CDAB0C52E67 /* Sources */ = { + isa = PBXGroup; + children = ( + 73F2E45FDEB381A085D37A49 /* SourceFiles */, + 130BDDB6FC4D60CF394D95AF /* GeneratedFiles */, + FB0DCE17FF02138B3C1B1219 /* telegram_plugin_import.cpp */, + ); + name = Sources; + sourceTree = ""; + }; + 35C84855EE9B0EA8AE0FF729 /* SourceFiles */ = { + isa = PBXGroup; + children = ( + 1292B92B4848460640F6A391 /* telegram.qrc */, + ); + name = SourceFiles; + sourceTree = ""; + }; + 370997172D3BAEED157B8E70 /* SourceFiles */ = { + isa = PBXGroup; + children = ( + 1292B92B4848460640F6A391 /* telegram.qrc */, + ); + name = SourceFiles; + sourceTree = ""; + }; + 579DA7AEF5751DF4988869A0 /* gui */ = { + isa = PBXGroup; + children = ( + D3FE9C29B6A61D7C3C4B731B /* animation.cpp */, + 08A7682548FB7E671FF03822 /* boxshadow.cpp */, + 4D55B83DFDFE3D492CDBD27A /* button.cpp */, + 751C8D0E0BE6D16937B77A2C /* countrycodeinput.cpp */, + 3E329D4547CC23585307FA32 /* countryinput.cpp */, + B3062303CE8F4EB9325CB3DC /* emoji_config.cpp */, + DE4C0E3685DDAE58F9397B13 /* filedialog.cpp */, + F1A04BDB750C2AE652797B04 /* flatbutton.cpp */, + AF4585F593B1C9D0D4FD061C /* flatcheckbox.cpp */, + 9AB1479D7D63386FD2046620 /* flatinput.cpp */, + 763ED3C6815ED6C89E352652 /* flatlabel.cpp */, + 5C7FD422BBEDA858D7237AE9 /* flattextarea.cpp */, + 6A510365F9F6367ECB0DB065 /* images.cpp */, + 7C8F9CA4FCE8AF8FCCCB961E /* phoneinput.cpp */, + 6E1859D714E4471E053D90C9 /* scrollarea.cpp */, + 420A06A32B66D250142B4B6D /* style_core.cpp */, + 135FD3715BFDC50AD7B00E04 /* text.cpp */, + BB1602EA641643DE565005B1 /* twidget.cpp */, + 85FABD67716E36CD8B3CA4FA /* animation.h */, + BDAB6725B830DEE896DC0F55 /* boxshadow.h */, + 4604687EBA85611C9E8A9CDF /* button.h */, + 60C0061633AC4244EA634B2A /* countrycodeinput.h */, + 6868ADA9E9A9801B2BA92B97 /* countryinput.h */, + 19618554524B8D928F13940D /* emoji_config.h */, + 9BD0BE66E93ACE27D00D6D75 /* filedialog.h */, + 36F718DC72345A84987DB0F6 /* flatbutton.h */, + 5059175BDCEC77B7246DE1B9 /* flatcheckbox.h */, + 4E4D06EC4D2C82C7D6E079A2 /* flatinput.h */, + 34E1DF19219C52D7DB20224A /* flatlabel.h */, + 59E514973BA9BF6599252DDC /* flattextarea.h */, + 0F8FFD87AEBAC448568570DC /* images.h */, + F1B68FFCE8AE823F6D45EB06 /* phoneinput.h */, + 83A36F229E897566E011B79E /* scrollarea.h */, + 0FC38EE7F29EF895925A2C49 /* style_core.h */, + 6E8FD0ED1B60D43929944CD2 /* text.h */, + 507CCEEC4CBA3E3BD6EEDED1 /* twidget.h */, + ); + name = gui; + sourceTree = ""; + }; + 5E35A03E5F2C51353EBCBF00 /* intro */ = { + isa = PBXGroup; + children = ( + 0771C4C94B623FC34BF62983 /* intro.cpp */, + A0090709DE1B155085362C36 /* introcode.cpp */, + 61C679D8B4B332026BD34200 /* introphone.cpp */, + A9FF4818C6775109B3DBFA18 /* introsignup.cpp */, + C34459FA465B57DF4DB80D12 /* introsteps.cpp */, + 152B8D1BCECEB7B0C77E073C /* intro.h */, + 098EA7CE256AAFAE4A17EB77 /* introcode.h */, + EF1AD6A66D0C28A6A15E2C30 /* introphone.h */, + DC23E0B79FF53F35BA8F76A1 /* introsignup.h */, + AD90723EF02EAD016FD49CC9 /* introsteps.h */, + ); + name = intro; + sourceTree = ""; + }; + 73F2E45FDEB381A085D37A49 /* SourceFiles */ = { + isa = PBXGroup; + children = ( + 5271C394C1E7646D117CE67E /* main.cpp */, + 5A5431331A13AA7B07414240 /* stdafx.cpp */, + 06E379415713F34B83F99C35 /* app.cpp */, + C20F9DD8C7B031B8E20D5653 /* application.cpp */, + E466873F01ABA1E55E914489 /* dialogswidget.cpp */, + 710C982FC773400941B3AFBC /* dropdown.cpp */, + 9B36BB8C5B8CA7B07F3F35F0 /* fileuploader.cpp */, + 26B83A58EE268598E703875D /* history.cpp */, + A83D2C19F756D3371E5999A8 /* historywidget.cpp */, + AF5776B0652744978B7DF6D3 /* langloaderplain.cpp */, + 5A9B4C6C59856143F3D0DE53 /* layerwidget.cpp */, + CF32DF59C7823E4F3397EF3C /* profilewidget.cpp */, + 5A7F88F9C7F08D3DDE6EEF6B /* localimageloader.cpp */, + 974DB34EEB8F83B91614C0B0 /* logs.cpp */, + 047DAFB0A7DE92C63033A43C /* mainwidget.cpp */, + 8A28F7789408AA839F48A5F2 /* settings.cpp */, + 8CCCACE96535180FEB557712 /* settingswidget.cpp */, + 0B2F770F53FBB0DBF738D89B /* supporttl.cpp */, + 6B90F69947805586A6FAE80E /* sysbuttons.cpp */, + 2BB2A1BB8DB0993F78F4E3C7 /* title.cpp */, + 7D075A915E8739C1B6BC5F43 /* types.cpp */, + CA56ACFB53D87637192CC9B2 /* window.cpp */, + F4EECA1187A744AEF5165243 /* pspecific_mac.cpp */, + 73737DC91E390C4AB18FB595 /* pspecific_mac_p.mm */, + 1A6AA22F4A758C4B5F5138FB /* mtproto */, + 579DA7AEF5751DF4988869A0 /* gui */, + ADC8DBF4C6F26E14C77F68B4 /* boxes */, + 5E35A03E5F2C51353EBCBF00 /* intro */, + 6011DDB120E1B2D4803E129A /* stdafx.h */, + C19DF71B273A4843553518F2 /* app.h */, + 09FD01F2BD652EB838A296D8 /* application.h */, + 24F7D3E789E91B10E422C116 /* config.h */, + 206B4F5CBD5354BCE19FF32F /* countries.h */, + 55B4A93DD455EED91C899A8E /* dialogswidget.h */, + 1A4C47331E186344291B8178 /* dropdown.h */, + 8A9D926C08392F7A9BC83B0C /* fileuploader.h */, + CF1690B68F3B278E78823DB9 /* history.h */, + C63C6D083EBEB13A60256DF3 /* historywidget.h */, + 25CA12A22B83B0B038C5B5DE /* langloaderplain.h */, + 6C86B6E6AB1857B735B720D6 /* layerwidget.h */, + 220B97F8F62C720E6059A64B /* profilewidget.h */, + AD0C395D671BC024083A5FC7 /* localimageloader.h */, + 0CAA815FFFEDCD84808E11F5 /* logs.h */, + FE8FD20832B4C226E345CFBA /* mainwidget.h */, + 2EA58EF6CDF368B0132BAEB9 /* settings.h */, + F80095A026AF9453E9C2B8BD /* settingswidget.h */, + C913E6A1001E07EE7C13CE93 /* style.h */, + 42FA90460B1A91C414157EAC /* supporttl.h */, + 3BE70E2A82DC2BF402165ED5 /* sysbuttons.h */, + 4D504A849F15EB58E53A4E5F /* title.h */, + 1DC02F674A7192FF8BE391A7 /* types.h */, + 301BB513F2F5D447B3BF22DF /* window.h */, + 83728F60A64483E0AA933D76 /* pspecific.h */, + CE0D5EFE401BF9815FACE579 /* pspecific_mac.h */, + 07C3AF27194336B90016CFF1 /* pspecific_mac_p.h */, + ); + name = SourceFiles; + sourceTree = ""; + }; + 74B182DB50CB5611B5C1C297 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 36BDA5D01BED543A92886669 /* Telegram.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 */, + 370997172D3BAEED157B8E70 /* SourceFiles */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 801973D3334D0FCA849CF485 /* Debug */ = { + isa = PBXGroup; + children = ( + E181C525E21A16F2D4396CA7 /* moc_application.cpp */, + 3B3ED09AB00290D78CF1181B /* moc_dialogswidget.cpp */, + AC9B5F6FB4B984C8D76F7AE2 /* moc_dropdown.cpp */, + 3D54A9F3266BB8739520E3FB /* moc_fileuploader.cpp */, + 2C99425D7670941EAF07B453 /* moc_historywidget.cpp */, + 1FE45A67215BEA2434F588E8 /* moc_layerwidget.cpp */, + 48003469151B9DDE82E851FB /* moc_profilewidget.cpp */, + 1D7899ACAA9F973CADFA34C1 /* moc_localimageloader.cpp */, + 3A220FD1AE5AD9FE3DC073A4 /* moc_mainwidget.cpp */, + 93AFE74928551FC3D7E8390B /* moc_settingswidget.cpp */, + B88236FC554B694F618D848C /* moc_sysbuttons.cpp */, + 1080B6D395843B8F76A2E45E /* moc_title.cpp */, + 6B46A0EE3C3B9D3B5A24946E /* moc_window.cpp */, + 924D4939FD169BB4B8AEB1C9 /* moc_mtp.cpp */, + B714EA71A09A832FAA846A0A /* moc_mtpConnection.cpp */, + 2C540BAEABD7F9B5FA11008E /* moc_mtpDC.cpp */, + 5591A965D1DC024FBDB40151 /* moc_mtpFileLoader.cpp */, + 63AF8520023B4EA40306CB03 /* moc_mtpSession.cpp */, + A1479F94376F9732B57C69DB /* moc_animation.cpp */, + 46292F489228B60010794CE4 /* moc_button.cpp */, + A1F48DF3E5D0D7C741C1EAC4 /* moc_countrycodeinput.cpp */, + 9D9F4744B2F9FF22569D4535 /* moc_countryinput.cpp */, + C9FFCCE4FCB845744636795F /* moc_flatbutton.cpp */, + 58E05D0B8B104D83F43F9859 /* moc_flatcheckbox.cpp */, + 1E5EEB5782B6357057356F9E /* moc_flatinput.cpp */, + 2181F5E34DE0A4B2F811E2E2 /* moc_flatlabel.cpp */, + D12A6BD8EE80B8B308E481AD /* moc_flattextarea.cpp */, + B8100EAB0521FC7A937D2E4F /* moc_phoneinput.cpp */, + 8918F4B71ED5FC138AFD3F70 /* moc_scrollarea.cpp */, + 55A654A2EE8554FF062742B8 /* moc_twidget.cpp */, + 9A69B711DE4B9C89BA803750 /* moc_aboutbox.cpp */, + 81780025807318AEA3B8A6FF /* moc_addcontactbox.cpp */, + 8C7AEF8DED4F7B6E6F89F330 /* moc_addparticipantbox.cpp */, + CE7FFE194127BD789A2C877A /* moc_confirmbox.cpp */, + FEC58F9D8A0963E5A9D4BE6F /* moc_connectionbox.cpp */, + 26083D8E535AFF927591E1A5 /* moc_contactsbox.cpp */, + 6532A0DC7EFE446967682E83 /* moc_downloadpathbox.cpp */, + 0C0DC15EB416789673526AA5 /* moc_emojibox.cpp */, + 69FE16874104731CE2A66E0D /* moc_newgroupbox.cpp */, + AF61D864B8C444ADD4E1B391 /* moc_photocropbox.cpp */, + 9E0704DE8650D7952DC6B7AE /* moc_photosendbox.cpp */, + A37C7E516201B0264A4CDA38 /* moc_intro.cpp */, + 8B98A212C068D6CC7CE73CAA /* moc_introcode.cpp */, + 1B4A65B84270FF2FED008EB6 /* moc_introphone.cpp */, + 58A7114F60E7D09E73283983 /* moc_introsignup.cpp */, + 74772222DA764BE4623EAC5D /* moc_pspecific_mac.cpp */, + ); + name = Debug; + sourceTree = ""; + }; + 87DF60DE337FB58864343E39 /* Resources */ = { + isa = PBXGroup; + children = ( + 07C3AF2819433ABF0016CFF1 /* lang.txt */, + 07C3AF2919433ABF0016CFF1 /* style_classes.txt */, + 07C3AF2A19433ABF0016CFF1 /* style.txt */, + 07C3AF24194335ED0016CFF1 /* Images.xcassets */, + 35C84855EE9B0EA8AE0FF729 /* SourceFiles */, + ); + name = Resources; + sourceTree = ""; + }; + ADC8DBF4C6F26E14C77F68B4 /* boxes */ = { + isa = PBXGroup; + children = ( + C194EDD00F76216057D48A5C /* aboutbox.cpp */, + 7CA6945B22800A0F30B75DA5 /* addcontactbox.cpp */, + 40E88FBA282991C8CBDFE94D /* addparticipantbox.cpp */, + 6610564B876E47D289A596DB /* confirmbox.cpp */, + 51355181C0E6689B0B764543 /* connectionbox.cpp */, + 8C800AAC9549E6E9E7046BED /* contactsbox.cpp */, + 8DF456E9A416E4C3C2D6946C /* downloadpathbox.cpp */, + 0ECF1EB9BF3786A16731F685 /* emojibox.cpp */, + 5FCB7CBBAF4AE338D4B05C76 /* newgroupbox.cpp */, + E908A6C86F93FA27DF70866C /* photocropbox.cpp */, + D1C9C77F1318F5A55C9BF289 /* photosendbox.cpp */, + 143405635D04698F421A12EA /* aboutbox.h */, + 7CDE9D7CB2C729BC3612372B /* addcontactbox.h */, + 245F3B3B43CC450EBA6650B5 /* addparticipantbox.h */, + 1DEFC0760BB9340529F582F7 /* confirmbox.h */, + 8EB83A4D34226609E79A613A /* connectionbox.h */, + 120EBCD9A37DB9A36BFE58C0 /* contactsbox.h */, + B97D4DB97FE881648644211A /* downloadpathbox.h */, + 032C1BF3E727B450A4851D48 /* emojibox.h */, + FF66B5DCBB004CD8703F0207 /* newgroupbox.h */, + 14437BFDCD58FF1742EF1B35 /* photocropbox.h */, + 0BDE09020E45EFA57DCB2E25 /* photosendbox.h */, + ); + name = boxes; + sourceTree = ""; + }; + AF39DD055C3EF8226FBE929D /* Frameworks */ = { + isa = PBXGroup; + children = ( + AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */, + 4AF15B5A0A43EB62D6DAF211 /* libexif.a */, + DFD7912080BC557230093752 /* ApplicationServices.framework */, + 9742F24EE18EA44D52824F1E /* CoreServices.framework */, + 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */, + FCC237CA5AD60B9BA4447615 /* Foundation.framework */, + D4B32C2222F82AC56BADEB21 /* OpenGL.framework */, + 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */, + 205259EEEE2BADA5E64741E3 /* Security.framework */, + FF5BDAB0076F3391B219EA52 /* SystemConfiguration.framework */, + 9DFF62A901D70814B8A323D4 /* Carbon.framework */, + C52030E4534894A117CA66CA /* qavfcamera */, + 3C44131FDCFEF4396B9EA2BA /* AudioToolbox.framework */, + BEF9DFDA6822604126A7E233 /* CoreAudio.framework */, + 7EC00404ACD5AB0E97726B0E /* QuartzCore.framework */, + 21F907AB8D19BD779147A085 /* AVFoundation.framework */, + 547CCADBD1CC5050167EF948 /* CoreMedia.framework */, + 723F90793B2C195E2CCB2233 /* AppKit.framework */, + 186D09F4CB713AD4B8BDD260 /* AudioUnit.framework */, + EDD43CF4FA85D97A1140E973 /* qavfmediaplayer */, + 1C21DCD421D7B7E0462F1121 /* qqt7engine */, + 2AC1C71FA3CD6FD909ED0276 /* QTKit.framework */, + 833B45FEF5DC4AD0E8ADA64A /* Qt5MultimediaWidgets */, + AA5379CB06E908AC80BE7B82 /* Qt5OpenGL */, + A490341D0650372A5757B367 /* qtmedia_audioengine */, + 3BBB805F6180E363BF89151A /* qtaudio_coreaudio */, + 4EC011DBE92DD1FD208D94D2 /* qtmultimedia_m3u */, + 112159B026FDEF9CD4E24175 /* Qt5Multimedia */, + A7782E2B07CB2D1D14F431B0 /* qtaccessiblewidgets */, + EE03BC5CA4628A6D6BEB0122 /* qcorewlanbearer */, + F26998DF735BCE5F975508ED /* CoreWLAN.framework */, + 9A55B8F7C143D66AD9EAE304 /* qgenericbearer */, + 6700DD555BF1C0FC338FB959 /* Qt5Network */, + D53D8E6A188E05078A114294 /* qcocoa */, + 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 = ""; + }; + D0B536A85E53302E4F66CE23 /* GeneratedFiles */ = { + isa = PBXGroup; + children = ( + D6FF6676816C4E374D374060 /* qrc_telegram.cpp */, + 801973D3334D0FCA849CF485 /* Debug */, + ); + name = GeneratedFiles; + sourceTree = ""; + }; + E8C543AB96796ECAA2E65C57 /* Telegram */ = { + isa = PBXGroup; + children = ( + 2EB56BE3C2D93CDAB0C52E67 /* Sources */, + 25B08E2869634E9BCBA333A2 /* Generated Sources */, + 74B182DB50CB5611B5C1C297 /* Supporting Files */, + 87DF60DE337FB58864343E39 /* Resources */, + AF39DD055C3EF8226FBE929D /* Frameworks */, + FE0A091FDBFB3E9C31B7A1BD /* Products */, + 07C3AF40194CCC310016CFF1 /* Preprocess copy-Info.plist */, + ); + name = Telegram; + sourceTree = ""; + }; + FE0A091FDBFB3E9C31B7A1BD /* Products */ = { + isa = PBXGroup; + children = ( + 62807F13DBD204D0716143AD /* Telegram.app */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 7CCA95B9FCAD34D929431AD6 /* Telegram */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "Telegram" */; + buildPhases = ( + F7E50F631C51CD5B5DC0BC43 /* Compile Sources */, + D1C883685E82D5676953459A /* Link Binary With Libraries */, + 07C3AF341948FC3B0016CFF1 /* ShellScript */, + 07C3AF25194336160016CFF1 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 69BB0D15D494AAF597C8D2CF /* PBXTargetDependency */, + ); + name = Telegram; + productInstallPath = ../Mac/Debug/; + productName = Telegram; + productReference = 62807F13DBD204D0716143AD /* Telegram.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 6DB9C3763D02B1415CD9D565 /* Project object */ = { + isa = PBXProject; + attributes = { + }; + buildConfigurationList = DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "Telegram" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + en, + ); + mainGroup = E8C543AB96796ECAA2E65C57 /* Telegram */; + productRefGroup = FE0A091FDBFB3E9C31B7A1BD /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 7CCA95B9FCAD34D929431AD6 /* Telegram */, + 07AA07135D01069052F55A12 /* Preprocess */, + 07C3AF39194CCC310016CFF1 /* Meta Compile */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 07C3AF25194336160016CFF1 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 07C3AF26194336250016CFF1 /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 07C3AF341948FC3B0016CFF1 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "mkdir -p ./../Mac/$CONFIGURATION/Telegram.app/Contents/Resources"; + }; + 07C3AF3A194CCC310016CFF1 /* Meta Style */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Meta Style"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "open ../Mac/DebugStyle/MetaStyle.app --args -classes_in \"../../Telegram/Resources/style_classes.txt\" -classes_out \"../../Telegram/GeneratedFiles/style_classes.h\" -styles_in \"../../Telegram/Resources/style.txt\" -styles_out \"../../Telegram/GeneratedFiles/style_auto.h\" -path_to_sprites \"../../Telegram/SourceFiles/art/\""; + }; + 07C3AF3B194CCC310016CFF1 /* Meta Lang */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Meta Lang"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "open ../Mac/DebugLang/MetaLang.app --args -lang_in \"../../Telegram/Resources/lang.txt\" -lang_out \"../../Telegram/GeneratedFiles/lang\""; + }; + 7EF0942E79C014DCEC8976BC /* Qt Preprocessors */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + name = "Qt Preprocessors"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "make -C . -f Telegram.xcodeproj/qt_preprocess.mak"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + F7E50F631C51CD5B5DC0BC43 /* Compile Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1299DDAE203A7EDFED9F5D6B /* main.cpp in Compile Sources */, + D87463318C8E5211C8C8670A /* stdafx.cpp in Compile Sources */, + 7BEFA1D273AD62772AA33D73 /* app.cpp in Compile Sources */, + 8E26A0653012B8E8C3E865EC /* application.cpp in Compile Sources */, + 02F93BF511880983D3C57B84 /* dialogswidget.cpp in Compile Sources */, + 6EF5A4ECC0EF19EA016EBA3E /* dropdown.cpp in Compile Sources */, + 6E4DB0CBEF415196AFD4149F /* fileuploader.cpp in Compile Sources */, + 700925F3B2C6163D38140CEA /* history.cpp in Compile Sources */, + 1DF53374E3B6A31661548D08 /* historywidget.cpp in Compile Sources */, + 37A3C6C782A0E4BC7B09536B /* langloaderplain.cpp in Compile Sources */, + 19A66ECD6EE2F8356F27D32D /* layerwidget.cpp in Compile Sources */, + 89ADB41E48A3B5E24ABB626C /* profilewidget.cpp in Compile Sources */, + 48D8FC93AA8FF5D184649F49 /* localimageloader.cpp in Compile Sources */, + 113AA97DEE7847C7D2DCFF71 /* logs.cpp in Compile Sources */, + E3194392BD6D0726F75FA72E /* mainwidget.cpp in Compile Sources */, + DF36EA42D67ED39E58CB7DF9 /* settings.cpp in Compile Sources */, + B99CCE43EEFCD3E18F6D16D1 /* settingswidget.cpp in Compile Sources */, + 878DCAF0C5B0DB2EB4EDFD3D /* supporttl.cpp in Compile Sources */, + B8DA82DA1B195A933A0805E7 /* sysbuttons.cpp in Compile Sources */, + 5CE57D44510AB2A11886AB52 /* title.cpp in Compile Sources */, + 4078D5D614EB3ECF7F1848C7 /* types.cpp in Compile Sources */, + 68FFEB7CA30BF0149161B809 /* window.cpp in Compile Sources */, + 0CB7DE9A54CC9BF86FB7B5CA /* mtp.cpp in Compile Sources */, + DF259E9677CC63AF8754032B /* mtpConnection.cpp in Compile Sources */, + B6346B66B0A2228A91D8A5D9 /* mtpDC.cpp in Compile Sources */, + B8CA3E1E11A7E0E7DF9E1CDE /* mtpFileLoader.cpp in Compile Sources */, + 99F0A9B2AFE5ABDCBFC04510 /* mtpRPC.cpp in Compile Sources */, + A297B1E3CE33CC501DFEDB6E /* mtpSession.cpp in Compile Sources */, + D1FC601FC2F9F3E33F3A14E9 /* animation.cpp in Compile Sources */, + 8F65F0D95B1F0CEB859F2FB3 /* boxshadow.cpp in Compile Sources */, + D7EF8F129FCCE9AB3F3F081F /* button.cpp in Compile Sources */, + B3CD52E504409DC1B560024F /* countrycodeinput.cpp in Compile Sources */, + C03447C9A7D9FF73463B8BB5 /* countryinput.cpp in Compile Sources */, + CDB0266A8B7CB20A95266BCD /* emoji_config.cpp in Compile Sources */, + 7C2B2DEE467A4C4679F1C3C9 /* filedialog.cpp in Compile Sources */, + 832C50BFD7D09AF042A51D4F /* flatbutton.cpp in Compile Sources */, + B91D13BCC3963CB9C12D24A4 /* flatcheckbox.cpp in Compile Sources */, + 77DA1217B595B799FB72CDDA /* flatinput.cpp in Compile Sources */, + DE6A34CA3A5561888FA01AF1 /* flatlabel.cpp in Compile Sources */, + 03270F718426CFE84729079E /* flattextarea.cpp in Compile Sources */, + E3D7A5CA24541D5DB69D6606 /* images.cpp in Compile Sources */, + 0A49F3A5DC0680FB31519670 /* phoneinput.cpp in Compile Sources */, + ADE99904299B99EB6135E8D9 /* scrollarea.cpp in Compile Sources */, + 90085DF442550A0845D5AF37 /* style_core.cpp in Compile Sources */, + 3AA6E7264581F82856FB37F7 /* text.cpp in Compile Sources */, + FCE6518C548DF7BC82228A4A /* twidget.cpp in Compile Sources */, + F91C59BECCE70070B06E8385 /* lang.cpp in Compile Sources */, + E9F1CE7F9B18C7C85A50E62D /* style_auto.cpp in Compile Sources */, + EBE29731916DB43BF49FE7A4 /* aboutbox.cpp in Compile Sources */, + 4426AF526AAD86D6F73CE36F /* addcontactbox.cpp in Compile Sources */, + 830CB6F547B8C80A569A0271 /* addparticipantbox.cpp in Compile Sources */, + A0A6B97F7DBEC81004EC9461 /* confirmbox.cpp in Compile Sources */, + 4FEA8F51B7BC7CAC71347A1A /* connectionbox.cpp in Compile Sources */, + 298BFAB73BF182297584F96F /* contactsbox.cpp in Compile Sources */, + BA41D511A9BBCA09365DF88C /* downloadpathbox.cpp in Compile Sources */, + 3ABE4F9B2264F770D944106D /* emojibox.cpp in Compile Sources */, + 7422A321DF80CF9FAC7CB51B /* newgroupbox.cpp in Compile Sources */, + 77B998AC22A13EF3DDEE07AC /* photocropbox.cpp in Compile Sources */, + F278C423357CA99797EA30AB /* photosendbox.cpp in Compile Sources */, + E8D95529CED88F18818C9A8B /* intro.cpp in Compile Sources */, + 9357E7B12AD6D88B157ACA05 /* introcode.cpp in Compile Sources */, + 4BF3F8D0797BC8A0C1FAD13C /* introphone.cpp in Compile Sources */, + 4978DE680549639AE9AA9CA6 /* introsignup.cpp in Compile Sources */, + 8B22E794EFF0EAFF964A3043 /* introsteps.cpp in Compile Sources */, + 74343521EECC740F777DAFE6 /* pspecific_mac.cpp in Compile Sources */, + D67628B07A49239E73C2150B /* telegram_plugin_import.cpp in Compile Sources */, + 26A81090DC8B5BCF7278FDFF /* qrc_telegram.cpp in Compile Sources */, + C1F9D5CA8AF3AD8EBC9D7310 /* moc_application.cpp in Compile Sources */, + D846C6F212B438DC2FD5FF71 /* moc_dialogswidget.cpp in Compile Sources */, + 6C79FBC5CFA36AC3EA6ABBD4 /* moc_dropdown.cpp in Compile Sources */, + 822C2860FBFAF3EAE42C5A3F /* moc_fileuploader.cpp in Compile Sources */, + 352349751855EF76DECA4D60 /* moc_historywidget.cpp in Compile Sources */, + 4B0036C794BEA27AF9419768 /* moc_layerwidget.cpp in Compile Sources */, + C14E6C902F6435B3149ECD64 /* moc_profilewidget.cpp in Compile Sources */, + 98E4F55DB5D8E64AB9F08C83 /* moc_localimageloader.cpp in Compile Sources */, + A24E4B5B683764E07683ECEC /* moc_mainwidget.cpp in Compile Sources */, + A469EC9C4C367E0B773A9BB7 /* moc_settingswidget.cpp in Compile Sources */, + FD2FE0C564A7389A2E609EC7 /* moc_sysbuttons.cpp in Compile Sources */, + E97B3CFAB59B49BACFFC5F7C /* moc_title.cpp in Compile Sources */, + 9A0D5DDC7816FC2538EB6A96 /* moc_window.cpp in Compile Sources */, + 06EABCC49D2EEE4076322BE7 /* moc_mtp.cpp in Compile Sources */, + 8F6F5D7F82036331E8C6DAE6 /* moc_mtpConnection.cpp in Compile Sources */, + B780F9E21269259B90A1F32A /* moc_mtpDC.cpp in Compile Sources */, + 2A500B102B7CE80F3EB6E13E /* moc_mtpFileLoader.cpp in Compile Sources */, + 9A523F51135FD4E2464673A6 /* moc_mtpSession.cpp in Compile Sources */, + C329997D36D34D568CE16C9A /* moc_animation.cpp in Compile Sources */, + B2F5B08BFFBBE7E37D3863BB /* moc_button.cpp in Compile Sources */, + B6F50D5FBFAEB16DD0E5B1C3 /* moc_countrycodeinput.cpp in Compile Sources */, + 6A8BC88AB464B92706EFE6FF /* moc_countryinput.cpp in Compile Sources */, + B0B88EFE444C0DE673389418 /* moc_flatbutton.cpp in Compile Sources */, + 1BD711B4C358EA7D727BF358 /* moc_flatcheckbox.cpp in Compile Sources */, + 565F748438E6CE0148C54AFE /* moc_flatinput.cpp in Compile Sources */, + 8B71D1C7BB9DCEE6511219C2 /* moc_flatlabel.cpp in Compile Sources */, + FCC949FEA178F9F5D7478027 /* moc_flattextarea.cpp in Compile Sources */, + 3A62C3A2FB56A83C9C3A3AFF /* moc_phoneinput.cpp in Compile Sources */, + 3F6EB1F5B98E704960FEA686 /* moc_scrollarea.cpp in Compile Sources */, + 60CB4898955209B665E7B07D /* moc_twidget.cpp in Compile Sources */, + 7062978F12EEA525893A5E6F /* moc_aboutbox.cpp in Compile Sources */, + E8B28580819B882A5964561A /* moc_addcontactbox.cpp in Compile Sources */, + AE148AA3BCDD25B1BBA4E6CA /* moc_addparticipantbox.cpp in Compile Sources */, + D6874C00733283846ACA9AB2 /* moc_confirmbox.cpp in Compile Sources */, + ED2557A57C6782721DC494AF /* moc_connectionbox.cpp in Compile Sources */, + 5FC914F652D1B16FDA8F0634 /* moc_contactsbox.cpp in Compile Sources */, + 49C3C1BF153F7FC078A25CE4 /* moc_downloadpathbox.cpp in Compile Sources */, + 9D294F23E02CFDF22C288382 /* moc_emojibox.cpp in Compile Sources */, + 0F0FC25286E16E5F78962FEE /* moc_newgroupbox.cpp in Compile Sources */, + 9809A3AF1946D51ACB41D716 /* moc_photocropbox.cpp in Compile Sources */, + AC6C131416AEC557C854BA70 /* moc_photosendbox.cpp in Compile Sources */, + 0F7872E39EA570249D420912 /* moc_intro.cpp in Compile Sources */, + 4F27F5F76AA3F78C8CA27339 /* moc_introcode.cpp in Compile Sources */, + 0250AB6761AC71A2E3155EEA /* moc_introphone.cpp in Compile Sources */, + 2EF5D0AC9A18F9FE9B8A1ACA /* moc_introsignup.cpp in Compile Sources */, + 8C4BA0DB55E2C40DE5F5E990 /* moc_pspecific_mac.cpp in Compile Sources */, + FA603B17F803E8D6B55C2F2B /* pspecific_mac_p.mm in Compile Sources */, + ); + name = "Compile Sources"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 07C3AF42194CCC510016CFF1 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 07C3AF39194CCC310016CFF1 /* Meta Compile */; + targetProxy = 07C3AF41194CCC510016CFF1 /* PBXContainerItemProxy */; + }; + 69BB0D15D494AAF597C8D2CF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 07AA07135D01069052F55A12 /* Preprocess */; + targetProxy = 07C3AF22194335970016CFF1 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 07C3AF3E194CCC310016CFF1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 0.5.1; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; + OBJROOT = ./../Mac/DebugIntermediate; + PRODUCT_NAME = "Preprocess copy"; + QT_LIBRARY_SUFFIX = _debug; + SDKROOT = macosx; + SYMROOT = ./../Mac; + }; + name = Debug; + }; + 07C3AF3F194CCC310016CFF1 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = YES; + CURRENT_PROJECT_VERSION = 0.5.1; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_OPTIMIZATION_LEVEL = fast; + GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; + LLVM_LTO = YES; + OBJROOT = ./../Mac/ReleaseIntermediate; + PRODUCT_NAME = "Preprocess copy"; + QT_LIBRARY_SUFFIX = ""; + SDKROOT = macosx; + SYMROOT = ./../Mac; + }; + name = Release; + }; + 339EE1B2CC4FC24589A0EA95 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = x86_64; + CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang; + COPY_PHASE_STRIP = YES; + DYLIB_COMPATIBILITY_VERSION = 0.5; + DYLIB_CURRENT_VERSION = 0.5.1; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_OPTIMIZATION_LEVEL = fast; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = SourceFiles/stdafx.h; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + 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, + ./SourceFiles, + ./GeneratedFiles, + ./../../Libraries/lzma/C, + "./../../Libraries/libexif-0.6.20", + "/usr/local/Qt-5.3.0/include", + "/usr/local/Qt-5.3.0/include/QtMultimedia", + "/usr/local/Qt-5.3.0/include/QtWidgets", + "/usr/local/Qt-5.3.0/include/QtNetwork", + "/usr/local/Qt-5.3.0/include/QtGui", + "/usr/local/Qt-5.3.0/include/QtCore", + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, + "/usr/local/Qt-5.3.0/mkspecs/macx-clang", + ); + INFOPLIST_FILE = Telegram.plist; + INSTALL_DIR = ./../Mac/Release/; + LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; + LIBRARY_SEARCH_PATHS = ( + /System/Library/Frameworks/, + "./../../Libraries/libexif-0.6.20/libexif/.libs", + "/usr/local/Qt-5.3.0/lib", + "/usr/local/Qt-5.3.0/plugins/mediaservice", + "/usr/local/Qt-5.3.0/plugins/audio", + "/usr/local/Qt-5.3.0/plugins/playlistformats", + "/usr/local/Qt-5.3.0/plugins/accessible", + "/usr/local/Qt-5.3.0/plugins/bearer", + "/usr/local/Qt-5.3.0/plugins/platforms", + "/usr/local/Qt-5.3.0/plugins/imageformats", + ); + MACOSX_DEPLOYMENT_TARGET = 10.7; + OBJROOT = ./../Mac/DebugIntermediate/; + OTHER_CFLAGS = ( + "-pipe", + "-g", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-D_DEBUG", + "-DQT_MULTIMEDIA_LIB", + "-DQT_WIDGETS_LIB", + "-DQT_NETWORK_LIB", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-pipe", + "-g", + "-std=c++11", + "-stdlib=libc++", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-D_DEBUG", + "-DQT_MULTIMEDIA_LIB", + "-DQT_WIDGETS_LIB", + "-DQT_NETWORK_LIB", + "-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/mediaservice", + "-L/usr/local/Qt-5.3.0/plugins/audio", + "-L/usr/local/Qt-5.3.0/plugins/playlistformats", + "-L/usr/local/Qt-5.3.0/plugins/accessible", + "-L/usr/local/Qt-5.3.0/plugins/bearer", + "-L/usr/local/Qt-5.3.0/plugins/platforms", + "-lcups", + "-L/usr/local/Qt-5.3.0/plugins/imageformats", + "-lz", + "-lm", + ); + PRODUCT_NAME = Telegram; + QT_LIBRARY_SUFFIX = ""; + SDKROOT = macosx; + SYMROOT = ./; + }; + name = Release; + }; + 3AA6C32AC930069E80220CF1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = x86_64; + CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + DYLIB_COMPATIBILITY_VERSION = 0.5; + DYLIB_CURRENT_VERSION = 0.5.1; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = SourceFiles/stdafx.h; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + 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, + ./SourceFiles, + ./GeneratedFiles, + ./../../Libraries/lzma/C, + "./../../Libraries/libexif-0.6.20", + "/usr/local/Qt-5.3.0/include", + "/usr/local/Qt-5.3.0/include/QtMultimedia", + "/usr/local/Qt-5.3.0/include/QtWidgets", + "/usr/local/Qt-5.3.0/include/QtNetwork", + "/usr/local/Qt-5.3.0/include/QtGui", + "/usr/local/Qt-5.3.0/include/QtCore", + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, + "/usr/local/Qt-5.3.0/mkspecs/macx-clang", + ); + INFOPLIST_FILE = Telegram.plist; + INSTALL_DIR = ./../Mac/Debug/; + LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; + LIBRARY_SEARCH_PATHS = ( + /System/Library/Frameworks/, + "./../../Libraries/libexif-0.6.20/libexif/.libs", + "/usr/local/Qt-5.3.0/lib", + "/usr/local/Qt-5.3.0/plugins/mediaservice", + "/usr/local/Qt-5.3.0/plugins/audio", + "/usr/local/Qt-5.3.0/plugins/playlistformats", + "/usr/local/Qt-5.3.0/plugins/accessible", + "/usr/local/Qt-5.3.0/plugins/bearer", + "/usr/local/Qt-5.3.0/plugins/platforms", + "/usr/local/Qt-5.3.0/plugins/imageformats", + ); + MACOSX_DEPLOYMENT_TARGET = 10.7; + OBJROOT = ./../Mac/DebugIntermediate/; + OTHER_CFLAGS = ( + "-pipe", + "-g", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-D_DEBUG", + "-DQT_MULTIMEDIA_LIB", + "-DQT_WIDGETS_LIB", + "-DQT_NETWORK_LIB", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-pipe", + "-g", + "-std=c++11", + "-stdlib=libc++", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-D_DEBUG", + "-DQT_MULTIMEDIA_LIB", + "-DQT_WIDGETS_LIB", + "-DQT_NETWORK_LIB", + "-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/mediaservice", + "-L/usr/local/Qt-5.3.0/plugins/audio", + "-L/usr/local/Qt-5.3.0/plugins/playlistformats", + "-L/usr/local/Qt-5.3.0/plugins/accessible", + "-L/usr/local/Qt-5.3.0/plugins/bearer", + "-L/usr/local/Qt-5.3.0/plugins/platforms", + "-lcups", + "-L/usr/local/Qt-5.3.0/plugins/imageformats", + "-lz", + "-lm", + ); + PRODUCT_NAME = Telegram; + QT_LIBRARY_SUFFIX = _debug; + SDKROOT = macosx; + SYMROOT = ./; + }; + name = Debug; + }; + 6666AA5E688052234F6758D8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = YES; + CURRENT_PROJECT_VERSION = 0.5.1; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_OPTIMIZATION_LEVEL = fast; + GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; + LLVM_LTO = YES; + OBJROOT = ./../Mac/ReleaseIntermediate; + PRODUCT_NAME = Telegram; + QT_LIBRARY_SUFFIX = ""; + SDKROOT = macosx; + SYMROOT = ./../Mac; + }; + name = Release; + }; + 77418F46922677BB04ED38DD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 0.5.1; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; + OBJROOT = ./../Mac/DebugIntermediate; + PRODUCT_NAME = Telegram; + QT_LIBRARY_SUFFIX = _debug; + SDKROOT = macosx; + SYMROOT = ./../Mac; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 07C3AF3D194CCC310016CFF1 /* Build configuration list for PBXAggregateTarget "Meta Compile" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 07C3AF3E194CCC310016CFF1 /* Debug */, + 07C3AF3F194CCC310016CFF1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "Telegram" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 77418F46922677BB04ED38DD /* Debug */, + 6666AA5E688052234F6758D8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "Telegram" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3AA6C32AC930069E80220CF1 /* Debug */, + 339EE1B2CC4FC24589A0EA95 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = 6DB9C3763D02B1415CD9D565 /* Project object */; +} diff --git a/Telegram/Telegram.xcodeproj/qt_preprocess.mak b/Telegram/Telegram.xcodeproj/qt_preprocess.mak new file mode 100644 index 000000000..aebaafdaf --- /dev/null +++ b/Telegram/Telegram.xcodeproj/qt_preprocess.mak @@ -0,0 +1,584 @@ +############################################################################# +# Makefile for building: ../Mac/Debug/Telegram.app/Contents/MacOS/Telegram +# Generated by qmake (3.0) (Qt 5.3.0) +# Project: Telegram.pro +# Template: app +# Command: /usr/local/Qt-5.3.0/bin/qmake -spec macx-xcode -o Telegram.xcodeproj/project.pbxproj Telegram.pro +############################################################################# + +MAKEFILE = project.pbxproj + +MOC = /usr/local/Qt-5.3.0/bin/moc +UIC = /usr/local/Qt-5.3.0/bin/uic +LEX = flex +LEXFLAGS = +YACC = yacc +YACCFLAGS = -d +DEFINES = -D_DEBUG -D_DEBUG -DQT_MULTIMEDIA_LIB -DQT_WIDGETS_LIB -DQT_NETWORK_LIB -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 -ISourceFiles -IGeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/qrc_telegram.cpp GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp\ + GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp\ + GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_mainwidget.cpp\ + GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp\ + GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp\ + GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp\ + GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp\ + GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp\ + GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp\ + GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp\ + GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_addparticipantbox.cpp\ + GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp\ + GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_newgroupbox.cpp\ + GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_intro.cpp\ + GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_introsignup.cpp\ + GeneratedFiles/Debug/moc_pspecific_mac.cpp +compiler_objective_c_make_all: +compiler_objective_c_clean: +compiler_no_pch_compiler_make_all: +compiler_no_pch_compiler_clean: +compiler_rcc_make_all: GeneratedFiles/qrc_telegram.cpp +compiler_rcc_clean: + -$(DEL_FILE) GeneratedFiles/qrc_telegram.cpp +GeneratedFiles/qrc_telegram.cpp: SourceFiles/telegram.qrc \ + SourceFiles/art/emoji.png \ + SourceFiles/art/blank.gif \ + SourceFiles/art/bg.png \ + SourceFiles/art/sprite_150x.png \ + SourceFiles/art/sprite.png \ + SourceFiles/art/iconround256.png \ + SourceFiles/art/emoji_150x.png \ + SourceFiles/art/bg_150x.png \ + SourceFiles/art/sprite_200x.png \ + SourceFiles/art/newmsg.wav \ + SourceFiles/art/ThoolikaTrditionalUnicode.ttf \ + SourceFiles/art/sprite_125x.png \ + SourceFiles/art/segoe_wp_semibold.ttf \ + SourceFiles/art/emoji_200x.png \ + SourceFiles/art/bg_200x.png \ + SourceFiles/art/emoji_125x.png \ + SourceFiles/art/segoe_ui.ttf \ + SourceFiles/art/bg_125x.png \ + SourceFiles/art/segoe_ui_semibold.ttf \ + SourceFiles/qmime/freedesktop.org.xml \ + SourceFiles/art/usercolor4.png \ + SourceFiles/art/chatcolor1.png \ + SourceFiles/art/usercolor8.png \ + SourceFiles/art/usercolor3.png \ + SourceFiles/art/usercolor7.png \ + SourceFiles/art/chatcolor4.png \ + SourceFiles/art/usercolor2.png \ + SourceFiles/art/usercolor6.png \ + SourceFiles/art/chatcolor3.png \ + SourceFiles/art/usercolor1.png \ + SourceFiles/art/usercolor5.png \ + SourceFiles/art/chatcolor2.png + /usr/local/Qt-5.3.0/bin/rcc -name telegram SourceFiles/telegram.qrc -o GeneratedFiles/qrc_telegram.cpp + +compiler_moc_header_make_all: GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_addparticipantbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_newgroupbox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp +compiler_moc_header_clean: + -$(DEL_FILE) GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_addparticipantbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_newgroupbox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp +GeneratedFiles/Debug/moc_application.cpp: ../../Libraries/QtStatic/qtbase/include/QtNetwork/QLocalSocket \ + ../../Libraries/QtStatic/qtbase/include/QtNetwork/QLocalServer \ + ../../Libraries/QtStatic/qtbase/include/QtNetwork/QNetworkReply \ + SourceFiles/window.h \ + SourceFiles/title.h \ + ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ + SourceFiles/sysbuttons.h \ + SourceFiles/gui/animation.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/gui/button.h \ + SourceFiles/gui/twidget.h \ + SourceFiles/pspecific.h \ + ../../Libraries/QtStatic/qtbase/include/QtWidgets/QMainWindow \ + SourceFiles/pspecific_mac.h \ + SourceFiles/pspecific_wnd.h \ + SourceFiles/gui/boxshadow.h \ + SourceFiles/application.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/application.h -o GeneratedFiles/Debug/moc_application.cpp + +GeneratedFiles/Debug/moc_dialogswidget.cpp: SourceFiles/dialogswidget.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/dialogswidget.h -o GeneratedFiles/Debug/moc_dialogswidget.cpp + +GeneratedFiles/Debug/moc_dropdown.cpp: SourceFiles/gui/twidget.h \ + SourceFiles/gui/boxshadow.h \ + SourceFiles/dropdown.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/dropdown.h -o GeneratedFiles/Debug/moc_dropdown.cpp + +GeneratedFiles/Debug/moc_fileuploader.cpp: SourceFiles/localimageloader.h \ + SourceFiles/fileuploader.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/fileuploader.h -o GeneratedFiles/Debug/moc_fileuploader.cpp + +GeneratedFiles/Debug/moc_historywidget.cpp: SourceFiles/localimageloader.h \ + SourceFiles/gui/boxshadow.h \ + SourceFiles/dropdown.h \ + SourceFiles/gui/twidget.h \ + SourceFiles/historywidget.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/historywidget.h -o GeneratedFiles/Debug/moc_historywidget.cpp + +GeneratedFiles/Debug/moc_layerwidget.cpp: SourceFiles/gui/boxshadow.h \ + SourceFiles/layerwidget.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/layerwidget.h -o GeneratedFiles/Debug/moc_layerwidget.cpp + +GeneratedFiles/Debug/moc_profilewidget.cpp: SourceFiles/profilewidget.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/profilewidget.h -o GeneratedFiles/Debug/moc_profilewidget.cpp + +GeneratedFiles/Debug/moc_localimageloader.cpp: SourceFiles/localimageloader.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/localimageloader.h -o GeneratedFiles/Debug/moc_localimageloader.cpp + +GeneratedFiles/Debug/moc_mainwidget.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ + SourceFiles/gui/flatbutton.h \ + SourceFiles/gui/button.h \ + SourceFiles/gui/twidget.h \ + SourceFiles/gui/flatcheckbox.h \ + SourceFiles/gui/animation.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/style.h \ + GeneratedFiles/style_classes.h \ + GeneratedFiles/style_auto.h \ + SourceFiles/dialogswidget.h \ + SourceFiles/historywidget.h \ + SourceFiles/localimageloader.h \ + SourceFiles/gui/boxshadow.h \ + SourceFiles/dropdown.h \ + SourceFiles/profilewidget.h \ + SourceFiles/mainwidget.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/mainwidget.h -o GeneratedFiles/Debug/moc_mainwidget.cpp + +GeneratedFiles/Debug/moc_settingswidget.cpp: SourceFiles/gui/flatbutton.h \ + SourceFiles/gui/button.h \ + ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ + SourceFiles/gui/twidget.h \ + SourceFiles/gui/flatcheckbox.h \ + SourceFiles/gui/animation.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/style.h \ + GeneratedFiles/style_classes.h \ + GeneratedFiles/style_auto.h \ + SourceFiles/sysbuttons.h \ + SourceFiles/settingswidget.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/settingswidget.h -o GeneratedFiles/Debug/moc_settingswidget.cpp + +GeneratedFiles/Debug/moc_sysbuttons.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ + SourceFiles/gui/animation.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/gui/button.h \ + SourceFiles/gui/twidget.h \ + SourceFiles/sysbuttons.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/sysbuttons.h -o GeneratedFiles/Debug/moc_sysbuttons.cpp + +GeneratedFiles/Debug/moc_title.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ + SourceFiles/sysbuttons.h \ + SourceFiles/gui/animation.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/gui/button.h \ + SourceFiles/gui/twidget.h \ + SourceFiles/title.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/title.h -o GeneratedFiles/Debug/moc_title.cpp + +GeneratedFiles/Debug/moc_window.cpp: SourceFiles/title.h \ + ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ + SourceFiles/sysbuttons.h \ + SourceFiles/gui/animation.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/gui/button.h \ + SourceFiles/gui/twidget.h \ + SourceFiles/pspecific.h \ + ../../Libraries/QtStatic/qtbase/include/QtWidgets/QMainWindow \ + ../../Libraries/QtStatic/qtbase/include/QtNetwork/QNetworkReply \ + SourceFiles/pspecific_mac.h \ + SourceFiles/pspecific_wnd.h \ + SourceFiles/gui/boxshadow.h \ + SourceFiles/window.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/window.h -o GeneratedFiles/Debug/moc_window.cpp + +GeneratedFiles/Debug/moc_mtp.cpp: SourceFiles/mtproto/mtpSession.h \ + SourceFiles/mtproto/mtpConnection.h \ + SourceFiles/mtproto/mtpCoreTypes.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + SourceFiles/mtproto/mtpScheme.h \ + SourceFiles/mtproto/mtpPublicRSA.h \ + SourceFiles/mtproto/mtpAuthKey.h \ + SourceFiles/mtproto/mtpDC.h \ + SourceFiles/mtproto/mtpRPC.h \ + SourceFiles/mtproto/mtpFileLoader.h \ + SourceFiles/mtproto/mtpSessionImpl.h \ + SourceFiles/mtproto/mtp.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/mtproto/mtp.h -o GeneratedFiles/Debug/moc_mtp.cpp + +GeneratedFiles/Debug/moc_mtpConnection.cpp: SourceFiles/mtproto/mtpCoreTypes.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + SourceFiles/mtproto/mtpScheme.h \ + SourceFiles/mtproto/mtpPublicRSA.h \ + SourceFiles/mtproto/mtpAuthKey.h \ + SourceFiles/mtproto/mtpConnection.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/mtproto/mtpConnection.h -o GeneratedFiles/Debug/moc_mtpConnection.cpp + +GeneratedFiles/Debug/moc_mtpDC.cpp: SourceFiles/mtproto/mtpDC.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/mtproto/mtpDC.h -o GeneratedFiles/Debug/moc_mtpDC.cpp + +GeneratedFiles/Debug/moc_mtpFileLoader.cpp: SourceFiles/mtproto/mtpFileLoader.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/mtproto/mtpFileLoader.h -o GeneratedFiles/Debug/moc_mtpFileLoader.cpp + +GeneratedFiles/Debug/moc_mtpSession.cpp: SourceFiles/mtproto/mtpConnection.h \ + SourceFiles/mtproto/mtpCoreTypes.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + SourceFiles/mtproto/mtpScheme.h \ + SourceFiles/mtproto/mtpPublicRSA.h \ + SourceFiles/mtproto/mtpAuthKey.h \ + SourceFiles/mtproto/mtpDC.h \ + SourceFiles/mtproto/mtpRPC.h \ + SourceFiles/mtproto/mtpSession.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/mtproto/mtpSession.h -o GeneratedFiles/Debug/moc_mtpSession.cpp + +GeneratedFiles/Debug/moc_animation.cpp: SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/gui/animation.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/gui/animation.h -o GeneratedFiles/Debug/moc_animation.cpp + +GeneratedFiles/Debug/moc_button.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ + SourceFiles/gui/twidget.h \ + SourceFiles/gui/button.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/gui/button.h -o GeneratedFiles/Debug/moc_button.cpp + +GeneratedFiles/Debug/moc_countrycodeinput.cpp: SourceFiles/gui/flatinput.h \ + ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ + SourceFiles/style.h \ + GeneratedFiles/style_classes.h \ + GeneratedFiles/style_auto.h \ + SourceFiles/gui/animation.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/gui/countrycodeinput.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/gui/countrycodeinput.h -o GeneratedFiles/Debug/moc_countrycodeinput.cpp + +GeneratedFiles/Debug/moc_countryinput.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ + SourceFiles/style.h \ + GeneratedFiles/style_classes.h \ + GeneratedFiles/style_auto.h \ + SourceFiles/gui/flatinput.h \ + ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ + SourceFiles/gui/animation.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/gui/scrollarea.h \ + ../../Libraries/QtStatic/qtbase/include/QtWidgets/QScrollArea \ + SourceFiles/gui/flatbutton.h \ + SourceFiles/gui/button.h \ + SourceFiles/gui/twidget.h \ + SourceFiles/gui/flatcheckbox.h \ + SourceFiles/gui/boxshadow.h \ + SourceFiles/gui/countryinput.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/gui/countryinput.h -o GeneratedFiles/Debug/moc_countryinput.cpp + +GeneratedFiles/Debug/moc_flatbutton.cpp: SourceFiles/gui/button.h \ + ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ + SourceFiles/gui/twidget.h \ + SourceFiles/gui/flatcheckbox.h \ + SourceFiles/gui/animation.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/style.h \ + GeneratedFiles/style_classes.h \ + GeneratedFiles/style_auto.h \ + SourceFiles/gui/flatbutton.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/gui/flatbutton.h -o GeneratedFiles/Debug/moc_flatbutton.cpp + +GeneratedFiles/Debug/moc_flatcheckbox.cpp: SourceFiles/gui/button.h \ + ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ + SourceFiles/gui/twidget.h \ + SourceFiles/gui/flatcheckbox.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/gui/flatcheckbox.h -o GeneratedFiles/Debug/moc_flatcheckbox.cpp + +GeneratedFiles/Debug/moc_flatinput.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ + SourceFiles/style.h \ + GeneratedFiles/style_classes.h \ + GeneratedFiles/style_auto.h \ + SourceFiles/gui/animation.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/gui/flatinput.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/gui/flatinput.h -o GeneratedFiles/Debug/moc_flatinput.cpp + +GeneratedFiles/Debug/moc_flatlabel.cpp: SourceFiles/style.h \ + GeneratedFiles/style_classes.h \ + GeneratedFiles/style_auto.h \ + SourceFiles/gui/flatlabel.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/gui/flatlabel.h -o GeneratedFiles/Debug/moc_flatlabel.cpp + +GeneratedFiles/Debug/moc_flattextarea.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QTextEdit \ + SourceFiles/style.h \ + GeneratedFiles/style_classes.h \ + GeneratedFiles/style_auto.h \ + SourceFiles/gui/animation.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/gui/flattextarea.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/gui/flattextarea.h -o GeneratedFiles/Debug/moc_flattextarea.cpp + +GeneratedFiles/Debug/moc_phoneinput.cpp: SourceFiles/gui/flatinput.h \ + ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ + SourceFiles/style.h \ + GeneratedFiles/style_classes.h \ + GeneratedFiles/style_auto.h \ + SourceFiles/gui/animation.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/gui/phoneinput.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/gui/phoneinput.h -o GeneratedFiles/Debug/moc_phoneinput.cpp + +GeneratedFiles/Debug/moc_scrollarea.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QScrollArea \ + SourceFiles/style.h \ + GeneratedFiles/style_classes.h \ + GeneratedFiles/style_auto.h \ + SourceFiles/gui/scrollarea.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/gui/scrollarea.h -o GeneratedFiles/Debug/moc_scrollarea.cpp + +GeneratedFiles/Debug/moc_twidget.cpp: SourceFiles/gui/twidget.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/gui/twidget.h -o GeneratedFiles/Debug/moc_twidget.cpp + +GeneratedFiles/Debug/moc_aboutbox.cpp: SourceFiles/layerwidget.h \ + SourceFiles/gui/boxshadow.h \ + SourceFiles/boxes/aboutbox.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/boxes/aboutbox.h -o GeneratedFiles/Debug/moc_aboutbox.cpp + +GeneratedFiles/Debug/moc_addcontactbox.cpp: SourceFiles/layerwidget.h \ + SourceFiles/gui/boxshadow.h \ + SourceFiles/boxes/addcontactbox.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/boxes/addcontactbox.h -o GeneratedFiles/Debug/moc_addcontactbox.cpp + +GeneratedFiles/Debug/moc_addparticipantbox.cpp: SourceFiles/layerwidget.h \ + SourceFiles/gui/boxshadow.h \ + SourceFiles/boxes/addparticipantbox.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/boxes/addparticipantbox.h -o GeneratedFiles/Debug/moc_addparticipantbox.cpp + +GeneratedFiles/Debug/moc_confirmbox.cpp: SourceFiles/layerwidget.h \ + SourceFiles/gui/boxshadow.h \ + SourceFiles/boxes/confirmbox.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/boxes/confirmbox.h -o GeneratedFiles/Debug/moc_confirmbox.cpp + +GeneratedFiles/Debug/moc_connectionbox.cpp: SourceFiles/layerwidget.h \ + SourceFiles/gui/boxshadow.h \ + SourceFiles/gui/phoneinput.h \ + SourceFiles/gui/flatinput.h \ + ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ + SourceFiles/style.h \ + GeneratedFiles/style_classes.h \ + GeneratedFiles/style_auto.h \ + SourceFiles/gui/animation.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/boxes/connectionbox.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/boxes/connectionbox.h -o GeneratedFiles/Debug/moc_connectionbox.cpp + +GeneratedFiles/Debug/moc_contactsbox.cpp: SourceFiles/layerwidget.h \ + SourceFiles/gui/boxshadow.h \ + SourceFiles/boxes/contactsbox.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/boxes/contactsbox.h -o GeneratedFiles/Debug/moc_contactsbox.cpp + +GeneratedFiles/Debug/moc_downloadpathbox.cpp: SourceFiles/layerwidget.h \ + SourceFiles/gui/boxshadow.h \ + SourceFiles/gui/phoneinput.h \ + SourceFiles/gui/flatinput.h \ + ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ + SourceFiles/style.h \ + GeneratedFiles/style_classes.h \ + GeneratedFiles/style_auto.h \ + SourceFiles/gui/animation.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/boxes/downloadpathbox.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/boxes/downloadpathbox.h -o GeneratedFiles/Debug/moc_downloadpathbox.cpp + +GeneratedFiles/Debug/moc_emojibox.cpp: SourceFiles/layerwidget.h \ + SourceFiles/gui/boxshadow.h \ + SourceFiles/boxes/emojibox.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/boxes/emojibox.h -o GeneratedFiles/Debug/moc_emojibox.cpp + +GeneratedFiles/Debug/moc_newgroupbox.cpp: SourceFiles/layerwidget.h \ + SourceFiles/gui/boxshadow.h \ + SourceFiles/boxes/newgroupbox.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/boxes/newgroupbox.h -o GeneratedFiles/Debug/moc_newgroupbox.cpp + +GeneratedFiles/Debug/moc_photocropbox.cpp: SourceFiles/layerwidget.h \ + SourceFiles/gui/boxshadow.h \ + SourceFiles/boxes/photocropbox.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/boxes/photocropbox.h -o GeneratedFiles/Debug/moc_photocropbox.cpp + +GeneratedFiles/Debug/moc_photosendbox.cpp: SourceFiles/layerwidget.h \ + SourceFiles/gui/boxshadow.h \ + SourceFiles/localimageloader.h \ + SourceFiles/boxes/photosendbox.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/boxes/photosendbox.h -o GeneratedFiles/Debug/moc_photosendbox.cpp + +GeneratedFiles/Debug/moc_intro.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ + SourceFiles/gui/flatbutton.h \ + SourceFiles/gui/button.h \ + SourceFiles/gui/twidget.h \ + SourceFiles/gui/flatcheckbox.h \ + SourceFiles/gui/animation.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/style.h \ + GeneratedFiles/style_classes.h \ + GeneratedFiles/style_auto.h \ + SourceFiles/intro/intro.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/intro/intro.h -o GeneratedFiles/Debug/moc_intro.cpp + +GeneratedFiles/Debug/moc_introcode.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ + SourceFiles/gui/flatbutton.h \ + SourceFiles/gui/button.h \ + SourceFiles/gui/twidget.h \ + SourceFiles/gui/flatcheckbox.h \ + SourceFiles/gui/animation.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/style.h \ + GeneratedFiles/style_classes.h \ + GeneratedFiles/style_auto.h \ + SourceFiles/gui/flatinput.h \ + ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ + SourceFiles/intro/intro.h \ + SourceFiles/intro/introcode.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/intro/introcode.h -o GeneratedFiles/Debug/moc_introcode.cpp + +GeneratedFiles/Debug/moc_introphone.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ + SourceFiles/gui/flatbutton.h \ + SourceFiles/gui/button.h \ + SourceFiles/gui/twidget.h \ + SourceFiles/gui/flatcheckbox.h \ + SourceFiles/gui/animation.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/style.h \ + GeneratedFiles/style_classes.h \ + GeneratedFiles/style_auto.h \ + SourceFiles/gui/phoneinput.h \ + SourceFiles/gui/flatinput.h \ + ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ + SourceFiles/gui/countrycodeinput.h \ + SourceFiles/gui/countryinput.h \ + SourceFiles/gui/scrollarea.h \ + ../../Libraries/QtStatic/qtbase/include/QtWidgets/QScrollArea \ + SourceFiles/gui/boxshadow.h \ + SourceFiles/intro/intro.h \ + SourceFiles/intro/introphone.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/intro/introphone.h -o GeneratedFiles/Debug/moc_introphone.cpp + +GeneratedFiles/Debug/moc_introsignup.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ + SourceFiles/gui/flatbutton.h \ + SourceFiles/gui/button.h \ + SourceFiles/gui/twidget.h \ + SourceFiles/gui/flatcheckbox.h \ + SourceFiles/gui/animation.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/style.h \ + GeneratedFiles/style_classes.h \ + GeneratedFiles/style_auto.h \ + SourceFiles/gui/flatinput.h \ + ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ + SourceFiles/intro/intro.h \ + SourceFiles/intro/introsignup.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/intro/introsignup.h -o GeneratedFiles/Debug/moc_introsignup.cpp + +GeneratedFiles/Debug/moc_pspecific_mac.cpp: SourceFiles/pspecific_mac.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./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -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/pspecific_mac.h -o GeneratedFiles/Debug/moc_pspecific_mac.cpp + +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_uic_make_all: +compiler_uic_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_rcc_clean compiler_moc_header_clean + diff --git a/Telegram/Telegram/Images.xcassets/AppIcon-2.appiconset/Contents.json b/Telegram/Telegram/Images.xcassets/AppIcon-2.appiconset/Contents.json new file mode 100644 index 000000000..50ab7bd32 --- /dev/null +++ b/Telegram/Telegram/Images.xcassets/AppIcon-2.appiconset/Contents.json @@ -0,0 +1,58 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "512x512" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "512x512" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Telegram/Telegram/Images.xcassets/AppIcon.appiconset/Contents.json b/Telegram/Telegram/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..15194319d --- /dev/null +++ b/Telegram/Telegram/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "icon_16x16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "icon_16x16@2x.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "icon_32x32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "icon_32x32@2x.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "icon_128x128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "icon_128x128@2x.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "icon_256x256.png", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "256x256", + "filename" : "icon_256x256@2x.png", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "512x512", + "filename" : "icon_512x512.png", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "512x512", + "filename" : "icon_512x512@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Telegram/Telegram/Images.xcassets/AppIcon.appiconset/icon_128x128.png b/Telegram/Telegram/Images.xcassets/AppIcon.appiconset/icon_128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..95c2e04ef3e79360cd24c84f98c005333a09ab51 GIT binary patch literal 4341 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 V&I!E+rBVO@002ovPDHLkV1kH+_HO_H literal 0 HcmV?d00001 diff --git a/Telegram/Telegram/Images.xcassets/AppIcon.appiconset/icon_16x16@2x.png b/Telegram/Telegram/Images.xcassets/AppIcon.appiconset/icon_16x16@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..57a9fd01b739754a30dfefee995f0572e532c75f GIT binary patch literal 1072 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 D1rPRS*^jpW!qmUaUdR^n&u#tzi&Z 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 Oqo$<&vf_o!yZ-}@DE}+~ literal 0 HcmV?d00001 diff --git a/Telegram/Telegram/Images.xcassets/AppIcon.appiconset/icon_32x32.png b/Telegram/Telegram/Images.xcassets/AppIcon.appiconset/icon_32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..57a9fd01b739754a30dfefee995f0572e532c75f GIT binary patch literal 1072 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 D1rPRS*^jpW!qmUaUdR^n&u#tzi&Z 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 Oqo$<&vf_o!yZ-}@DE}+~ literal 0 HcmV?d00001 diff --git a/Telegram/Telegram/Images.xcassets/AppIcon.appiconset/icon_512x512@2x.png b/Telegram/Telegram/Images.xcassets/AppIcon.appiconset/icon_512x512@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9b249bac3f5178f7b7db78a3c09dc3eba55a1e98 GIT binary patch literal 185360 zcmb@tbyQVR_b$BYF6nLo>25eQC?TPMq%_hYAuTN}NH++IAl==~5m1RkcO4oIaDa1B z-`~C8A9vjG{_*WG7@NVE?6ucib3OB!&s;nDxuyypHWfAi0C;MuiaG#*`tU0%fQkNa z3!>!=eYjz{sv3F#01ok=A0!|%n*so^wd@rXosBL#;cb$KRIr!xVCBT3WAhCJYCl1VV1AJ=wHmX2XBhWQLh*JY# z;sSiyQQ;f_svlrJ#LVmigk=CE%BT8LC!F62x1T(CDx*fKnMGVF#0Zny4MSg_hmL(h zjhvH2(ak-ybhGQg!pCKiM%+g6%?A!QO}?**ledRv_3$?V}q2m@2aH=#A9M z4q^g;Vt&YzDmm)&ZVIk0bee9og>IZ%bCEE4mcAZ&LV0YfU>bLGj`H{N>=ENtv`@@= ze}ZU*y0q;gl3nq6dR{c)OS=->yvEG!W^W6@LX{iBB!0~}ABAM`!GJj)lRP8*im_W2 z^-&B9!*CRdHq)~tVO4&e4|)tQRB2D8-I2v3jg?!HB!>Wj_qP#kD*P!SHQLfYaqAVD zzlc(WDHr1Wu=3>3Od!k8`r%$jB^@hLu>Iqk9l?BpjKUya*A4}SV4ou&&p@wywHOyx zvgK$sQ#tOp0jjE(zeJYVesR&0EeRqxeODAvxeHd}8SV8F4Y zto7kybin%-@is)b?{W3`oWIwT*7Q5t))?usuLa@?f=>nYYjw_2Y-BOk)7`GJJvFhm z*-O*T0zWK~9C561P?rd)H}hK?JCvoSr5b!w{igj*WxrkIJG3;Xq+O}i5FUarH~5sz zm`%ktVFE2@TX#-(u@t+MOha1Y;yX{7!)NM(Rz>el=hDOU+z!*=Ty>YyCExb#8=3&# zJH0!no6-vvTm$r4To!Z)?gWKYzp$H&6fN%{+jZz)>5LH zZ@Is1d#g?wh8w;%QdVuwqC>tnI5h;kwzVL)ZS4Qvdzjpw9MBRFcPEX37deOjjrJ97 zphulMiNs5ZrOb)!L)n1-^VD5lTLUm5cvf(|fq0ao&pt;tYg)yY+_u>x^eieS`q}$Y zo-`SrEb4*9q4tfZo)>N=tM8^Ra2x3N9A>JV-fzn`BBwLi|5V;T|WcbxPf5y&uSqX^sWz8H^E;hee zj#Mt;eZ~9D?g~b`p@YNt&UT?jQ=?%nX3y%!fkC2UbjWVE` z;R9A;n**O90N7SXEfqG zPri#dJ9aGJLeC=Ca@KIx{m9dKhfG|33nqHb!%NA&@;u^_NCl}!X^N#B%Mm{LLKe$< zO6<)VkL}w-+hfbbJ1H_5HLGC!giiBR^@+y2j|WL@!oDp1f}goIo5R??Cbp^LsV`

bG3Zap+j>2qaN7`zQ|qebn=4^<%^5h-doTv<6%4 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¨sroB~4u8Sjg(+#gzBakmI%3MF7 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 V&I!E+rBVO@002ovPDHLkV1kH+_HO_H literal 0 HcmV?d00001 diff --git a/Telegram/Telegram/Images.xcassets/Icon.iconset/icon_16x16@2x.png b/Telegram/Telegram/Images.xcassets/Icon.iconset/icon_16x16@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..57a9fd01b739754a30dfefee995f0572e532c75f GIT binary patch literal 1072 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 D1rPRS*^jpW!qmUaUdR^n&u#tzi&Z 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 Oqo$<&vf_o!yZ-}@DE}+~ literal 0 HcmV?d00001 diff --git a/Telegram/Telegram/Images.xcassets/Icon.iconset/icon_32x32.png b/Telegram/Telegram/Images.xcassets/Icon.iconset/icon_32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..57a9fd01b739754a30dfefee995f0572e532c75f GIT binary patch literal 1072 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 D1rPRS*^jpW!qmUaUdR^n&u#tzi&Z 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 Oqo$<&vf_o!yZ-}@DE}+~ literal 0 HcmV?d00001 diff --git a/Telegram/Telegram/Images.xcassets/Icon.iconset/icon_512x512@2x.png b/Telegram/Telegram/Images.xcassets/Icon.iconset/icon_512x512@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9b249bac3f5178f7b7db78a3c09dc3eba55a1e98 GIT binary patch literal 185360 zcmb@tbyQVR_b$BYF6nLo>25eQC?TPMq%_hYAuTN}NH++IAl==~5m1RkcO4oIaDa1B z-`~C8A9vjG{_*WG7@NVE?6ucib3OB!&s;nDxuyypHWfAi0C;MuiaG#*`tU0%fQkNa z3!>!=eYjz{sv3F#01ok=A0!|%n*so^wd@rXosBL#;cb$KRIr!xVCBT3WAhCJYCl1VV1AJ=wHmX2XBhWQLh*JY# z;sSiyQQ;f_svlrJ#LVmigk=CE%BT8LC!F62x1T(CDx*fKnMGVF#0Zny4MSg_hmL(h zjhvH2(ak-ybhGQg!pCKiM%+g6%?A!QO}?**ledRv_3$?V}q2m@2aH=#A9M z4q^g;Vt&YzDmm)&ZVIk0bee9og>IZ%bCEE4mcAZ&LV0YfU>bLGj`H{N>=ENtv`@@= ze}ZU*y0q;gl3nq6dR{c)OS=->yvEG!W^W6@LX{iBB!0~}ABAM`!GJj)lRP8*im_W2 z^-&B9!*CRdHq)~tVO4&e4|)tQRB2D8-I2v3jg?!HB!>Wj_qP#kD*P!SHQLfYaqAVD zzlc(WDHr1Wu=3>3Od!k8`r%$jB^@hLu>Iqk9l?BpjKUya*A4}SV4ou&&p@wywHOyx zvgK$sQ#tOp0jjE(zeJYVesR&0EeRqxeODAvxeHd}8SV8F4Y zto7kybin%-@is)b?{W3`oWIwT*7Q5t))?usuLa@?f=>nYYjw_2Y-BOk)7`GJJvFhm z*-O*T0zWK~9C561P?rd)H}hK?JCvoSr5b!w{igj*WxrkIJG3;Xq+O}i5FUarH~5sz zm`%ktVFE2@TX#-(u@t+MOha1Y;yX{7!)NM(Rz>el=hDOU+z!*=Ty>YyCExb#8=3&# zJH0!no6-vvTm$r4To!Z)?gWKYzp$H&6fN%{+jZz)>5LH zZ@Is1d#g?wh8w;%QdVuwqC>tnI5h;kwzVL)ZS4Qvdzjpw9MBRFcPEX37deOjjrJ97 zphulMiNs5ZrOb)!L)n1-^VD5lTLUm5cvf(|fq0ao&pt;tYg)yY+_u>x^eieS`q}$Y zo-`SrEb4*9q4tfZo)>N=tM8^Ra2x3N9A>JV-fzn`BBwLi|5V;T|WcbxPf5y&uSqX^sWz8H^E;hee zj#Mt;eZ~9D?g~b`p@YNt&UT?jQ=?%nX3y%!fkC2UbjWVE` z;R9A;n**O90N7SXEfqG zPri#dJ9aGJLeC=Ca@KIx{m9dKhfG|33nqHb!%NA&@;u^_NCl}!X^N#B%Mm{LLKe$< zO6<)VkL}w-+hfbbJ1H_5HLGC!giiBR^@+y2j|WL@!oDp1f}goIo5R??Cbp^LsV`

bG3Zap+j>2qaN7`zQ|qebn=4^<%^5h-doTv<6%4 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¨sroB~4u8Sjg(+#gzBakmI%3MF7 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 +#include +#include +#include +#include +#include +#include +#ifdef Q_OS_UNIX +# include +# include +#endif +#ifdef Q_OS_DARWIN +#include +#include +#endif + +QT_BEGIN_NAMESPACE + +//#define GENERATE_AGGREGRATE_SUBDIR + +// Note: this is fairly hacky, but it does the job... + +using namespace QMakeInternal; + +static QString qtSha1(const QByteArray &src) +{ + QByteArray digest = QCryptographicHash::hash(src, QCryptographicHash::Sha1); + return QString::fromLatin1(digest.toHex()); +} + +ProjectBuilderMakefileGenerator::ProjectBuilderMakefileGenerator() : UnixMakefileGenerator() +{ + +} + +bool +ProjectBuilderMakefileGenerator::writeMakefile(QTextStream &t) +{ + writingUnixMakefileGenerator = false; + if(!project->values("QMAKE_FAILED_REQUIREMENTS").isEmpty()) { + /* for now just dump, I need to generated an empty xml or something.. */ + fprintf(stderr, "Project file not generated because all requirements not met:\n\t%s\n", + var("QMAKE_FAILED_REQUIREMENTS").toLatin1().constData()); + return true; + } + + project->values("MAKEFILE").clear(); + project->values("MAKEFILE").append("Makefile"); + if(project->first("TEMPLATE") == "app" || project->first("TEMPLATE") == "lib") + return writeMakeParts(t); + else if(project->first("TEMPLATE") == "subdirs") + return writeSubDirs(t); + return false; +} + +struct ProjectBuilderSubDirs { + QMakeProject *project; + QString subdir; + bool autoDelete; + ProjectBuilderSubDirs(QMakeProject *p, QString s, bool a=true) : project(p), subdir(s), autoDelete(a) { } + ~ProjectBuilderSubDirs() { + if(autoDelete) + delete project; + } +}; + +bool +ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) +{ + if(project->isActiveConfig("generate_pbxbuild_makefile")) { + QString mkwrap = fileFixify(pbx_dir + Option::dir_sep + ".." + Option::dir_sep + project->first("MAKEFILE"), + qmake_getpwd()); + QFile mkwrapf(mkwrap); + if(mkwrapf.open(QIODevice::WriteOnly | QIODevice::Text)) { + debug_msg(1, "pbuilder: Creating file: %s", mkwrap.toLatin1().constData()); + QTextStream mkwrapt(&mkwrapf); + writingUnixMakefileGenerator = true; + UnixMakefileGenerator::writeSubDirs(mkwrapt); + writingUnixMakefileGenerator = false; + } + } + + //HEADER + const int pbVersion = pbuilderVersion(); + t << "// !$*UTF8*$!\n" + << "{\n" + << "\t" << writeSettings("archiveVersion", "1", SettingsNoQuote) << ";\n" + << "\tclasses = {\n\t};\n" + << "\t" << writeSettings("objectVersion", QString::number(pbVersion), SettingsNoQuote) << ";\n" + << "\tobjects = {\n"; + + //SUBDIRS + QList pb_subdirs; + pb_subdirs.append(new ProjectBuilderSubDirs(project, QString(), false)); + QString oldpwd = qmake_getpwd(); + QString oldoutpwd = Option::output_dir; + QMap groups; + for(int pb_subdir = 0; pb_subdir < pb_subdirs.size(); ++pb_subdir) { + ProjectBuilderSubDirs *pb = pb_subdirs[pb_subdir]; + const ProStringList &subdirs = pb->project->values("SUBDIRS"); + for(int subdir = 0; subdir < subdirs.count(); subdir++) { + ProString tmpk = subdirs[subdir]; + const ProKey fkey(tmpk + ".file"); + if (!pb->project->isEmpty(fkey)) { + tmpk = pb->project->first(fkey); + } else { + const ProKey skey(tmpk + ".subdir"); + if (!pb->project->isEmpty(skey)) + tmpk = pb->project->first(skey); + } + QString tmp = tmpk.toQString(); + if(fileInfo(tmp).isRelative() && !pb->subdir.isEmpty()) { + QString subdir = pb->subdir; + if(!subdir.endsWith(Option::dir_sep)) + subdir += Option::dir_sep; + tmp = subdir + tmp; + } + QFileInfo fi(fileInfo(Option::fixPathToLocalOS(tmp, true))); + if(fi.exists()) { + if(fi.isDir()) { + QString profile = tmp; + if(!profile.endsWith(Option::dir_sep)) + profile += Option::dir_sep; + profile += fi.baseName() + Option::pro_ext; + fi = QFileInfo(profile); + } + QMakeProject tmp_proj; + QString dir = fi.path(), fn = fi.fileName(); + if(!dir.isEmpty()) { + if(!qmake_setpwd(dir)) + fprintf(stderr, "Cannot find directory: %s\n", dir.toLatin1().constData()); + } + Option::output_dir = Option::globals->shadowedPath(QDir::cleanPath(fi.absoluteFilePath())); + if(tmp_proj.read(fn)) { + if(tmp_proj.first("TEMPLATE") == "subdirs") { + QMakeProject *pp = new QMakeProject(&tmp_proj); + pb_subdirs += new ProjectBuilderSubDirs(pp, dir); + } else if(tmp_proj.first("TEMPLATE") == "app" || tmp_proj.first("TEMPLATE") == "lib") { + QString pbxproj = qmake_getpwd() + Option::dir_sep + tmp_proj.first("TARGET") + projectSuffix(); + if(!exists(pbxproj)) { + warn_msg(WarnLogic, "Ignored (not found) '%s'", pbxproj.toLatin1().constData()); + goto nextfile; // # Dirty! + } + const QString project_key = keyFor(pbxproj + "_PROJECTREF"); + project->values("QMAKE_PBX_SUBDIRS") += pbxproj; + //PROJECTREF + { + bool in_root = true; + QString name = qmake_getpwd(); + if(project->isActiveConfig("flat")) { + QString flat_file = fileFixify(name, oldpwd, oldoutpwd, FileFixifyRelative); + if(flat_file.indexOf(Option::dir_sep) != -1) { + QStringList dirs = flat_file.split(Option::dir_sep); + name = dirs.back(); + } + } else { + QString flat_file = fileFixify(name, oldpwd, oldoutpwd, FileFixifyRelative); + if(QDir::isRelativePath(flat_file) && flat_file.indexOf(Option::dir_sep) != -1) { + QString last_grp("QMAKE_SUBDIR_PBX_HEIR_GROUP"); + QStringList dirs = flat_file.split(Option::dir_sep); + name = dirs.back(); + for(QStringList::Iterator dir_it = dirs.begin(); dir_it != dirs.end(); ++dir_it) { + QString new_grp(last_grp + Option::dir_sep + (*dir_it)), new_grp_key(keyFor(new_grp)); + if(dir_it == dirs.begin()) { + if(!groups.contains(new_grp)) + project->values("QMAKE_SUBDIR_PBX_GROUPS").append(new_grp_key); + } else { + if(!groups[last_grp].contains(new_grp_key)) + groups[last_grp] += new_grp_key; + } + last_grp = new_grp; + } + groups[last_grp] += project_key; + in_root = false; + } + } + if(in_root) + project->values("QMAKE_SUBDIR_PBX_GROUPS") += project_key; + t << "\t\t" << project_key << " = {\n" + << "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("lastKnownFileType", "wrapper.pb-project") << ";\n" + << "\t\t\t" << writeSettings("name", escapeFilePath(tmp_proj.first("TARGET") + projectSuffix())) << ";\n" + << "\t\t\t" << writeSettings("path", pbxproj) << ";\n" + << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" + << "\t\t};\n"; + //WRAPPER + t << "\t\t" << keyFor(pbxproj + "_WRAPPER") << " = {\n" + << "\t\t\t" << writeSettings("isa", "PBXReferenceProxy", SettingsNoQuote) << ";\n"; + if(tmp_proj.first("TEMPLATE") == "app") { + t << "\t\t\t" << writeSettings("fileType", "wrapper.application") << ";\n" + << "\t\t\t" << writeSettings("path", tmp_proj.first("TARGET") + ".app") << ";\n"; + } else { + t << "\t\t\t" << writeSettings("fileType", "compiled.mach-o.dylib") << ";\n" + << "\t\t\t" << writeSettings("path", tmp_proj.first("TARGET") + ".dylib") << ";\n"; + } + t << "\t\t\t" << writeSettings("remoteRef", keyFor(pbxproj + "_WRAPPERREF")) << ";\n" + << "\t\t\t" << writeSettings("sourceTree", "BUILT_PRODUCTS_DIR", SettingsNoQuote) << ";\n" + << "\t\t};\n"; + t << "\t\t" << keyFor(pbxproj + "_WRAPPERREF") << " = {\n" + << "\t\t\t" << writeSettings("containerPortal", project_key) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXContainerItemProxy", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("proxyType", "2") << ";\n" +// << "\t\t\t" << writeSettings("remoteGlobalIDString", keyFor(pbxproj + "QMAKE_PBX_REFERENCE")) << ";\n" + << "\t\t\t" << writeSettings("remoteGlobalIDString", keyFor(pbxproj + "QMAKE_PBX_REFERENCE!!!")) << ";\n" + << "\t\t\t" << writeSettings("remoteInfo", tmp_proj.first("TARGET")) << ";\n" + << "\t\t};\n"; + //PRODUCTGROUP + t << "\t\t" << keyFor(pbxproj + "_PRODUCTGROUP") << " = {\n" + << "\t\t\t" << writeSettings("children", project->values(ProKey(pbxproj + "_WRAPPER")), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("name", "Products") << ";\n" + << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" + << "\t\t};\n"; + } +#ifdef GENERATE_AGGREGRATE_SUBDIR + //TARGET (for aggregate) + { + //container + const QString container_proxy = keyFor(pbxproj + "_CONTAINERPROXY"); + t << "\t\t" << container_proxy << " = {\n" + << "\t\t\t" << writeSettings("containerPortal", project_key) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXContainerItemProxy", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("proxyType", "1") << ";\n" + << "\t\t\t" << writeSettings("remoteGlobalIDString", keyFor(pbxproj + "QMAKE_PBX_TARGET")) << ";\n" + << "\t\t\t" << writeSettings("remoteInfo", tmp_proj.first("TARGET")) << ";\n" + << "\t\t};\n"; + //targetref + t << "\t\t" << keyFor(pbxproj + "_TARGETREF") << " = {\n" + << "\t\t\t" << writeSettings("isa", "PBXTargetDependency", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("name", fixForOutput(tmp_proj.first("TARGET") +" (from " + tmp_proj.first("TARGET") + projectSuffix() + ")")) << ";\n" + << "\t\t\t" << writeSettings("targetProxy", container_proxy) << ";\n" + << "\t\t};\n"; + } +#endif + } + } + nextfile: + qmake_setpwd(oldpwd); + Option::output_dir = oldoutpwd; + } + } + } + qDeleteAll(pb_subdirs); + pb_subdirs.clear(); + + for (QMap::Iterator grp_it = groups.begin(); grp_it != groups.end(); ++grp_it) { + t << "\t\t" << keyFor(grp_it.key()) << " = {\n" + << "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("children", grp_it.value(), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("name", escapeFilePath(grp_it.key().section(Option::dir_sep, -1))) << ";\n" + << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" + << "\t\t};\n"; + } + + //DUMP EVERYTHING THAT TIES THE ABOVE TOGETHER + //BUILDCONFIGURATIONS + QString defaultConfig; + for(int as_release = 0; as_release < 2; as_release++) + { + QString configName = (as_release ? "Release" : "Debug"); + + QMap settings; + settings.insert("COPY_PHASE_STRIP", (as_release ? "YES" : "NO")); + if(as_release) + settings.insert("GCC_GENERATE_DEBUGGING_SYMBOLS", "NO"); + if(project->isActiveConfig("sdk") && !project->isEmpty("QMAKE_MAC_SDK")) + settings.insert("SDKROOT", project->first("QMAKE_MAC_SDK").toQString()); + { + const ProStringList &l = project->values("QMAKE_MAC_XCODE_SETTINGS"); + for(int i = 0; i < l.size(); ++i) { + ProString name = l.at(i); + const ProKey buildKey(name + ".build"); + if (!project->isEmpty(buildKey)) { + const QString build = project->values(buildKey).first().toQString(); + if (build.toLower() != configName.toLower()) + continue; + } + const ProKey nkey(name + ".name"); + if (!project->isEmpty(nkey)) + name = project->first(nkey); + const QString value = project->values(ProKey(name + ".value")).join(QString(Option::field_sep)); + settings.insert(name.toQString(), value); + } + } + + if (project->isActiveConfig("debug") != (bool)as_release) + defaultConfig = configName; + QString key = keyFor("QMAKE_SUBDIR_PBX_BUILDCONFIG_" + configName); + project->values("QMAKE_SUBDIR_PBX_BUILDCONFIGS").append(key); + t << "\t\t" << key << " = {\n" + << "\t\t\t" << writeSettings("isa", "XCBuildConfiguration", SettingsNoQuote) << ";\n" + << "\t\t\tbuildSettings = {\n"; + for (QMap::Iterator set_it = settings.begin(); set_it != settings.end(); ++set_it) + t << "\t\t\t\t" << writeSettings(set_it.key(), set_it.value()) << ";\n"; + t << "\t\t\t};\n" + << "\t\t\t" << writeSettings("name", configName) << ";\n" + << "\t\t};\n"; + } + t << "\t\t" << keyFor("QMAKE_SUBDIR_PBX_BUILDCONFIG_LIST") << " = {\n" + << "\t\t\t" << writeSettings("isa", "XCConfigurationList", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("buildConfigurations", project->values("QMAKE_SUBDIR_PBX_BUILDCONFIGS"), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("defaultConfigurationIsVisible", "0", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("defaultConfigurationName", defaultConfig, SettingsNoQuote) << ";\n" + << "\t\t};\n"; + +#ifdef GENERATE_AGGREGRATE_SUBDIR + //target + t << "\t\t" << keyFor("QMAKE_SUBDIR_PBX_AGGREGATE_TARGET") << " = {\n" + << "\t\t\t" << writeSettings("buildPhases", ProStringList(), SettingsAsList, 4) << ";\n" + << "\t\t\tbuildSettings = {\n" + << "\t\t\t\t" << writeSettings("PRODUCT_NAME", project->values("TARGET").first()) << ";\n" + << "\t\t\t};\n"; + { + ProStringList dependencies; + const ProStringList &qmake_subdirs = project->values("QMAKE_PBX_SUBDIRS"); + for(int i = 0; i < qmake_subdirs.count(); i++) + dependencies += keyFor(qmake_subdirs[i] + "_TARGETREF"); + t << "\t\t\t" << writeSettings("dependencies", dependencies, SettingsAsList, 4) << ";\n" + } + t << "\t\t\t" << writeSettings("isa", "PBXAggregateTarget", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("name", project->values("TARGET").first()) << ";\n" + << "\t\t\t" << writeSettings("productName", project->values("TARGET").first()) << ";\n" + << "\t\t};\n"; +#endif + + //ROOT_GROUP + t << "\t\t" << keyFor("QMAKE_SUBDIR_PBX_ROOT_GROUP") << " = {\n" + << "\t\t\t" << writeSettings("children", project->values("QMAKE_SUBDIR_PBX_GROUPS"), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" + << "\t\t};\n"; + + + //ROOT + t << "\t\t" << keyFor("QMAKE_SUBDIR_PBX_ROOT") << " = {\n" + << "\t\t\tbuildSettings = {\n" + << "\t\t\t};\n" + << "\t\t\t" << writeSettings("buildStyles", project->values("QMAKE_SUBDIR_PBX_BUILDSTYLES"), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXProject", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("mainGroup", keyFor("QMAKE_SUBDIR_PBX_ROOT_GROUP")) << ";\n" + << "\t\t\t" << writeSettings("projectDirPath", ProStringList()) << ";\n"; + t << "\t\t\t" << writeSettings("buildConfigurationList", keyFor("QMAKE_SUBDIR_PBX_BUILDCONFIG_LIST")) << ";\n"; + t << "\t\t\tprojectReferences = (\n"; + { + const ProStringList &qmake_subdirs = project->values("QMAKE_PBX_SUBDIRS"); + for(int i = 0; i < qmake_subdirs.count(); i++) { + const ProString &subdir = qmake_subdirs[i]; + t << "\t\t\t\t{\n" + << "\t\t\t\t\t" << writeSettings("ProductGroup", keyFor(subdir + "_PRODUCTGROUP")) << ";\n" + << "\t\t\t\t\t" << writeSettings("ProjectRef", keyFor(subdir + "_PROJECTREF")) << ";\n" + << "\t\t\t\t},\n"; + } + } + t << "\t\t\t);\n" + << "\t\t\t" << writeSettings("targets", +#ifdef GENERATE_AGGREGRATE_SUBDIR + project->values("QMAKE_SUBDIR_AGGREGATE_TARGET"), +#else + ProStringList(), +#endif + SettingsAsList, 4) << ";\n" + << "\t\t};\n"; + + //FOOTER + t << "\t};\n" + << "\t" << writeSettings("rootObject", keyFor("QMAKE_SUBDIR_PBX_ROOT")) << ";\n" + << "}\n"; + + return true; +} + +class ProjectBuilderSources +{ + bool buildable, object_output; + QString key, group, compiler; +public: + ProjectBuilderSources(const QString &key, bool buildable=false, const QString &group=QString(), const QString &compiler=QString(), bool producesObject=false); + QStringList files(QMakeProject *project) const; + inline bool isBuildable() const { return buildable; } + inline QString keyName() const { return key; } + inline QString groupName() const { return group; } + inline QString compilerName() const { return compiler; } + inline bool isObjectOutput(const QString &file) const { + bool ret = object_output; + for(int i = 0; !ret && i < Option::c_ext.size(); ++i) { + if(file.endsWith(Option::c_ext.at(i))) { + ret = true; + break; + } + } + for(int i = 0; !ret && i < Option::cpp_ext.size(); ++i) { + if(file.endsWith(Option::cpp_ext.at(i))) { + ret = true; + break; + } + } + return ret; + } +}; + +ProjectBuilderSources::ProjectBuilderSources(const QString &k, bool b, + const QString &g, const QString &c, bool o) : buildable(b), object_output(o), key(k), group(g), compiler(c) +{ + // Override group name for a few common keys + if (k == "SOURCES" || k == "OBJECTIVE_SOURCES" || k == "HEADERS") + group = "Sources"; + else if (k == "QMAKE_INTERNAL_INCLUDED_FILES") + group = "Supporting Files"; + else if (k == "GENERATED_SOURCES" || k == "GENERATED_FILES") + group = "Generated Sources"; + else if (k == "RESOURCES") + group = "Resources"; + else if (group.isNull()) + group = QString("Sources [") + c + "]"; +} + +QStringList +ProjectBuilderSources::files(QMakeProject *project) const +{ + QStringList ret = project->values(ProKey(key)).toQStringList(); + if(key == "QMAKE_INTERNAL_INCLUDED_FILES") { + QStringList newret; + for(int i = 0; i < ret.size(); ++i) { + if(!ret.at(i).endsWith(Option::prf_ext)) + newret.append(ret.at(i)); + } + ret = newret; + } + if(key == "SOURCES" && project->first("TEMPLATE") == "app" && !project->isEmpty("ICON")) + ret.append(project->first("ICON").toQString()); + return ret; +} + +static QString xcodeFiletypeForFilename(const QString &filename) +{ + foreach (const QString &ext, Option::cpp_ext) { + if (filename.endsWith(ext)) + return QStringLiteral("sourcecode.cpp.cpp"); + } + + foreach (const QString &ext, Option::c_ext) { + if (filename.endsWith(ext)) + return QStringLiteral("sourcecode.c.c"); + } + + foreach (const QString &ext, Option::h_ext) { + if (filename.endsWith(ext)) + return "sourcecode.c.h"; + } + + if (filename.endsWith(QStringLiteral(".mm"))) + return QStringLiteral("sourcecode.cpp.objcpp"); + if (filename.endsWith(QStringLiteral(".m"))) + return QStringLiteral("sourcecode.c.objc"); + if (filename.endsWith(QStringLiteral(".framework"))) + return QStringLiteral("wrapper.framework"); + if (filename.endsWith(QStringLiteral(".a"))) + return QStringLiteral("archive.ar"); + if (filename.endsWith(QStringLiteral(".pro")) || filename.endsWith(QStringLiteral(".qrc"))) + return QStringLiteral("text"); + + return QString(); +} + +bool +ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) +{ + // The code in this function assumes that the current directory matches + // the output directory, which is not actually the case when we are called + // from the generic generator code. Instead of changing every single + // assumption and fileFixify we cheat by moving into the output directory + // for the duration of this function. + QString input_dir = qmake_getpwd(); + qmake_setpwd(Option::output_dir); + + ProStringList tmp; + bool did_preprocess = false; + + //HEADER + const int pbVersion = pbuilderVersion(); + ProStringList buildConfigGroups; + buildConfigGroups << "PROJECT" << "TARGET"; + + t << "// !$*UTF8*$!\n" + << "{\n" + << "\t" << writeSettings("archiveVersion", "1", SettingsNoQuote) << ";\n" + << "\tclasses = {\n\t};\n" + << "\t" << writeSettings("objectVersion", QString::number(pbVersion), SettingsNoQuote) << ";\n" + << "\tobjects = {\n"; + + //MAKE QMAKE equivelant + if (!project->isActiveConfig("no_autoqmake")) { + QString mkfile = pbx_dir + Option::dir_sep + "qt_makeqmake.mak"; + QFile mkf(mkfile); + if(mkf.open(QIODevice::WriteOnly | QIODevice::Text)) { + writingUnixMakefileGenerator = true; + qmake_setpwd(input_dir); // Makefile generation assumes input_dir as pwd + debug_msg(1, "pbuilder: Creating file: %s", mkfile.toLatin1().constData()); + QTextStream mkt(&mkf); + writeHeader(mkt); + mkt << "QMAKE = " << var("QMAKE_QMAKE") << endl; + writeMakeQmake(mkt); + mkt.flush(); + mkf.close(); + writingUnixMakefileGenerator = false; + qmake_setpwd(Option::output_dir); + } + QString phase_key = keyFor("QMAKE_PBX_MAKEQMAKE_BUILDPHASE"); + mkfile = fileFixify(mkfile, qmake_getpwd()); + project->values("QMAKE_PBX_PRESCRIPT_BUILDPHASES").append(phase_key); + t << "\t\t" << phase_key << " = {\n" + << "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("files", ProStringList(), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXShellScriptBuildPhase", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("name", "Qt Qmake") << ";\n" + << "\t\t\t" << writeSettings("shellPath", "/bin/sh") << ";\n" + << "\t\t\t" << writeSettings("shellScript", "make -C " + IoUtils::shellQuoteUnix(qmake_getpwd()) + " -f " + IoUtils::shellQuoteUnix(mkfile)) << ";\n" + << "\t\t};\n"; + } + + // FIXME: Move all file resolving logic out of ProjectBuilderSources::files(), as it + // doesn't have access to any of the information it needs to resolve relative paths. + project->values("QMAKE_INTERNAL_INCLUDED_FILES").prepend(fileFixify(project->projectFile(), qmake_getpwd(), input_dir)); + + //DUMP SOURCES + QMap groups; + QList sources; + sources.append(ProjectBuilderSources("SOURCES", true)); + sources.append(ProjectBuilderSources("GENERATED_SOURCES", true)); + sources.append(ProjectBuilderSources("GENERATED_FILES")); + sources.append(ProjectBuilderSources("HEADERS")); + sources.append(ProjectBuilderSources("QMAKE_INTERNAL_INCLUDED_FILES")); + if(!project->isEmpty("QMAKE_EXTRA_COMPILERS")) { + const ProStringList &quc = project->values("QMAKE_EXTRA_COMPILERS"); + for (ProStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it) { + if (project->isEmpty(ProKey(*it + ".output"))) + continue; + ProStringList &inputs = project->values(ProKey(*it + ".input")); + int input = 0; + while (input < inputs.size()) { + if (project->isEmpty(inputs.at(input).toKey())) { + ++input; + continue; + } + bool duplicate = false; + bool isObj = project->values(ProKey(*it + ".CONFIG")).indexOf("no_link") == -1; + if (!isObj) { + for (int i = 0; i < sources.size(); ++i) { + if (sources.at(i).keyName() == inputs.at(input)) { + duplicate = true; + break; + } + } + } + if (!duplicate) { + const ProStringList &outputs = project->values(ProKey(*it + ".variable_out")); + for(int output = 0; output < outputs.size(); ++output) { + if(outputs.at(output) != "OBJECT") { + isObj = false; + break; + } + } + sources.append(ProjectBuilderSources(inputs.at(input).toQString(), true, + QString(), (*it).toQString(), isObj)); + + if (isObj) { + inputs.removeAt(input); + continue; + } + } + + ++input; + } + } + } + for(int source = 0; source < sources.size(); ++source) { + ProStringList &src_list = project->values(ProKey("QMAKE_PBX_" + sources.at(source).keyName())); + ProStringList &root_group_list = project->values("QMAKE_PBX_GROUPS"); + + const QStringList &files = fileFixify(sources.at(source).files(project)); + for(int f = 0; f < files.count(); ++f) { + QString file = files[f]; + if(file.length() >= 2 && (file[0] == '"' || file[0] == '\'') && file[(int) file.length()-1] == file[0]) + file = file.mid(1, file.length()-2); + if(!sources.at(source).compilerName().isNull() && + !verifyExtraCompiler(sources.at(source).compilerName(), file)) + continue; + if(file.endsWith(Option::prl_ext)) + continue; + + bool in_root = true; + QString src_key = keyFor(file), name = file; + if(project->isActiveConfig("flat")) { + QString flat_file = fileFixify(file, qmake_getpwd(), Option::output_dir, FileFixifyRelative); + if(flat_file.indexOf(Option::dir_sep) != -1) { + QStringList dirs = flat_file.split(Option::dir_sep); + name = dirs.back(); + } + } else { + QString flat_file = fileFixify(file, qmake_getpwd(), Option::output_dir, FileFixifyRelative); + if(QDir::isRelativePath(flat_file) && flat_file.indexOf(Option::dir_sep) != -1) { + QString last_grp("QMAKE_PBX_" + sources.at(source).groupName() + "_HEIR_GROUP"); + QStringList dirs = flat_file.split(Option::dir_sep); + name = dirs.back(); + dirs.pop_back(); //remove the file portion as it will be added via src_key + for(QStringList::Iterator dir_it = dirs.begin(); dir_it != dirs.end(); ++dir_it) { + QString new_grp(last_grp + Option::dir_sep + (*dir_it)), new_grp_key(keyFor(new_grp)); + if(dir_it == dirs.begin()) { + if(!src_list.contains(new_grp_key)) + src_list.append(new_grp_key); + } else { + if(!groups[last_grp].contains(new_grp_key)) + groups[last_grp] += new_grp_key; + } + last_grp = new_grp; + } + if (groups[last_grp].contains(src_key)) + continue; + groups[last_grp] += src_key; + in_root = false; + } + } + if (in_root) { + if (src_list.contains(src_key)) + continue; + src_list.append(src_key); + } + //source reference + t << "\t\t" << src_key << " = {\n" + << "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("path", escapeFilePath(file)) << ";\n"; + if (name != file) + t << "\t\t\t" << writeSettings("name", escapeFilePath(name)) << ";\n"; + t << "\t\t\t" << writeSettings("sourceTree", sourceTreeForFile(file)) << ";\n"; + QString filetype = xcodeFiletypeForFilename(file); + if (!filetype.isNull()) + t << "\t\t\t" << writeSettings("lastKnownFileType", filetype) << ";\n"; + t << "\t\t};\n"; + if (sources.at(source).isBuildable() && sources.at(source).isObjectOutput(file)) { //build reference + QString build_key = keyFor(file + ".BUILDABLE"); + t << "\t\t" << build_key << " = {\n" + << "\t\t\t" << writeSettings("fileRef", src_key) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXBuildFile", SettingsNoQuote) << ";\n" + << "\t\t\tsettings = {\n" + << "\t\t\t\t" << writeSettings("ATTRIBUTES", ProStringList(), SettingsAsList, 5) << ";\n" + << "\t\t\t};\n" + << "\t\t};\n"; + project->values("QMAKE_PBX_OBJ").append(build_key); + } + } + if(!src_list.isEmpty()) { + QString group_key = keyFor(sources.at(source).groupName()); + if(root_group_list.indexOf(group_key) == -1) + root_group_list += group_key; + + ProStringList &group = groups[sources.at(source).groupName()]; + for(int src = 0; src < src_list.size(); ++src) { + if(group.indexOf(src_list.at(src)) == -1) + group += src_list.at(src); + } + } + } + for (QMap::Iterator grp_it = groups.begin(); grp_it != groups.end(); ++grp_it) { + t << "\t\t" << keyFor(grp_it.key()) << " = {\n" + << "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("children", grp_it.value(), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("name", escapeFilePath(grp_it.key().section(Option::dir_sep, -1))) << ";\n" + << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" + << "\t\t};\n"; + } + + //PREPROCESS BUILDPHASE (just a makefile) + { + QString mkfile = pbx_dir + Option::dir_sep + "qt_preprocess.mak"; + QFile mkf(mkfile); + if(mkf.open(QIODevice::WriteOnly | QIODevice::Text)) { + writingUnixMakefileGenerator = true; + did_preprocess = true; + debug_msg(1, "pbuilder: Creating file: %s", mkfile.toLatin1().constData()); + QTextStream mkt(&mkf); + writeHeader(mkt); + mkt << "MOC = " << Option::fixPathToTargetOS(var("QMAKE_MOC")) << endl; + mkt << "UIC = " << Option::fixPathToTargetOS(var("QMAKE_UIC")) << endl; + mkt << "LEX = " << var("QMAKE_LEX") << endl; + mkt << "LEXFLAGS = " << var("QMAKE_LEXFLAGS") << endl; + mkt << "YACC = " << var("QMAKE_YACC") << endl; + mkt << "YACCFLAGS = " << var("QMAKE_YACCFLAGS") << endl; + mkt << "DEFINES = " + << varGlue("PRL_EXPORT_DEFINES","-D"," -D"," ") + << varGlue("DEFINES","-D"," -D","") << endl; + mkt << "INCPATH = -I" << specdir(); + if(!project->isActiveConfig("no_include_pwd")) { + QString pwd = escapeFilePath(fileFixify(qmake_getpwd())); + if(pwd.isEmpty()) + pwd = "."; + mkt << " -I" << pwd; + } + { + const ProStringList &incs = project->values("INCLUDEPATH"); + for (ProStringList::ConstIterator incit = incs.begin(); incit != incs.end(); ++incit) + mkt << " -I" << escapeFilePath((*incit)); + } + if(!project->isEmpty("QMAKE_FRAMEWORKPATH_FLAGS")) + mkt << " " << var("QMAKE_FRAMEWORKPATH_FLAGS"); + mkt << endl; + mkt << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl; + mkt << "MOVE = " << var("QMAKE_MOVE") << endl << endl; + mkt << "IMAGES = " << varList("QMAKE_IMAGE_COLLECTION") << endl; + mkt << "PARSERS ="; + if(!project->isEmpty("YACCSOURCES")) { + const ProStringList &yaccs = project->values("YACCSOURCES"); + for (ProStringList::ConstIterator yit = yaccs.begin(); yit != yaccs.end(); ++yit) { + QFileInfo fi(fileInfo((*yit).toQString())); + mkt << " " << fi.path() << Option::dir_sep << fi.baseName() + << Option::yacc_mod << Option::cpp_ext.first(); + } + } + if(!project->isEmpty("LEXSOURCES")) { + const ProStringList &lexs = project->values("LEXSOURCES"); + for (ProStringList::ConstIterator lit = lexs.begin(); lit != lexs.end(); ++lit) { + QFileInfo fi(fileInfo((*lit).toQString())); + mkt << " " << fi.path() << Option::dir_sep << fi.baseName() + << Option::lex_mod << Option::cpp_ext.first(); + } + } + mkt << "\n"; + mkt << "preprocess: $(PARSERS) compilers\n"; + mkt << "clean preprocess_clean: parser_clean compiler_clean\n\n"; + mkt << "parser_clean:\n"; + if(!project->isEmpty("YACCSOURCES") || !project->isEmpty("LEXSOURCES")) + mkt << "\t-rm -f $(PARSERS)\n"; + writeExtraTargets(mkt); + if(!project->isEmpty("QMAKE_EXTRA_COMPILERS")) { + mkt << "compilers:"; + const ProStringList &compilers = project->values("QMAKE_EXTRA_COMPILERS"); + for(int compiler = 0; compiler < compilers.size(); ++compiler) { + const ProStringList &tmp_out = project->values(ProKey(compilers.at(compiler) + ".output")); + if (tmp_out.isEmpty()) + continue; + const ProStringList &inputs = project->values(ProKey(compilers.at(compiler) + ".input")); + for(int input = 0; input < inputs.size(); ++input) { + const ProStringList &files = project->values(inputs.at(input).toKey()); + if (files.isEmpty()) + continue; + for(int file = 0, added = 0; file < files.size(); ++file) { + QString fn = files.at(file).toQString(); + if (!verifyExtraCompiler(compilers.at(compiler), fn)) + continue; + if(added && !(added % 3)) + mkt << "\\\n\t"; + ++added; + const QString file_name = fileFixify(fn, Option::output_dir, Option::output_dir); + mkt << " " << replaceExtraCompilerVariables(Option::fixPathToTargetOS(tmp_out.first().toQString(), false), file_name, QString()); + } + } + } + mkt << endl; + writeExtraCompilerTargets(mkt); + writingUnixMakefileGenerator = false; + } + mkt.flush(); + mkf.close(); + } + mkfile = fileFixify(mkfile, qmake_getpwd()); + QString phase_key = keyFor("QMAKE_PBX_PREPROCESS_TARGET"); +// project->values("QMAKE_PBX_BUILDPHASES").append(phase_key); + project->values("QMAKE_PBX_PRESCRIPT_BUILDPHASES").append(phase_key); + t << "\t\t" << phase_key << " = {\n" + << "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("files", ProStringList(), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXShellScriptBuildPhase", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("name", "Qt Preprocessors") << ";\n" + << "\t\t\t" << writeSettings("shellPath", "/bin/sh") << ";\n" + << "\t\t\t" << writeSettings("shellScript", "make -C " + IoUtils::shellQuoteUnix(qmake_getpwd()) + " -f " + IoUtils::shellQuoteUnix(mkfile)) << ";\n" + << "\t\t};\n"; + } + + //SOURCE BUILDPHASE + if(!project->isEmpty("QMAKE_PBX_OBJ")) { + QString grp = "Compile Sources", key = keyFor(grp); + project->values("QMAKE_PBX_BUILDPHASES").append(key); + t << "\t\t" << key << " = {\n" + << "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("files", fixListForOutput("QMAKE_PBX_OBJ"), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXSourcesBuildPhase", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("name", grp) << ";\n" + << "\t\t};\n"; + } + + if(!project->isActiveConfig("staticlib")) { //DUMP LIBRARIES + ProStringList &libdirs = project->values("QMAKE_PBX_LIBPATHS"), + &frameworkdirs = project->values("QMAKE_FRAMEWORKPATH"); + static const char * const libs[] = { "QMAKE_LFLAGS", "QMAKE_LIBS", "QMAKE_LIBS_PRIVATE", 0 }; + for (int i = 0; libs[i]; i++) { + tmp = project->values(libs[i]); + for(int x = 0; x < tmp.count();) { + bool remove = false; + QString library, name; + ProString opt = tmp[x].trimmed(); + if (opt.length() >= 2 && (opt.at(0) == '"' || opt.at(0) == '\'') && opt.endsWith(opt.at(0))) + opt = opt.mid(1, opt.length()-2); + if(opt.startsWith("-L")) { + QString r = opt.mid(2).toQString(); + fixForOutput(r); + libdirs.append(r); + } else if(opt == "-prebind") { + project->values("QMAKE_DO_PREBINDING").append("TRUE"); + remove = true; + } else if(opt.startsWith("-l")) { + name = opt.mid(2).toQString(); + QString lib("lib" + name); + for (ProStringList::Iterator lit = libdirs.begin(); lit != libdirs.end(); ++lit) { + if(project->isActiveConfig("link_prl")) { + /* This isn't real nice, but it is real useful. This looks in a prl + for what the library will ultimately be called so we can stick it + in the ProjectFile. If the prl format ever changes (not likely) then + this will not really work. However, more concerning is that it will + encode the version number in the Project file which might be a bad + things in days to come? --Sam + */ + QString lib_file = (*lit) + Option::dir_sep + lib; + if(QMakeMetaInfo::libExists(lib_file)) { + QMakeMetaInfo libinfo(project); + if(libinfo.readLib(lib_file)) { + if(!libinfo.isEmpty("QMAKE_PRL_TARGET")) { + library = (*lit) + Option::dir_sep + libinfo.first("QMAKE_PRL_TARGET"); + debug_msg(1, "pbuilder: Found library (%s) via PRL %s (%s)", + opt.toLatin1().constData(), lib_file.toLatin1().constData(), library.toLatin1().constData()); + remove = true; + + if (project->isActiveConfig("xcode_dynamic_library_suffix")) { + QString suffixSetting = project->first("QMAKE_XCODE_LIBRARY_SUFFIX_SETTING").toQString(); + if (!suffixSetting.isEmpty()) { + QString librarySuffix = project->first("QMAKE_XCODE_LIBRARY_SUFFIX").toQString(); + suffixSetting = "$(" + suffixSetting + ")"; + if (!librarySuffix.isEmpty()) { + library = library.replace(librarySuffix, suffixSetting); + name = name.remove(librarySuffix); + } else { + library = library.replace(name, name + suffixSetting); + } + } + } + } + } + } + } + if(!remove) { + QString extns[] = { ".dylib", ".so", ".a", QString() }; + for(int n = 0; !remove && !extns[n].isNull(); n++) { + QString tmp = (*lit) + Option::dir_sep + lib + extns[n]; + if(exists(tmp)) { + library = tmp; + debug_msg(1, "pbuilder: Found library (%s) via %s", + opt.toLatin1().constData(), library.toLatin1().constData()); + remove = true; + } + } + } + } + } else if(opt.startsWith("-F")) { + QString r; + if(opt.size() > 2) { + r = opt.mid(2).toQString(); + } else { + if(x == tmp.count()-1) + break; + r = tmp[++x].toQString(); + } + if(!r.isEmpty()) { + fixForOutput(r); + frameworkdirs.append(r); + } + } else if(opt == "-framework") { + if(x == tmp.count()-1) + break; + const ProString &framework = tmp[x+1]; + ProStringList fdirs = frameworkdirs; + fdirs << "/System/Library/Frameworks/" << "/Library/Frameworks/"; + for(int fdir = 0; fdir < fdirs.count(); fdir++) { + if(exists(fdirs[fdir] + QDir::separator() + framework + ".framework")) { + remove = true; + library = fdirs[fdir] + Option::dir_sep + framework + ".framework"; + tmp.removeAt(x); + break; + } + } + } else if (!opt.startsWith('-')) { + QString fn = opt.toQString(); + if (exists(fn)) { + remove = true; + library = fn; + } + } + if(!library.isEmpty()) { + const int slsh = library.lastIndexOf(Option::dir_sep); + if(name.isEmpty()) { + if(slsh != -1) + name = library.right(library.length() - slsh - 1); + } + if(slsh != -1) { + const QString path = QFileInfo(library.left(slsh)).absoluteFilePath(); + if(!path.isEmpty() && !libdirs.contains(path)) + libdirs += path; + } + library = fileFixify(library); + QString filetype = xcodeFiletypeForFilename(library); + QString key = keyFor(library); + if (!project->values("QMAKE_PBX_LIBRARIES").contains(key)) { + bool is_frmwrk = (library.endsWith(".framework")); + t << "\t\t" << key << " = {\n" + << "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("name", escapeFilePath(name)) << ";\n" + << "\t\t\t" << writeSettings("path", escapeFilePath(library)) << ";\n" + << "\t\t\t" << writeSettings("refType", QString::number(reftypeForFile(library)), SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("sourceTree", sourceTreeForFile(library)) << ";\n"; + if (is_frmwrk) + t << "\t\t\t" << writeSettings("lastKnownFileType", "wrapper.framework") << ";\n"; + t << "\t\t};\n"; + project->values("QMAKE_PBX_LIBRARIES").append(key); + QString build_key = keyFor(library + ".BUILDABLE"); + t << "\t\t" << build_key << " = {\n" + << "\t\t\t" << writeSettings("fileRef", key) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXBuildFile", SettingsNoQuote) << ";\n" + << "\t\t\tsettings = {\n" + << "\t\t\t};\n" + << "\t\t};\n"; + project->values("QMAKE_PBX_BUILD_LIBRARIES").append(build_key); + } + } + if(remove) + tmp.removeAt(x); + else + x++; + } + project->values(libs[i]) = tmp; + } + } + //SUBLIBS BUILDPHASE (just another makefile) + if(!project->isEmpty("SUBLIBS")) { + QString mkfile = pbx_dir + Option::dir_sep + "qt_sublibs.mak"; + QFile mkf(mkfile); + if(mkf.open(QIODevice::WriteOnly | QIODevice::Text)) { + writingUnixMakefileGenerator = true; + debug_msg(1, "pbuilder: Creating file: %s", mkfile.toLatin1().constData()); + QTextStream mkt(&mkf); + writeHeader(mkt); + mkt << "SUBLIBS= "; + tmp = project->values("SUBLIBS"); + for(int i = 0; i < tmp.count(); i++) + t << "tmp/lib" << tmp[i] << ".a "; + t << endl << endl; + mkt << "sublibs: $(SUBLIBS)\n\n"; + tmp = project->values("SUBLIBS"); + for(int i = 0; i < tmp.count(); i++) + t << "tmp/lib" << tmp[i] << ".a:\n\t" + << var(ProKey("MAKELIB" + tmp[i])) << endl << endl; + mkt.flush(); + mkf.close(); + writingUnixMakefileGenerator = false; + } + QString phase_key = keyFor("QMAKE_PBX_SUBLIBS_BUILDPHASE"); + mkfile = fileFixify(mkfile, qmake_getpwd()); + project->values("QMAKE_PBX_PRESCRIPT_BUILDPHASES").append(phase_key); + t << "\t\t" << phase_key << " = {\n" + << "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("files", ProStringList(), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXShellScriptBuildPhase", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("name", "Qt Sublibs") << ";\n" + << "\t\t\t" << writeSettings("shellPath", "/bin/sh") << "\n" + << "\t\t\t" << writeSettings("shellScript", "make -C " + IoUtils::shellQuoteUnix(qmake_getpwd()) + " -f " + IoUtils::shellQuoteUnix(mkfile)) << ";\n" + << "\t\t};\n"; + } + + if (!project->isEmpty("QMAKE_PRE_LINK")) { + QString phase_key = keyFor("QMAKE_PBX_PRELINK_BUILDPHASE"); + project->values("QMAKE_PBX_BUILDPHASES").append(phase_key); + t << "\t\t" << phase_key << " = {\n" + << "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("files", ProStringList(), SettingsAsList, 4) << ";\n" + // The build phases are not executed in the order they are defined, but by their + // resolved dependenices, so we have to ensure that this phase is run after the + // compilation phase, and before the link phase. Making the phase depend on all the + // object files, and "write" to the list of files to link achieves that. + << "\t\t\t" << writeSettings("inputPaths", ProStringList("$(OBJECT_FILE_DIR_$(CURRENT_VARIANT))/$(CURRENT_ARCH)/*" + Option::obj_ext), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("outputPaths", ProStringList("$(LINK_FILE_LIST_$(CURRENT_VARIANT)_$(CURRENT_ARCH))"), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXShellScriptBuildPhase", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("name", "Qt Prelink") << ";\n" + << "\t\t\t" << writeSettings("shellPath", "/bin/sh") << ";\n" + << "\t\t\t" << writeSettings("shellScript", project->values("QMAKE_PRE_LINK")) << ";\n" + << "\t\t};\n"; + } + + //LIBRARY BUILDPHASE + if(!project->isEmpty("QMAKE_PBX_LIBRARIES")) { + tmp = project->values("QMAKE_PBX_LIBRARIES"); + if(!tmp.isEmpty()) { + QString grp("Frameworks"), key = keyFor(grp); + project->values("QMAKE_PBX_GROUPS").append(key); + t << "\t\t" << key << " = {\n" + << "\t\t\t" << writeSettings("children", project->values("QMAKE_PBX_LIBRARIES"), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("name", escapeFilePath(grp)) << ";\n" + << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" + << "\t\t};\n"; + } + } + { + QString grp("Link Binary With Libraries"), key = keyFor(grp); + project->values("QMAKE_PBX_BUILDPHASES").append(key); + t << "\t\t" << key << " = {\n" + << "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("files", project->values("QMAKE_PBX_BUILD_LIBRARIES"), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXFrameworksBuildPhase", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("name", escapeFilePath(grp)) << ";\n" + << "\t\t};\n"; + } + + if (!project->isEmpty("QMAKE_POST_LINK")) { + QString phase_key = keyFor("QMAKE_PBX_POSTLINK_BUILDPHASE"); + project->values("QMAKE_PBX_BUILDPHASES").append(phase_key); + t << "\t\t" << phase_key << " = {\n" + << "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("files", ProStringList(), SettingsAsList, 4) << ";\n" + // The build phases are not executed in the order they are defined, but by their + // resolved dependenices, so we have to ensure the phase is run after linking. + << "\t\t\t" << writeSettings("inputPaths", ProStringList("$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)"), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXShellScriptBuildPhase", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("name", "Qt Postlink") << ";\n" + << "\t\t\t" << writeSettings("shellPath", "/bin/sh") << ";\n" + << "\t\t\t" << writeSettings("shellScript", project->values("QMAKE_POST_LINK")) << ";\n" + << "\t\t};\n"; + } + + if (!project->isEmpty("DESTDIR")) { + QString phase_key = keyFor("QMAKE_PBX_TARGET_COPY_PHASE"); + QString destDir = project->first("DESTDIR").toQString(); + destDir = fixForOutput(destDir); + destDir = fileInfo(Option::fixPathToLocalOS(destDir)).absoluteFilePath(); + project->values("QMAKE_PBX_BUILDPHASES").append(phase_key); + t << "\t\t" << phase_key << " = {\n" + << "\t\t\t" << writeSettings("isa", "PBXShellScriptBuildPhase", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("name", "Project Copy") << ";\n" + << "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("files", ProStringList(), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("inputPaths", ProStringList(), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("outputPaths", ProStringList(), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("shellPath", "/bin/sh") << ";\n" + << "\t\t\t" << writeSettings("shellScript", fixForOutput("cp -r $BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME " + escapeFilePath(destDir))) << ";\n" + << "\t\t};\n"; + } + // Copy Bundle Resources + if (!project->isEmpty("QMAKE_BUNDLE_DATA")) { + ProStringList bundle_file_refs; + ProStringList bundle_resources_files; + + bool useCopyResourcesPhase = project->isActiveConfig("app_bundle") && project->first("TEMPLATE") == "app"; + + //all bundle data + const ProStringList &bundle_data = project->values("QMAKE_BUNDLE_DATA"); + for(int i = 0; i < bundle_data.count(); i++) { + ProStringList bundle_files; + ProString path = project->first(ProKey(bundle_data[i] + ".path")); + //all files + const ProStringList &files = project->values(ProKey(bundle_data[i] + ".files")); + for(int file = 0; file < files.count(); file++) { + QString fn = files[file].toQString(); + QString file_ref_key = keyFor("QMAKE_PBX_BUNDLE_DATA_FILE_REF." + bundle_data[i] + "-" + fn); + bundle_file_refs += file_ref_key; + t << "\t\t" << file_ref_key << " = {\n" + << "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("path", escapeFilePath(fn)) << ";\n" + << "\t\t\t" << writeSettings("sourceTree", sourceTreeForFile(fn)) << ";\n" + << "\t\t};\n"; + QString file_key = keyFor("QMAKE_PBX_BUNDLE_DATA_FILE." + bundle_data[i] + "-" + fn); + bundle_files += file_key; + t << "\t\t" << file_key << " = {\n" + << "\t\t\t" << writeSettings("fileRef", file_ref_key) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXBuildFile", SettingsNoQuote) << ";\n" + << "\t\t};\n"; + } + + if (!useCopyResourcesPhase || !path.isEmpty()) { + // The resource copy phase doesn't support paths, so we have to use + // a regular file copy phase (which doesn't optimize the resources). + QString phase_key = keyFor("QMAKE_PBX_BUNDLE_COPY." + bundle_data[i]); + if (!project->isEmpty(ProKey(bundle_data[i] + ".version"))) { + //### + } + + project->values("QMAKE_PBX_BUILDPHASES").append(phase_key); + t << "\t\t" << phase_key << " = {\n" + << "\t\t\t" << writeSettings("name", "Copy '" + bundle_data[i] + "' Files to Bundle") << ";\n" + << "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("dstPath", escapeFilePath(path)) << ";\n" + << "\t\t\t" << writeSettings("dstSubfolderSpec", "1", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("files", bundle_files, SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXCopyFilesBuildPhase", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" + << "\t\t};\n"; + } else { + // Otherwise we leave it to the resource copy phase below + bundle_resources_files += bundle_files; + } + } + + if (useCopyResourcesPhase) { + if (!project->isEmpty("ICON")) { + ProString icon = project->first("ICON"); + if (icon.length() >= 2 && (icon.at(0) == '"' || icon.at(0) == '\'') && icon.endsWith(icon.at(0))) + icon = icon.mid(1, icon.length() - 2); + bundle_resources_files += keyFor(icon + ".BUILDABLE"); + } + + QString grp("Copy Bundle Resources"), key = keyFor(grp); + project->values("QMAKE_PBX_BUILDPHASES").append(key); + t << "\t\t" << key << " = {\n" + << "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("files", bundle_resources_files, SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXResourcesBuildPhase", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("name", escapeFilePath(grp)) << ";\n" + << "\t\t};\n"; + } + + QString bundle_data_key = keyFor("QMAKE_PBX_BUNDLE_DATA"); + project->values("QMAKE_PBX_GROUPS").append(bundle_data_key); + t << "\t\t" << bundle_data_key << " = {\n" + << "\t\t\t" << writeSettings("children", bundle_file_refs, SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("name", "Bundle Resources") << ";\n" + << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" + << "\t\t};\n"; + } + + //REFERENCE + project->values("QMAKE_PBX_PRODUCTS").append(keyFor(pbx_dir + "QMAKE_PBX_REFERENCE")); + t << "\t\t" << keyFor(pbx_dir + "QMAKE_PBX_REFERENCE") << " = {\n" + << "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("includeInIndex", "0", SettingsNoQuote) << ";\n"; + if(project->first("TEMPLATE") == "app") { + ProString targ = project->first("QMAKE_ORIG_TARGET"); + if(project->isActiveConfig("bundle") && !project->isEmpty("QMAKE_BUNDLE_EXTENSION")) { + if(!project->isEmpty("QMAKE_BUNDLE_NAME")) + targ = project->first("QMAKE_BUNDLE_NAME"); + targ += project->first("QMAKE_BUNDLE_EXTENSION"); + if(!project->isEmpty("QMAKE_PBX_BUNDLE_TYPE")) + t << "\t\t\t" << writeSettings("explicitFileType", project->first("QMAKE_PBX_BUNDLE_TYPE")) + ";\n"; + } else if(project->isActiveConfig("app_bundle")) { + if(!project->isEmpty("QMAKE_APPLICATION_BUNDLE_NAME")) + targ = project->first("QMAKE_APPLICATION_BUNDLE_NAME"); + targ += ".app"; + t << "\t\t\t" << writeSettings("explicitFileType", "wrapper.application") << ";\n"; + } else { + t << "\t\t\t" << writeSettings("explicitFileType", "compiled.mach-o.executable") << ";\n"; + } + QString app = (!project->isEmpty("DESTDIR") ? project->first("DESTDIR") + project->first("QMAKE_ORIG_TARGET") : + qmake_getpwd()) + Option::dir_sep + targ; + t << "\t\t\t" << writeSettings("path", escapeFilePath(targ)) << ";\n"; + } else { + ProString lib = project->first("QMAKE_ORIG_TARGET"); + if(project->isActiveConfig("staticlib")) { + lib = project->first("TARGET"); + } else if(!project->isActiveConfig("lib_bundle")) { + if(project->isActiveConfig("plugin")) + lib = project->first("TARGET"); + else + lib = project->first("TARGET_"); + } + int slsh = lib.lastIndexOf(Option::dir_sep); + if(slsh != -1) + lib = lib.right(lib.length() - slsh - 1); + if(project->isActiveConfig("bundle") && !project->isEmpty("QMAKE_BUNDLE_EXTENSION")) { + if(!project->isEmpty("QMAKE_BUNDLE_NAME")) + lib = project->first("QMAKE_BUNDLE_NAME"); + lib += project->first("QMAKE_BUNDLE_EXTENSION"); + if(!project->isEmpty("QMAKE_PBX_BUNDLE_TYPE")) + t << "\t\t\t" << writeSettings("explicitFileType", project->first("QMAKE_PBX_BUNDLE_TYPE")) << ";\n"; + } else if(!project->isActiveConfig("staticlib") && project->isActiveConfig("lib_bundle")) { + if(!project->isEmpty("QMAKE_FRAMEWORK_BUNDLE_NAME")) + lib = project->first("QMAKE_FRAMEWORK_BUNDLE_NAME"); + lib += ".framework"; + t << "\t\t\t" << writeSettings("explicitFileType", "wrapper.framework") << ";\n"; + } else { + t << "\t\t\t" << writeSettings("explicitFileType", "compiled.mach-o.dylib") << ";\n"; + } + t << "\t\t\t" << writeSettings("path", escapeFilePath(lib)) << ";\n"; + } + t << "\t\t\t" << writeSettings("sourceTree", "BUILT_PRODUCTS_DIR", SettingsNoQuote) << ";\n" + << "\t\t};\n"; + { //Products group + QString grp("Products"), key = keyFor(grp); + project->values("QMAKE_PBX_GROUPS").append(key); + t << "\t\t" << key << " = {\n" + << "\t\t\t" << writeSettings("children", project->values("QMAKE_PBX_PRODUCTS"), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("name", "Products") << ";\n" + << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" + << "\t\t};\n"; + } + + //DUMP EVERYTHING THAT TIES THE ABOVE TOGETHER + //ROOT_GROUP + t << "\t\t" << keyFor("QMAKE_PBX_ROOT_GROUP") << " = {\n" + << "\t\t\t" << writeSettings("children", project->values("QMAKE_PBX_GROUPS"), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("name", escapeFilePath(project->first("QMAKE_ORIG_TARGET"))) << ";\n" + << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" + << "\t\t};\n"; + + { + QString aggregate_target_key = keyFor(pbx_dir + "QMAKE_PBX_AGGREGATE_TARGET"); + project->values("QMAKE_PBX_TARGETS").append(aggregate_target_key); + t << "\t\t" << aggregate_target_key << " = {\n" + << "\t\t\t" << writeSettings("buildPhases", project->values("QMAKE_PBX_PRESCRIPT_BUILDPHASES"), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("dependencies", ProStringList(), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("buildConfigurationList", keyFor("QMAKE_PBX_BUILDCONFIG_LIST_TARGET"), SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXAggregateTarget", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("buildRules", ProStringList(), SettingsAsList) << ";\n" + << "\t\t\t" << writeSettings("productName", "Qt Preprocess") << ";\n" + << "\t\t\t" << writeSettings("name", "Qt Preprocess") << ";\n" + << "\t\t};\n"; + + QString aggregate_target_dep_key = keyFor(pbx_dir + "QMAKE_PBX_AGGREGATE_TARGET_DEP"); + t << "\t\t" << aggregate_target_dep_key << " = {\n" + << "\t\t\t" << writeSettings("isa", "PBXTargetDependency", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("target", aggregate_target_key) << ";\n" + << "\t\t};\n"; + + project->values("QMAKE_PBX_TARGET_DEPENDS").append(aggregate_target_dep_key); + } + + //TARGET + QString target_key = keyFor(pbx_dir + "QMAKE_PBX_TARGET"); + project->values("QMAKE_PBX_TARGETS").prepend(target_key); + t << "\t\t" << target_key << " = {\n" + << "\t\t\t" << writeSettings("buildPhases", project->values("QMAKE_PBX_BUILDPHASES"), + SettingsAsList, 4) << ";\n"; + t << "\t\t\t" << writeSettings("dependencies", project->values("QMAKE_PBX_TARGET_DEPENDS"), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("productReference", keyFor(pbx_dir + "QMAKE_PBX_REFERENCE")) << ";\n"; + t << "\t\t\t" << writeSettings("buildConfigurationList", keyFor("QMAKE_PBX_BUILDCONFIG_LIST_TARGET"), SettingsNoQuote) << ";\n"; + t << "\t\t\t" << writeSettings("isa", "PBXNativeTarget", SettingsNoQuote) << ";\n"; + t << "\t\t\t" << writeSettings("buildRules", ProStringList(), SettingsAsList) << ";\n"; + if(project->first("TEMPLATE") == "app") { + if (!project->isEmpty("QMAKE_PBX_PRODUCT_TYPE")) { + t << "\t\t\t" << writeSettings("productType", project->first("QMAKE_PBX_PRODUCT_TYPE")) << ";\n"; + } else { + if (project->isActiveConfig("app_bundle")) + t << "\t\t\t" << writeSettings("productType", "com.apple.product-type.application") << ";\n"; + else + t << "\t\t\t" << writeSettings("productType", "com.apple.product-type.tool") << ";\n"; + } + t << "\t\t\t" << writeSettings("name", escapeFilePath(project->first("QMAKE_ORIG_TARGET"))) << ";\n" + << "\t\t\t" << writeSettings("productName", escapeFilePath(project->first("QMAKE_ORIG_TARGET"))) << ";\n"; + } else { + ProString lib = project->first("QMAKE_ORIG_TARGET"); + if(!project->isActiveConfig("lib_bundle") && !project->isActiveConfig("staticlib")) + lib.prepend("lib"); + t << "\t\t\t" << writeSettings("name", escapeFilePath(lib)) << ";\n" + << "\t\t\t" << writeSettings("productName", escapeFilePath(lib)) << ";\n"; + if (!project->isEmpty("QMAKE_PBX_PRODUCT_TYPE")) + t << "\t\t\t" << writeSettings("productType", project->first("QMAKE_PBX_PRODUCT_TYPE")) << ";\n"; + else if (project->isActiveConfig("staticlib")) + t << "\t\t\t" << writeSettings("productType", "com.apple.product-type.library.static") << ";\n"; + else if (project->isActiveConfig("lib_bundle")) + t << "\t\t\t" << writeSettings("productType", "com.apple.product-type.framework") << ";\n"; + else + t << "\t\t\t" << writeSettings("productType", "com.apple.product-type.library.dynamic") << ";\n"; + } + if(!project->isEmpty("DESTDIR")) + t << "\t\t\t" << writeSettings("productInstallPath", escapeFilePath(project->first("DESTDIR"))) << ";\n"; + t << "\t\t};\n"; + //DEBUG/RELEASE + QString defaultConfig; + for(int as_release = 0; as_release < 2; as_release++) + { + QString configName = (as_release ? "Release" : "Debug"); + + QMap settings; + settings.insert("COPY_PHASE_STRIP", (as_release ? "YES" : "NO")); + settings.insert("GCC_GENERATE_DEBUGGING_SYMBOLS", as_release ? "NO" : "YES"); + if(!as_release) + settings.insert("GCC_OPTIMIZATION_LEVEL", "0"); + if(project->isActiveConfig("sdk") && !project->isEmpty("QMAKE_MAC_SDK")) + settings.insert("SDKROOT", project->first("QMAKE_MAC_SDK").toQString()); + { + const ProStringList &l = project->values("QMAKE_MAC_XCODE_SETTINGS"); + for(int i = 0; i < l.size(); ++i) { + ProString name = l.at(i); + const ProKey buildKey(name + ".build"); + if (!project->isEmpty(buildKey)) { + const QString build = project->values(buildKey).first().toQString(); + if (build.toLower() != configName.toLower()) + continue; + } + const QString value = project->values(ProKey(name + ".value")).join(QString(Option::field_sep)); + const ProKey nkey(name + ".name"); + if (!project->isEmpty(nkey)) + name = project->values(nkey).first(); + settings.insert(name.toQString(), value); + } + } + if (project->first("TEMPLATE") == "app") { + settings.insert("PRODUCT_NAME", fixForOutput(project->first("QMAKE_ORIG_TARGET").toQString())); + } else { + ProString lib = project->first("QMAKE_ORIG_TARGET"); + if (!project->isActiveConfig("lib_bundle") && !project->isActiveConfig("staticlib")) + lib.prepend("lib"); + settings.insert("PRODUCT_NAME", escapeFilePath(lib.toQString())); + } + + if (project->isActiveConfig("debug") != (bool)as_release) + defaultConfig = configName; + for (int i = 0; i < buildConfigGroups.size(); i++) { + QString key = keyFor("QMAKE_PBX_BUILDCONFIG_" + configName + buildConfigGroups.at(i)); + project->values(ProKey("QMAKE_PBX_BUILDCONFIGS_" + buildConfigGroups.at(i))).append(key); + t << "\t\t" << key << " = {\n" + << "\t\t\t" << writeSettings("isa", "XCBuildConfiguration", SettingsNoQuote) << ";\n" + << "\t\t\tbuildSettings = {\n"; + for (QMap::Iterator set_it = settings.begin(); set_it != settings.end(); ++set_it) + t << "\t\t\t\t" << writeSettings(set_it.key(), set_it.value()) << ";\n"; + if (buildConfigGroups.at(i) == QLatin1String("PROJECT")) { + if (!project->isEmpty("QMAKE_XCODE_GCC_VERSION")) + t << "\t\t\t\t" << writeSettings("GCC_VERSION", project->first("QMAKE_XCODE_GCC_VERSION"), SettingsNoQuote) << ";\n"; + ProString program = project->first("QMAKE_CC"); + if (!program.isEmpty()) + t << "\t\t\t\t" << writeSettings("CC", fixForOutput(findProgram(program))) << ";\n"; + program = project->first("QMAKE_CXX"); + // Xcode will automatically take care of using CC with the right -x option, + // and will actually break if we pass CPLUSPLUS, by adding an additional set of "++" + if (!program.isEmpty() && !program.contains("clang++")) + t << "\t\t\t\t" << writeSettings("CPLUSPLUS", fixForOutput(findProgram(program))) << ";\n"; + program = project->first("QMAKE_LINK"); + if (!program.isEmpty()) + t << "\t\t\t\t" << writeSettings("LDPLUSPLUS", fixForOutput(findProgram(program))) << ";\n"; + + if ((project->first("TEMPLATE") == "app" && project->isActiveConfig("app_bundle")) || + (project->first("TEMPLATE") == "lib" && !project->isActiveConfig("staticlib") && + project->isActiveConfig("lib_bundle"))) { + QString plist = fileFixify(project->first("QMAKE_INFO_PLIST").toQString(), Option::output_dir, input_dir); + if (plist.isEmpty()) + plist = specdir() + QDir::separator() + "Info.plist." + project->first("TEMPLATE"); + if (exists(plist)) { + QFile plist_in_file(plist); + if (plist_in_file.open(QIODevice::ReadOnly)) { + QTextStream plist_in(&plist_in_file); + QString plist_in_text = plist_in.readAll(); + plist_in_text = plist_in_text.replace("@ICON@", + (project->isEmpty("ICON") ? QString("") : project->first("ICON").toQString().section(Option::dir_sep, -1))); + if (project->first("TEMPLATE") == "app") { + plist_in_text = plist_in_text.replace("@EXECUTABLE@", project->first("QMAKE_ORIG_TARGET").toQString()); + } else { + plist_in_text = plist_in_text.replace("@LIBRARY@", project->first("QMAKE_ORIG_TARGET").toQString()); + } + QString bundlePrefix = project->first("QMAKE_TARGET_BUNDLE_PREFIX").toQString(); + if (bundlePrefix.isEmpty()) + bundlePrefix = "com.yourcompany"; + plist_in_text = plist_in_text.replace("@BUNDLEIDENTIFIER@", bundlePrefix + "." + QLatin1String("${PRODUCT_NAME:rfc1034identifier}")); + if (!project->values("VERSION").isEmpty()) { + plist_in_text = plist_in_text.replace("@SHORT_VERSION@", project->first("VER_MAJ") + "." + + project->first("VER_MIN")); + } + plist_in_text = plist_in_text.replace("@TYPEINFO@", + (project->isEmpty("QMAKE_PKGINFO_TYPEINFO") + ? QString::fromLatin1("????") : project->first("QMAKE_PKGINFO_TYPEINFO").left(4).toQString())); + QString plist_dir; + if (!project->isEmpty("PLIST_DIR")) + plist_dir = project->first("PLIST_DIR").toQString(); + QString plist_in_filename = QFileInfo(plist_in_file).fileName(); + QFile plist_out_file(plist_dir + plist_in_filename); +// QFile plist_out_file("Info.plist"); + if (plist_out_file.open(QIODevice::WriteOnly | QIODevice::Text)) { + QTextStream plist_out(&plist_out_file); + plist_out << plist_in_text; +// t << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", "Info.plist") << ";\n"; + t << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", fixForOutput(plist_dir + plist_in_filename)) << ";\n"; + } + } + } else { + warn_msg(WarnLogic, "Could not resolve Info.plist: '%s'. Check if QMAKE_INFO_PLIST points to a valid file.", plist.toLatin1().constData()); + } + } + + t << "\t\t\t\t" << writeSettings("SYMROOT", escapeFilePath(qmake_getpwd())) << ";\n"; + + if (!project->isEmpty("DESTDIR")) { + ProString dir = project->first("DESTDIR"); + if (QDir::isRelativePath(dir.toQString())) + dir.prepend(qmake_getpwd() + Option::dir_sep); + t << "\t\t\t\t" << writeSettings("INSTALL_DIR", dir) << ";\n"; + } + + if (project->first("TEMPLATE") == "lib") + t << "\t\t\t\t" << writeSettings("INSTALL_PATH", ProStringList()) << ";\n"; + + if (!project->isEmpty("VERSION") && project->first("VERSION") != "0.0.0") { + t << "\t\t\t\t" << writeSettings("DYLIB_CURRENT_VERSION", project->first("VER_MAJ")+"."+project->first("VER_MIN")+"."+project->first("VER_PAT")) << ";\n"; + if (project->isEmpty("COMPAT_VERSION")) + t << "\t\t\t\t" << writeSettings("DYLIB_COMPATIBILITY_VERSION", project->first("VER_MAJ")+"."+project->first("VER_MIN")) << ";\n"; + if (project->first("TEMPLATE") == "lib" && !project->isActiveConfig("staticlib") && + project->isActiveConfig("lib_bundle")) + t << "\t\t\t\t" << writeSettings("FRAMEWORK_VERSION", project->first("QMAKE_FRAMEWORK_VERSION")) << ";\n"; + } + if (!project->isEmpty("COMPAT_VERSION")) + t << "\t\t\t\t" << writeSettings("DYLIB_COMPATIBILITY_VERSION", project->first("COMPAT_VERSION")) << ";\n"; + + if (!project->isEmpty("QMAKE_MACOSX_DEPLOYMENT_TARGET")) + t << "\t\t\t\t" << writeSettings("MACOSX_DEPLOYMENT_TARGET", project->first("QMAKE_MACOSX_DEPLOYMENT_TARGET")) << ";\n"; + if (!project->isEmpty("QMAKE_IOS_DEPLOYMENT_TARGET")) + t << "\t\t\t\t" << writeSettings("IPHONEOS_DEPLOYMENT_TARGET", project->first("QMAKE_IOS_DEPLOYMENT_TARGET")) << ";\n"; + + if (!project->isEmpty("QMAKE_XCODE_CODE_SIGN_IDENTITY")) + t << "\t\t\t\t" << writeSettings("CODE_SIGN_IDENTITY", project->first("QMAKE_XCODE_CODE_SIGN_IDENTITY")) << ";\n"; + + tmp = project->values("QMAKE_PBX_VARS"); + for (int i = 0; i < tmp.count(); i++) { + QString var = tmp[i].toQString(), val = QString::fromLocal8Bit(qgetenv(var.toLatin1().constData())); + if (val.isEmpty() && var == "TB") + val = "/usr/bin/"; + t << "\t\t\t\t" << writeSettings(var, escapeFilePath(val)) << ";\n"; + } + if (!project->isEmpty("PRECOMPILED_HEADER")) { + t << "\t\t\t\t" << writeSettings("GCC_PRECOMPILE_PREFIX_HEADER", "YES") << ";\n" + << "\t\t\t\t" << writeSettings("GCC_PREFIX_HEADER", escapeFilePath(project->first("PRECOMPILED_HEADER"))) << ";\n"; + } + t << "\t\t\t\t" << writeSettings("HEADER_SEARCH_PATHS", fixListForOutput("INCLUDEPATH") + ProStringList(fixForOutput(specdir())), SettingsAsList, 5) << ";\n" + << "\t\t\t\t" << writeSettings("LIBRARY_SEARCH_PATHS", fixListForOutput("QMAKE_PBX_LIBPATHS"), SettingsAsList, 5) << ";\n" + << "\t\t\t\t" << writeSettings("FRAMEWORK_SEARCH_PATHS", fixListForOutput("QMAKE_FRAMEWORKPATH"), + !project->values("QMAKE_FRAMEWORKPATH").isEmpty() ? SettingsAsList : 0, 5) << ";\n"; + + { + ProStringList cflags = project->values("QMAKE_CFLAGS"); + const ProStringList &prl_defines = project->values("PRL_EXPORT_DEFINES"); + for (int i = 0; i < prl_defines.size(); ++i) + cflags += "-D" + prl_defines.at(i); + const ProStringList &defines = project->values("DEFINES"); + for (int i = 0; i < defines.size(); ++i) + cflags += "-D" + defines.at(i); + t << "\t\t\t\t" << writeSettings("OTHER_CFLAGS", fixListForOutput(cflags), SettingsAsList, 5) << ";\n"; + } + { + ProStringList cxxflags = project->values("QMAKE_CXXFLAGS"); + const ProStringList &prl_defines = project->values("PRL_EXPORT_DEFINES"); + for (int i = 0; i < prl_defines.size(); ++i) + cxxflags += "-D" + prl_defines.at(i); + const ProStringList &defines = project->values("DEFINES"); + for (int i = 0; i < defines.size(); ++i) + cxxflags += "-D" + defines.at(i); + t << "\t\t\t\t" << writeSettings("OTHER_CPLUSPLUSFLAGS", fixListForOutput(cxxflags), SettingsAsList, 5) << ";\n"; + } + if (!project->isActiveConfig("staticlib")) { + t << "\t\t\t\t" << writeSettings("OTHER_LDFLAGS", + fixListForOutput("SUBLIBS") + + fixListForOutput("QMAKE_LFLAGS") + + fixListForOutput("QMAKE_LIBS") + + fixListForOutput("QMAKE_LIBS_PRIVATE"), + SettingsAsList, 6) << ";\n"; + } + const ProStringList &archs = !project->values("QMAKE_XCODE_ARCHS").isEmpty() ? + project->values("QMAKE_XCODE_ARCHS") : project->values("QT_ARCH"); + if (!archs.isEmpty()) + t << "\t\t\t\t" << writeSettings("ARCHS", archs) << ";\n"; + if (!project->isEmpty("OBJECTS_DIR")) + t << "\t\t\t\t" << writeSettings("OBJROOT", escapeFilePath(project->first("OBJECTS_DIR").toQString())) << ";\n"; + } else { + if (project->first("TEMPLATE") == "app") { + t << "\t\t\t\t" << writeSettings("PRODUCT_NAME", fixForOutput(project->first("QMAKE_ORIG_TARGET").toQString())) << ";\n"; + } else { + if (!project->isActiveConfig("plugin") && project->isActiveConfig("staticlib")) + t << "\t\t\t\t" << writeSettings("LIBRARY_STYLE", "STATIC") << ";\n"; + else + t << "\t\t\t\t" << writeSettings("LIBRARY_STYLE", "DYNAMIC") << ";\n"; + ProString lib = project->first("QMAKE_ORIG_TARGET"); + if (!project->isActiveConfig("lib_bundle") && !project->isActiveConfig("staticlib")) + lib.prepend("lib"); + t << "\t\t\t\t" << writeSettings("PRODUCT_NAME", escapeFilePath(lib)) << ";\n"; + } + } + t << "\t\t\t};\n" + << "\t\t\t" << writeSettings("name", configName) << ";\n" + << "\t\t};\n"; + } + } + for (int i = 0; i < buildConfigGroups.size(); i++) { + t << "\t\t" << keyFor("QMAKE_PBX_BUILDCONFIG_LIST_" + buildConfigGroups.at(i)) << " = {\n" + << "\t\t\t" << writeSettings("isa", "XCConfigurationList", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("buildConfigurations", project->values(ProKey("QMAKE_PBX_BUILDCONFIGS_" + buildConfigGroups.at(i))), SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("defaultConfigurationIsVisible", "0", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("defaultConfigurationName", defaultConfig) << ";\n" + << "\t\t};\n"; + } + //ROOT + t << "\t\t" << keyFor("QMAKE_PBX_ROOT") << " = {\n" + << "\t\t\t" << writeSettings("hasScannedForEncodings", "1", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("compatibilityVersion", "Xcode 3.2") << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXProject", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("mainGroup", keyFor("QMAKE_PBX_ROOT_GROUP")) << ";\n" + << "\t\t\t" << writeSettings("productRefGroup", keyFor("Products")) << ";\n"; + t << "\t\t\t" << writeSettings("buildConfigurationList", keyFor("QMAKE_PBX_BUILDCONFIG_LIST_PROJECT")) << ";\n"; + t << "\t\t\t" << writeSettings("projectDirPath", ProStringList()) << ";\n" + << "\t\t\t" << writeSettings("projectRoot", "") << ";\n" + << "\t\t\t" << writeSettings("targets", project->values("QMAKE_PBX_TARGETS"), SettingsAsList, 4) << ";\n" + << "\t\t};\n"; + + // FIXME: Deal with developmentRegion and knownRegions for QMAKE_PBX_ROOT + + //FOOTER + t << "\t};\n" + << "\t" << writeSettings("rootObject", keyFor("QMAKE_PBX_ROOT")) << ";\n" + << "}\n"; + + if(project->isActiveConfig("generate_pbxbuild_makefile")) { + QString mkwrap = fileFixify(pbx_dir + Option::dir_sep + ".." + Option::dir_sep + project->first("MAKEFILE"), + qmake_getpwd()); + QFile mkwrapf(mkwrap); + if(mkwrapf.open(QIODevice::WriteOnly | QIODevice::Text)) { + writingUnixMakefileGenerator = true; + debug_msg(1, "pbuilder: Creating file: %s", mkwrap.toLatin1().constData()); + QTextStream mkwrapt(&mkwrapf); + writeHeader(mkwrapt); + const char cleans[] = "preprocess_clean "; + mkwrapt << "#This is a makefile wrapper for PROJECT BUILDER\n" + << "all:\n\t" + << "cd " << project->first("QMAKE_ORIG_TARGET") << projectSuffix() << "/ && " << pbxbuild() << "\n" + << "install: all\n\t" + << "cd " << project->first("QMAKE_ORIG_TARGET") << projectSuffix() << "/ && " << pbxbuild() << " install\n" + << "distclean clean: preprocess_clean\n\t" + << "cd " << project->first("QMAKE_ORIG_TARGET") << projectSuffix() << "/ && " << pbxbuild() << " clean\n" + << (!did_preprocess ? cleans : "") << ":\n"; + if(did_preprocess) + mkwrapt << cleans << ":\n\t" + << "make -f " + << pbx_dir << Option::dir_sep << "qt_preprocess.mak $@\n"; + writingUnixMakefileGenerator = false; + } + } + + qmake_setpwd(input_dir); + + return true; +} + +QString +ProjectBuilderMakefileGenerator::findProgram(const ProString &prog) +{ + QString ret = prog.toQString(); + if(QDir::isRelativePath(ret)) { + QStringList paths = QString(qgetenv("PATH")).split(':'); + for(int i = 0; i < paths.size(); ++i) { + QString path = paths.at(i) + "/" + prog; + if(exists(path)) { + ret = path; + break; + } + } + } + return ret; +} + +QString +ProjectBuilderMakefileGenerator::fixForOutput(const QString &values) +{ + //get the environment variables references + QRegExp reg_var("\\$\\((.*)\\)"); + for(int rep = 0; (rep = reg_var.indexIn(values, rep)) != -1;) { + if(project->values("QMAKE_PBX_VARS").indexOf(reg_var.cap(1)) == -1) + project->values("QMAKE_PBX_VARS").append(reg_var.cap(1)); + rep += reg_var.matchedLength(); + } + + return values; +} + +ProStringList +ProjectBuilderMakefileGenerator::fixListForOutput(const char *where) +{ + return fixListForOutput(project->values(where)); +} + +ProStringList +ProjectBuilderMakefileGenerator::fixListForOutput(const ProStringList &l) +{ + ProStringList ret; + for(int i = 0; i < l.count(); i++) + ret += fixForOutput(l[i].toQString()); + return ret; +} + +QString +ProjectBuilderMakefileGenerator::keyFor(const QString &block) +{ +#if 1 //This make this code much easier to debug.. + if(project->isActiveConfig("no_pb_munge_key")) + return block; +#endif + QString ret; + if(!keys.contains(block)) { + ret = qtSha1(block.toUtf8()).left(24).toUpper(); + keys.insert(block, ret); + } else { + ret = keys[block]; + } + return ret; +} + +bool +ProjectBuilderMakefileGenerator::openOutput(QFile &file, const QString &build) const +{ + if(QDir::isRelativePath(file.fileName())) + file.setFileName(Option::output_dir + "/" + file.fileName()); //pwd when qmake was run + QFileInfo fi(fileInfo(file.fileName())); + if(fi.suffix() != "pbxproj" || file.fileName().isEmpty()) { + QString output = file.fileName(); + if(fi.isDir()) + output += QDir::separator(); + if(!output.endsWith(projectSuffix())) { + if(file.fileName().isEmpty() || fi.isDir()) { + if(project->first("TEMPLATE") == "subdirs" || project->isEmpty("QMAKE_ORIG_TARGET")) + output += fileInfo(project->projectFile()).baseName(); + else + output += project->first("QMAKE_ORIG_TARGET").toQString(); + } + output += projectSuffix() + QDir::separator(); + } else if(output[(int)output.length() - 1] != QDir::separator()) { + output += QDir::separator(); + } + output += QString("project.pbxproj"); + output = unescapeFilePath(output); + file.setFileName(output); + } + bool ret = UnixMakefileGenerator::openOutput(file, build); + ((ProjectBuilderMakefileGenerator*)this)->pbx_dir = Option::output_dir.section(Option::dir_sep, 0, -1); + Option::output_dir = pbx_dir.section(Option::dir_sep, 0, -2); + return ret; +} + +/* This function is such a hack it is almost pointless, but it + eliminates the warning message from ProjectBuilder that the project + file is for an older version. I guess this could be used someday if + the format of the output is dependant upon the version of + ProjectBuilder as well. +*/ +int +ProjectBuilderMakefileGenerator::pbuilderVersion() const +{ + QString ret; + if(!project->isEmpty("QMAKE_PBUILDER_VERSION")) { + ret = project->first("QMAKE_PBUILDER_VERSION").toQString(); + } else { + QString version, version_plist = project->first("QMAKE_PBUILDER_VERSION_PLIST").toQString(); + if(version_plist.isEmpty()) { +#ifdef Q_OS_DARWIN + ret = QLatin1String("34"); + QCFType cfurl; + // Check for XCode 4 first + OSStatus err = LSFindApplicationForInfo(0, CFSTR("com.apple.dt.Xcode"), 0, 0, &cfurl); + // Now check for XCode 3 + if (err == kLSApplicationNotFoundErr) + err = LSFindApplicationForInfo(0, CFSTR("com.apple.Xcode"), 0, 0, &cfurl); + if (err == noErr) { + QCFType bundle = CFBundleCreate(0, cfurl); + if (bundle) { + CFStringRef str = CFStringRef(CFBundleGetValueForInfoDictionaryKey(bundle, + CFSTR("CFBundleShortVersionString"))); + if (str) { + QStringList versions = QCFString::toQString(str).split(QLatin1Char('.')); + int versionMajor = versions.at(0).toInt(); + int versionMinor = versions.at(1).toInt(); + if (versionMajor >= 3) { + ret = QLatin1String("46"); + } else if (versionMajor >= 2) { + ret = QLatin1String("42"); + } else if (versionMajor == 1 && versionMinor >= 5) { + ret = QLatin1String("39"); + } + } + } + } +#else + if(exists("/Developer/Applications/Xcode.app/Contents/version.plist")) + version_plist = "/Developer/Applications/Xcode.app/Contents/version.plist"; + else + version_plist = "/Developer/Applications/Project Builder.app/Contents/version.plist"; +#endif + } else { + version_plist = version_plist.replace(QRegExp("\""), ""); + } + if (ret.isEmpty()) { + QFile version_file(version_plist); + if (version_file.open(QIODevice::ReadOnly)) { + debug_msg(1, "pbuilder: version.plist: Reading file: %s", version_plist.toLatin1().constData()); + QTextStream plist(&version_file); + + bool in_dict = false; + QString current_key; + QRegExp keyreg("^(.*)$"), stringreg("^(.*)$"); + while(!plist.atEnd()) { + QString line = plist.readLine().trimmed(); + if(line == "") + in_dict = true; + else if(line == "") + in_dict = false; + else if(in_dict) { + if(keyreg.exactMatch(line)) + current_key = keyreg.cap(1); + else if(current_key == "CFBundleShortVersionString" && stringreg.exactMatch(line)) + version = stringreg.cap(1); + } + } + plist.flush(); + version_file.close(); + } else { + debug_msg(1, "pbuilder: version.plist: Failure to open %s", version_plist.toLatin1().constData()); + } + if(version.isEmpty() && version_plist.contains("Xcode")) { + ret = "39"; + } else { + int versionMajor = version.left(1).toInt(); + if(versionMajor >= 2) + ret = "42"; + else if(version == "1.5") + ret = "39"; + else if(version == "1.1") + ret = "34"; + } + } + } + + if(!ret.isEmpty()) { + bool ok; + int int_ret = ret.toInt(&ok); + if(ok) { + debug_msg(1, "pbuilder: version.plist: Got version: %d", int_ret); + if (int_ret < 46) + warn_msg(WarnLogic, "XCode version is too old, at least XCode 3.2 is required"); + return int_ret; + } + } + debug_msg(1, "pbuilder: version.plist: Fallback to default version"); + return 46; //my fallback +} + +int +ProjectBuilderMakefileGenerator::reftypeForFile(const QString &where) +{ + int ret = 0; //absolute is the default.. + if(QDir::isRelativePath(unescapeFilePath(where))) + ret = 4; //relative + return ret; +} + +QString ProjectBuilderMakefileGenerator::sourceTreeForFile(const QString &where) +{ + Q_UNUSED(where) + // We always use absolute paths, instead of maintaining the SRCROOT + // build variable and making files relative to that. + return QLatin1String(""); +} + +QString +ProjectBuilderMakefileGenerator::projectSuffix() const +{ + const int pbVersion = pbuilderVersion(); + if(pbVersion >= 42) + return ".xcodeproj"; + else if(pbVersion >= 38) + return ".xcode"; + return ".pbproj"; +} + +QString +ProjectBuilderMakefileGenerator::pbxbuild() +{ + if(exists("/usr/bin/pbbuild")) + return "pbbuild"; + if(exists("/usr/bin/xcodebuild")) + return "xcodebuild"; + return (pbuilderVersion() >= 38 ? "xcodebuild" : "pbxbuild"); +} + +QString +ProjectBuilderMakefileGenerator::escapeFilePath(const QString &path) const +{ +#if 1 + //in the middle of generating a Makefile! + if(writingUnixMakefileGenerator) + return UnixMakefileGenerator::escapeFilePath(path); + + //generating stuff for the xml file! + QString ret = path; + if(!ret.isEmpty()) { + ret = unescapeFilePath(ret); + debug_msg(2, "EscapeFilePath: %s -> %s", path.toLatin1().constData(), ret.toLatin1().constData()); + } + return ret; +#else + return UnixMakefileGenerator::escapeFilePath(path); +#endif +} + +static QString quotedStringLiteral(const QString &value) +{ + QString result; + const int len = value.length(); + result.reserve(int(len * 1.1) + 2); + + result += QLatin1Char('"'); + + // Escape + for (int i = 0; i < len; ++i) { + QChar character = value.at(i);; + ushort code = character.unicode(); + switch (code) { + case '\\': + result += QLatin1String("\\\\"); + break; + case '"': + result += QLatin1String("\\\""); + break; + case '\b': + result += QLatin1String("\\b"); + break; + case '\n': + result += QLatin1String("\\n"); + break; + case '\r': + result += QLatin1String("\\r"); + break; + case '\t': + result += QLatin1String("\\t"); + break; + default: + if (code >= 32 && code <= 127) + result += character; + else + result += QLatin1String("\\u") + QString::number(code, 16).rightJustified(4, '0'); + } + } + + result += QLatin1Char('"'); + + result.squeeze(); + return result; +} + +QString +ProjectBuilderMakefileGenerator::writeSettings(const QString &var, const ProStringList &vals, int flags, int indent_level) +{ + QString ret; + bool shouldQuote = !((flags & SettingsNoQuote)); + + QString newline = "\n"; + for(int i = 0; i < indent_level; ++i) + newline += "\t"; + + static QRegExp allowedVariableCharacters("^[a-zA-Z0-9_]*$"); + ret += var.contains(allowedVariableCharacters) ? var : quotedStringLiteral(var); + + ret += " = "; + + if(flags & SettingsAsList) { + ret += "(" + newline; + for(int i = 0, count = 0; i < vals.size(); ++i) { + QString val = vals.at(i).toQString(); + if(!val.isEmpty()) { + if(count++ > 0) + ret += "," + newline; + if (shouldQuote) + val = quotedStringLiteral(val); + ret += val; + } + } + ret += ")"; + } else { + QString val = vals.join(QLatin1Char(' ')); + if (shouldQuote) + val = quotedStringLiteral(val); + ret += val; + } + return ret; +} + +QT_END_NAMESPACE diff --git a/Telegram/_qt_5_3_0_patch/qtbase/qmake/generators/makefile.cpp b/Telegram/_qt_5_3_0_patch/qtbase/qmake/generators/makefile.cpp new file mode 100644 index 000000000..6eba1ef6c --- /dev/null +++ b/Telegram/_qt_5_3_0_patch/qtbase/qmake/generators/makefile.cpp @@ -0,0 +1,3378 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the qmake application of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "makefile.h" +#include "option.h" +#include "cachekeys.h" +#include "meta.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(Q_OS_UNIX) +#include +#else +#include +#endif +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +// Well, Windows doesn't have this, so here's the macro +#ifndef S_ISDIR +# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#endif + +bool MakefileGenerator::canExecute(const QStringList &cmdline, int *a) const +{ + int argv0 = -1; + for(int i = 0; i < cmdline.count(); ++i) { + if(!cmdline.at(i).contains('=')) { + argv0 = i; + break; + } + } + if(a) + *a = argv0; + if(argv0 != -1) { + const QString c = Option::fixPathToLocalOS(cmdline.at(argv0), true); + if(exists(c)) + return true; + } + return false; +} + +QString MakefileGenerator::mkdir_p_asstring(const QString &dir, bool escape) const +{ + QString edir = escape ? escapeFilePath(Option::fixPathToTargetOS(dir, false, false)) : dir; + return "@" + makedir.arg(edir); +} + +bool MakefileGenerator::mkdir(const QString &in_path) const +{ + QString path = Option::fixPathToLocalOS(in_path); + if(QFile::exists(path)) + return true; + + QDir d; + if(path.startsWith(QDir::separator())) { + d.cd(QString(QDir::separator())); + path.remove(0, 1); + } + bool ret = true; +#ifdef Q_OS_WIN + bool driveExists = true; + if(!QDir::isRelativePath(path)) { + if(QFile::exists(path.left(3))) { + d.cd(path.left(3)); + path.remove(0, 3); + } else { + warn_msg(WarnLogic, "Cannot access drive '%s' (%s)", + path.left(3).toLatin1().data(), path.toLatin1().data()); + driveExists = false; + } + } + if(driveExists) +#endif + { + QStringList subs = path.split(QDir::separator()); + for(QStringList::Iterator subit = subs.begin(); subit != subs.end(); ++subit) { + if(!d.cd(*subit)) { + d.mkdir((*subit)); + if(d.exists((*subit))) { + d.cd((*subit)); + } else { + ret = false; + break; + } + } + } + } + return ret; +} + +// ** base makefile generator +MakefileGenerator::MakefileGenerator() : + init_opath_already(false), init_already(false), no_io(false), project(0) +{ +} + + +void +MakefileGenerator::verifyCompilers() +{ + ProValueMap &v = project->variables(); + ProStringList &quc = v["QMAKE_EXTRA_COMPILERS"]; + for(int i = 0; i < quc.size(); ) { + bool error = false; + const ProString &comp = quc.at(i); + const ProKey okey(comp + ".output"); + if (v[okey].isEmpty()) { + const ProKey ofkey(comp + ".output_function"); + if (!v[ofkey].isEmpty()) { + v[okey].append("${QMAKE_FUNC_FILE_IN_" + v[ofkey].first() + "}"); + } else { + error = true; + warn_msg(WarnLogic, "Compiler: %s: No output file specified", comp.toLatin1().constData()); + } + } else if (v[ProKey(comp + ".input")].isEmpty()) { + error = true; + warn_msg(WarnLogic, "Compiler: %s: No input variable specified", comp.toLatin1().constData()); + } + if(error) + quc.removeAt(i); + else + ++i; + } +} + +void +MakefileGenerator::initOutPaths() +{ + if(init_opath_already) + return; + verifyCompilers(); + init_opath_already = true; + ProValueMap &v = project->variables(); + //for shadow builds + if(!v.contains("QMAKE_ABSOLUTE_SOURCE_PATH")) { + if (Option::globals->do_cache && !project->cacheFile().isEmpty() && + v.contains("QMAKE_ABSOLUTE_SOURCE_ROOT")) { + QString root = v["QMAKE_ABSOLUTE_SOURCE_ROOT"].first().toQString(); + root = QDir::fromNativeSeparators(root); + if(!root.isEmpty()) { + QFileInfo fi = fileInfo(project->cacheFile()); + if(!fi.makeAbsolute()) { + QString cache_r = fi.path(), pwd = Option::output_dir; + if(pwd.startsWith(cache_r) && !pwd.startsWith(root)) { + pwd = root + pwd.mid(cache_r.length()); + if(exists(pwd)) + v.insert("QMAKE_ABSOLUTE_SOURCE_PATH", ProStringList(pwd)); + } + } + } + } + } + if(!v["QMAKE_ABSOLUTE_SOURCE_PATH"].isEmpty()) { + ProString &asp = v["QMAKE_ABSOLUTE_SOURCE_PATH"].first(); + asp = QDir::fromNativeSeparators(asp.toQString()); + if(asp.isEmpty() || asp == Option::output_dir) //if they're the same, why bother? + v["QMAKE_ABSOLUTE_SOURCE_PATH"].clear(); + } + + QString currentDir = qmake_getpwd(); //just to go back to + + //some builtin directories + if(project->isEmpty("PRECOMPILED_DIR") && !project->isEmpty("OBJECTS_DIR")) + v["PRECOMPILED_DIR"] = v["OBJECTS_DIR"]; + static const char * const dirs[] = { "OBJECTS_DIR", "DESTDIR", + "SUBLIBS_DIR", "DLLDESTDIR", + "PRECOMPILED_DIR", "PLIST_DIR", 0 }; + for (int x = 0; dirs[x]; x++) { + const ProKey dkey(dirs[x]); + if (v[dkey].isEmpty()) + continue; + const ProString orig_path = v[dkey].first(); + + ProString &pathRef = v[dkey].first(); + pathRef = fileFixify(pathRef.toQString(), Option::output_dir, Option::output_dir); + +#ifdef Q_OS_WIN + // We don't want to add a separator for DLLDESTDIR on Windows (###why?) + if(!(dirs[x] == "DLLDESTDIR")) +#endif + { + if(!pathRef.endsWith(Option::dir_sep)) + pathRef += Option::dir_sep; + } + + if (noIO() || (project->first("TEMPLATE") == "subdirs")) + continue; + + QString path = project->first(dkey).toQString(); //not to be changed any further + path = fileFixify(path, currentDir, Option::output_dir); + debug_msg(3, "Fixed output_dir %s (%s) into %s", dirs[x], + orig_path.toLatin1().constData(), path.toLatin1().constData()); + if(!mkdir(path)) + warn_msg(WarnLogic, "%s: Cannot access directory '%s'", dirs[x], + path.toLatin1().constData()); + } + + //out paths from the extra compilers + const ProStringList &quc = project->values("QMAKE_EXTRA_COMPILERS"); + for (ProStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it) { + QString tmp_out = project->first(ProKey(*it + ".output")).toQString(); + if(tmp_out.isEmpty()) + continue; + const ProStringList &tmp = project->values(ProKey(*it + ".input")); + for (ProStringList::ConstIterator it2 = tmp.begin(); it2 != tmp.end(); ++it2) { + ProStringList &inputs = project->values((*it2).toKey()); + for (ProStringList::Iterator input = inputs.begin(); input != inputs.end(); ++input) { + QString finp = fileFixify((*input).toQString(), Option::output_dir, Option::output_dir); + *input = ProString(finp); + QString path = unescapeFilePath(replaceExtraCompilerVariables(tmp_out, finp, QString())); + path = Option::fixPathToTargetOS(path); + int slash = path.lastIndexOf(Option::dir_sep); + if(slash != -1) { + path = path.left(slash); + // Make out path only if it does not contain makefile variables + if(!path.contains("${")) + if(path != "." && + !mkdir(fileFixify(path, qmake_getpwd(), Option::output_dir))) + warn_msg(WarnLogic, "%s: Cannot access directory '%s'", + (*it).toLatin1().constData(), path.toLatin1().constData()); + } + } + } + } + + if(!v["DESTDIR"].isEmpty()) { + QDir d(v["DESTDIR"].first().toQString()); + if(Option::fixPathToLocalOS(d.absolutePath()) == Option::fixPathToLocalOS(Option::output_dir)) + v.remove("DESTDIR"); + } +} + +QMakeProject +*MakefileGenerator::projectFile() const +{ + return project; +} + +void +MakefileGenerator::setProjectFile(QMakeProject *p) +{ + if(project) + return; + project = p; + if (project->isActiveConfig("win32")) + target_mode = TARG_WIN_MODE; + else if (project->isActiveConfig("mac")) + target_mode = TARG_MAC_MODE; + else + target_mode = TARG_UNIX_MODE; + init(); + findLibraries(); + if(Option::qmake_mode == Option::QMAKE_GENERATE_MAKEFILE && + project->isActiveConfig("link_prl")) //load up prl's' + processPrlFiles(); +} + +ProStringList +MakefileGenerator::findFilesInVPATH(ProStringList l, uchar flags, const QString &vpath_var) +{ + ProStringList vpath; + const ProValueMap &v = project->variables(); + for(int val_it = 0; val_it < l.count(); ) { + bool remove_file = false; + ProString &val = l[val_it]; + if(!val.isEmpty()) { + QString qval = val.toQString(); + QString file = fixEnvVariables(qval); + if (file.isEmpty()) { + ++val_it; + continue; + } + if(!(flags & VPATH_NoFixify)) + file = fileFixify(file, qmake_getpwd(), Option::output_dir); + if (file.at(0) == '\"' && file.at(file.length() - 1) == '\"') + file = file.mid(1, file.length() - 2); + + if(exists(file)) { + ++val_it; + continue; + } + bool found = false; + if (QDir::isRelativePath(qval)) { + if(vpath.isEmpty()) { + if(!vpath_var.isEmpty()) + vpath = v[ProKey(vpath_var)]; + vpath += v["VPATH"] + v["QMAKE_ABSOLUTE_SOURCE_PATH"]; + if(Option::output_dir != qmake_getpwd()) + vpath << Option::output_dir; + } + for (ProStringList::Iterator vpath_it = vpath.begin(); + vpath_it != vpath.end(); ++vpath_it) { + QString real_dir = Option::fixPathToLocalOS((*vpath_it).toQString()); + if(exists(real_dir + QDir::separator() + val)) { + ProString dir = (*vpath_it); + if(!dir.endsWith(Option::dir_sep)) + dir += Option::dir_sep; + val = dir + val; + if(!(flags & VPATH_NoFixify)) + val = fileFixify(val.toQString()); + found = true; + debug_msg(1, "Found file through vpath %s -> %s", + file.toLatin1().constData(), val.toLatin1().constData()); + break; + } + } + } + if(!found) { + QString dir, regex = val.toQString(), real_dir; + if(regex.lastIndexOf(Option::dir_sep) != -1) { + dir = regex.left(regex.lastIndexOf(Option::dir_sep) + 1); + real_dir = dir; + if(!(flags & VPATH_NoFixify)) + real_dir = fileFixify(real_dir, qmake_getpwd(), Option::output_dir) + '/'; + regex.remove(0, dir.length()); + } + if(real_dir.isEmpty() || exists(real_dir)) { + QStringList files = QDir(real_dir).entryList(QStringList(regex)); + if(files.isEmpty()) { + debug_msg(1, "%s:%d Failure to find %s in vpath (%s)", + __FILE__, __LINE__, + val.toLatin1().constData(), vpath.join("::").toLatin1().constData()); + if(flags & VPATH_RemoveMissingFiles) + remove_file = true; + else if(flags & VPATH_WarnMissingFiles) + warn_msg(WarnLogic, "Failure to find: %s", val.toLatin1().constData()); + } else { + l.removeAt(val_it); + QString a; + for(int i = (int)files.count()-1; i >= 0; i--) { + if(files[i] == "." || files[i] == "..") + continue; + a = real_dir + files[i]; + if(!(flags & VPATH_NoFixify)) + a = fileFixify(a); + l.insert(val_it, a); + } + } + } else { + debug_msg(1, "%s:%d Cannot match %s%s, as %s does not exist.", + __FILE__, __LINE__, real_dir.toLatin1().constData(), + regex.toLatin1().constData(), real_dir.toLatin1().constData()); + if(flags & VPATH_RemoveMissingFiles) + remove_file = true; + else if(flags & VPATH_WarnMissingFiles) + warn_msg(WarnLogic, "Failure to find: %s", val.toLatin1().constData()); + } + } + } + if(remove_file) + l.removeAt(val_it); + else + ++val_it; + } + return l; +} + +void +MakefileGenerator::initCompiler(const MakefileGenerator::Compiler &comp) +{ + ProValueMap &v = project->variables(); + ProStringList &l = v[ProKey(comp.variable_in)]; + // find all the relevant file inputs + if(!init_compiler_already.contains(comp.variable_in)) { + init_compiler_already.insert(comp.variable_in, true); + if(!noIO()) + l = findFilesInVPATH(l, (comp.flags & Compiler::CompilerRemoveNoExist) ? + VPATH_RemoveMissingFiles : VPATH_WarnMissingFiles, "VPATH_" + comp.variable_in); + } +} + +void +MakefileGenerator::init() +{ + initOutPaths(); + if(init_already) + return; + verifyCompilers(); + init_already = true; + + ProValueMap &v = project->variables(); + + if (v["TARGET"].isEmpty()) + warn_msg(WarnLogic, "TARGET is empty"); + + makedir = v["QMAKE_MKDIR_CMD"].join(' '); + chkexists = v["QMAKE_CHK_EXISTS"].join(' '); + if (makedir.isEmpty()) { // Backwards compat with Qt < 5.0.2 specs + if (isWindowsShell()) { + makedir = "if not exist %1 mkdir %1 & if not exist %1 exit 1"; + chkexists = "if not exist %1"; + } else { + makedir = "test -d %1 || mkdir -p %1"; + chkexists = "test -e %1 ||"; + } + } + + if (v["QMAKE_CC_O_FLAG"].isEmpty()) + v["QMAKE_CC_O_FLAG"].append("-o "); + + if (v["QMAKE_LINK_O_FLAG"].isEmpty()) + v["QMAKE_LINK_O_FLAG"].append("-o "); + + setSystemIncludes(v["QMAKE_DEFAULT_INCDIRS"]); + + ProStringList &quc = v["QMAKE_EXTRA_COMPILERS"]; + + //make sure the COMPILERS are in the correct input/output chain order + for(int comp_out = 0, jump_count = 0; comp_out < quc.size(); ++comp_out) { + continue_compiler_chain: + if(jump_count > quc.size()) //just to avoid an infinite loop here + break; + const ProKey vokey(quc.at(comp_out) + ".variable_out"); + if (v.contains(vokey)) { + const ProStringList &outputs = v.value(vokey); + for(int out = 0; out < outputs.size(); ++out) { + for(int comp_in = 0; comp_in < quc.size(); ++comp_in) { + if(comp_in == comp_out) + continue; + const ProKey ikey(quc.at(comp_in) + ".input"); + if (v.contains(ikey)) { + const ProStringList &inputs = v.value(ikey); + for(int in = 0; in < inputs.size(); ++in) { + if(inputs.at(in) == outputs.at(out) && comp_out > comp_in) { + ++jump_count; + //move comp_out to comp_in and continue the compiler chain + // quc.move(comp_out, comp_in); + quc.insert(comp_in, quc.value(comp_out)); + // comp_out > comp_in, so the insertion did move everything up + quc.remove(comp_out + 1); + comp_out = comp_in; + goto continue_compiler_chain; + } + } + } + } + } + } + } + + if(!project->isEmpty("QMAKE_SUBSTITUTES")) { + const ProStringList &subs = v["QMAKE_SUBSTITUTES"]; + for(int i = 0; i < subs.size(); ++i) { + QString sub = subs.at(i).toQString(); + QString inn = sub + ".input", outn = sub + ".output"; + const ProKey innkey(inn), outnkey(outn); + if (v.contains(innkey) || v.contains(outnkey)) { + if (!v.contains(innkey) || !v.contains(outnkey)) { + warn_msg(WarnLogic, "Substitute '%s' has only one of .input and .output", + sub.toLatin1().constData()); + continue; + } + const ProStringList &tinn = v[innkey], &toutn = v[outnkey]; + if (tinn.length() != 1) { + warn_msg(WarnLogic, "Substitute '%s.input' does not have exactly one value", + sub.toLatin1().constData()); + continue; + } + if (toutn.length() != 1) { + warn_msg(WarnLogic, "Substitute '%s.output' does not have exactly one value", + sub.toLatin1().constData()); + continue; + } + inn = fileFixify(tinn.first().toQString(), qmake_getpwd()); + outn = fileFixify(toutn.first().toQString(), qmake_getpwd(), Option::output_dir); + } else { + inn = fileFixify(sub, qmake_getpwd()); + if (!QFile::exists(inn)) { + // random insanity for backwards compat: .in file specified with absolute out dir + inn = fileFixify(sub); + } + if(!inn.endsWith(".in")) { + warn_msg(WarnLogic, "Substitute '%s' does not end with '.in'", + inn.toLatin1().constData()); + continue; + } + outn = fileFixify(inn.left(inn.length()-3), qmake_getpwd(), Option::output_dir); + } + + const ProKey confign(sub + ".CONFIG"); + bool verbatim = false; + if (v.contains(confign)) + verbatim = v[confign].contains(QLatin1String("verbatim")); + + QFile in(inn); + if (in.open(QFile::ReadOnly)) { + QByteArray contentBytes; + if (verbatim) { + contentBytes = in.readAll(); + } else { + QString contents; + QStack state; + enum { IN_CONDITION, MET_CONDITION, PENDING_CONDITION }; + for (int count = 1; !in.atEnd(); ++count) { + QString line = QString::fromUtf8(in.readLine()); + if (line.startsWith("!!IF ")) { + if (state.isEmpty() || state.top() == IN_CONDITION) { + QString test = line.mid(5, line.length()-(5+1)); + if (project->test(test, inn, count)) + state.push(IN_CONDITION); + else + state.push(PENDING_CONDITION); + } else { + state.push(MET_CONDITION); + } + } else if (line.startsWith("!!ELIF ")) { + if (state.isEmpty()) { + warn_msg(WarnLogic, "(%s:%d): Unexpected else condition", + in.fileName().toLatin1().constData(), count); + } else if (state.top() == PENDING_CONDITION) { + QString test = line.mid(7, line.length()-(7+1)); + if (project->test(test, inn, count)) { + state.pop(); + state.push(IN_CONDITION); + } + } else if (state.top() == IN_CONDITION) { + state.pop(); + state.push(MET_CONDITION); + } + } else if (line.startsWith("!!ELSE")) { + if (state.isEmpty()) { + warn_msg(WarnLogic, "(%s:%d): Unexpected else condition", + in.fileName().toLatin1().constData(), count); + } else if (state.top() == PENDING_CONDITION) { + state.pop(); + state.push(IN_CONDITION); + } else if (state.top() == IN_CONDITION) { + state.pop(); + state.push(MET_CONDITION); + } + } else if (line.startsWith("!!ENDIF")) { + if (state.isEmpty()) + warn_msg(WarnLogic, "(%s:%d): Unexpected endif", + in.fileName().toLatin1().constData(), count); + else + state.pop(); + } else if (state.isEmpty() || state.top() == IN_CONDITION) { + contents += project->expand(line, in.fileName(), count); + } + } + contentBytes = contents.toUtf8(); + } + QFile out(outn); + if (out.exists() && out.open(QFile::ReadOnly)) { + QByteArray old = out.readAll(); + if (contentBytes == old) { + v["QMAKE_INTERNAL_INCLUDED_FILES"].append(in.fileName()); + continue; + } + out.close(); + if(!out.remove()) { + warn_msg(WarnLogic, "Cannot clear substitute '%s'", + out.fileName().toLatin1().constData()); + continue; + } + } + mkdir(QFileInfo(out).absolutePath()); + if(out.open(QFile::WriteOnly)) { + v["QMAKE_INTERNAL_INCLUDED_FILES"].append(in.fileName()); + out.write(contentBytes); + } else { + warn_msg(WarnLogic, "Cannot open substitute for output '%s'", + out.fileName().toLatin1().constData()); + } + } else { + warn_msg(WarnLogic, "Cannot open substitute for input '%s'", + in.fileName().toLatin1().constData()); + } + } + } + + int x; + + //build up a list of compilers + QList compilers; + { + const char *builtins[] = { "OBJECTS", "SOURCES", "PRECOMPILED_HEADER", 0 }; + for(x = 0; builtins[x]; ++x) { + Compiler compiler; + compiler.variable_in = builtins[x]; + compiler.flags = Compiler::CompilerBuiltin; + compiler.type = QMakeSourceFileInfo::TYPE_C; + if(!strcmp(builtins[x], "OBJECTS")) + compiler.flags |= Compiler::CompilerNoCheckDeps; + compilers.append(compiler); + } + for (ProStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it) { + const ProStringList &inputs = v[ProKey(*it + ".input")]; + for(x = 0; x < inputs.size(); ++x) { + Compiler compiler; + compiler.variable_in = inputs.at(x).toQString(); + compiler.flags = Compiler::CompilerNoFlags; + const ProStringList &config = v[ProKey(*it + ".CONFIG")]; + if (config.indexOf("ignore_no_exist") != -1) + compiler.flags |= Compiler::CompilerRemoveNoExist; + if (config.indexOf("no_dependencies") != -1) + compiler.flags |= Compiler::CompilerNoCheckDeps; + if (config.indexOf("add_inputs_as_makefile_deps") != -1) + compiler.flags |= Compiler::CompilerAddInputsAsMakefileDeps; + + const ProKey dkey(*it + ".dependency_type"); + ProString dep_type; + if (!project->isEmpty(dkey)) + dep_type = project->first(dkey); + if (dep_type.isEmpty()) + compiler.type = QMakeSourceFileInfo::TYPE_UNKNOWN; + else if(dep_type == "TYPE_UI") + compiler.type = QMakeSourceFileInfo::TYPE_UI; + else + compiler.type = QMakeSourceFileInfo::TYPE_C; + compilers.append(compiler); + } + } + } + { //do the path fixifying + ProStringList paths; + for(x = 0; x < compilers.count(); ++x) { + if(!paths.contains(compilers.at(x).variable_in)) + paths << compilers.at(x).variable_in; + } + paths << "INCLUDEPATH" << "QMAKE_INTERNAL_INCLUDED_FILES" << "PRECOMPILED_HEADER"; + for(int y = 0; y < paths.count(); y++) { + ProStringList &l = v[paths[y].toKey()]; + for (ProStringList::Iterator it = l.begin(); it != l.end(); ++it) { + if((*it).isEmpty()) + continue; + QString fn = (*it).toQString(); + if (exists(fn)) + (*it) = fileFixify(fn); + } + } + } + + if(noIO() || !doDepends() || project->isActiveConfig("GNUmake")) + QMakeSourceFileInfo::setDependencyMode(QMakeSourceFileInfo::NonRecursive); + for(x = 0; x < compilers.count(); ++x) + initCompiler(compilers.at(x)); + + //merge actual compiler outputs into their variable_out. This is done last so that + //files are already properly fixified. + for (ProStringList::Iterator it = quc.begin(); it != quc.end(); ++it) { + const ProKey ikey(*it + ".input"); + const ProKey vokey(*it + ".variable_out"); + const ProStringList &config = project->values(ProKey(*it + ".CONFIG")); + const ProString &tmp_out = project->values(ProKey(*it + ".output")).first(); + if(tmp_out.isEmpty()) + continue; + if (config.indexOf("combine") != -1) { + const ProStringList &compilerInputs = project->values(ikey); + // Don't generate compiler output if it doesn't have input. + if (compilerInputs.isEmpty() || project->values(compilerInputs.first().toKey()).isEmpty()) + continue; + if(tmp_out.indexOf("$") == -1) { + if(!verifyExtraCompiler((*it), QString())) //verify + continue; + QString out = fileFixify(tmp_out.toQString(), Option::output_dir, Option::output_dir); + bool pre_dep = (config.indexOf("target_predeps") != -1); + if (v.contains(vokey)) { + const ProStringList &var_out = v.value(vokey); + for(int i = 0; i < var_out.size(); ++i) { + ProKey v = var_out.at(i).toKey(); + if(v == QLatin1String("SOURCES")) + v = "GENERATED_SOURCES"; + else if(v == QLatin1String("OBJECTS")) + pre_dep = false; + ProStringList &list = project->values(v); + if(!list.contains(out)) + list.append(out); + } + } else if (config.indexOf("no_link") == -1) { + ProStringList &list = project->values("OBJECTS"); + pre_dep = false; + if(!list.contains(out)) + list.append(out); + } else { + ProStringList &list = project->values("UNUSED_SOURCES"); + if(!list.contains(out)) + list.append(out); + } + if(pre_dep) { + ProStringList &list = project->values("PRE_TARGETDEPS"); + if(!list.contains(out)) + list.append(out); + } + } + } else { + const ProStringList &tmp = project->values(ikey); + for (ProStringList::ConstIterator it2 = tmp.begin(); it2 != tmp.end(); ++it2) { + const ProStringList &inputs = project->values((*it2).toKey()); + for (ProStringList::ConstIterator input = inputs.constBegin(); input != inputs.constEnd(); ++input) { + if((*input).isEmpty()) + continue; + QString inpf = (*input).toQString(); + QString in = Option::fixPathToTargetOS(inpf, false); + if (!verifyExtraCompiler((*it).toQString(), in)) //verify + continue; + QString out = replaceExtraCompilerVariables(tmp_out.toQString(), inpf, QString()); + out = fileFixify(out, Option::output_dir, Option::output_dir); + bool pre_dep = (config.indexOf("target_predeps") != -1); + if (v.contains(vokey)) { + const ProStringList &var_out = project->values(vokey); + for(int i = 0; i < var_out.size(); ++i) { + ProKey v = var_out.at(i).toKey(); + if(v == QLatin1String("SOURCES")) + v = "GENERATED_SOURCES"; + else if(v == QLatin1String("OBJECTS")) + pre_dep = false; + ProStringList &list = project->values(v); + if(!list.contains(out)) + list.append(out); + } + } else if (config.indexOf("no_link") == -1) { + pre_dep = false; + ProStringList &list = project->values("OBJECTS"); + if(!list.contains(out)) + list.append(out); + } else { + ProStringList &list = project->values("UNUSED_SOURCES"); + if(!list.contains(out)) + list.append(out); + } + if(pre_dep) { + ProStringList &list = project->values("PRE_TARGETDEPS"); + if(!list.contains(out)) + list.append(out); + } + } + } + } + } + + //handle dependencies + depHeuristicsCache.clear(); + if(!noIO()) { + // dependency paths + ProStringList incDirs = v["DEPENDPATH"] + v["QMAKE_ABSOLUTE_SOURCE_PATH"]; + if(project->isActiveConfig("depend_includepath")) + incDirs += v["INCLUDEPATH"]; + if(!project->isActiveConfig("no_include_pwd")) { + QString pwd = qmake_getpwd(); + if(pwd.isEmpty()) + pwd = "."; + incDirs += pwd; + } + QList deplist; + for (ProStringList::Iterator it = incDirs.begin(); it != incDirs.end(); ++it) + deplist.append(QMakeLocalFileName(unescapeFilePath((*it).toQString()))); + QMakeSourceFileInfo::setDependencyPaths(deplist); + debug_msg(1, "Dependency Directories: %s", incDirs.join(" :: ").toLatin1().constData()); + //cache info + if(project->isActiveConfig("qmake_cache")) { + QString cache_file; + if(!project->isEmpty("QMAKE_INTERNAL_CACHE_FILE")) { + cache_file = QDir::fromNativeSeparators(project->first("QMAKE_INTERNAL_CACHE_FILE").toQString()); + } else { + cache_file = ".qmake.internal.cache"; + if(project->isActiveConfig("build_pass")) + cache_file += ".BUILD." + project->first("BUILD_PASS"); + } + if(cache_file.indexOf('/') == -1) + cache_file.prepend(Option::output_dir + '/'); + QMakeSourceFileInfo::setCacheFile(cache_file); + } + + //add to dependency engine + for(x = 0; x < compilers.count(); ++x) { + const MakefileGenerator::Compiler &comp = compilers.at(x); + if(!(comp.flags & Compiler::CompilerNoCheckDeps)) { + const ProKey ikey(comp.variable_in); + addSourceFiles(v[ikey], QMakeSourceFileInfo::SEEK_DEPS, + (QMakeSourceFileInfo::SourceFileType)comp.type); + + if (comp.flags & Compiler::CompilerAddInputsAsMakefileDeps) { + ProStringList &l = v[ikey]; + for (int i=0; i < l.size(); ++i) { + if(v["QMAKE_INTERNAL_INCLUDED_FILES"].indexOf(l.at(i)) == -1) + v["QMAKE_INTERNAL_INCLUDED_FILES"].append(l.at(i)); + } + } + } + } + } + + processSources(); //remove anything in SOURCES which is included (thus it need not be linked in) + + //all sources and generated sources must be turned into objects at some point (the one builtin compiler) + v["OBJECTS"] += createObjectList(v["SOURCES"]) + createObjectList(v["GENERATED_SOURCES"]); + + //Translation files + if(!project->isEmpty("TRANSLATIONS")) { + ProStringList &trf = project->values("TRANSLATIONS"); + for (ProStringList::Iterator it = trf.begin(); it != trf.end(); ++it) + (*it) = Option::fixPathToLocalOS((*it).toQString()); + } + + if(!project->isActiveConfig("no_include_pwd")) { //get the output_dir into the pwd + if(Option::output_dir != qmake_getpwd()) + project->values("INCLUDEPATH").append("."); + } + + //fix up the target deps + static const char * const fixpaths[] = { "PRE_TARGETDEPS", "POST_TARGETDEPS", 0 }; + for (int path = 0; fixpaths[path]; path++) { + ProStringList &l = v[fixpaths[path]]; + for (ProStringList::Iterator val_it = l.begin(); val_it != l.end(); ++val_it) { + if(!(*val_it).isEmpty()) + (*val_it) = escapeDependencyPath(Option::fixPathToTargetOS((*val_it).toQString(), false, false)); + } + } + + //extra depends + if(!project->isEmpty("DEPENDS")) { + ProStringList &l = v["DEPENDS"]; + for (ProStringList::Iterator it = l.begin(); it != l.end(); ++it) { + const ProStringList &files = v[ProKey(*it + ".file")] + v[ProKey(*it + ".files")]; //why do I support such evil things? + for (ProStringList::ConstIterator file_it = files.begin(); file_it != files.end(); ++file_it) { + QStringList &out_deps = findDependencies((*file_it).toQString()); + const ProStringList &in_deps = v[ProKey(*it + ".depends")]; //even more evilness.. + for (ProStringList::ConstIterator dep_it = in_deps.begin(); dep_it != in_deps.end(); ++dep_it) { + QString dep = (*dep_it).toQString(); + if (exists(dep)) { + out_deps.append(dep); + } else { + QString dir, regex = Option::fixPathToLocalOS(dep); + if(regex.lastIndexOf(Option::dir_sep) != -1) { + dir = regex.left(regex.lastIndexOf(Option::dir_sep) + 1); + regex.remove(0, dir.length()); + } + QStringList files = QDir(dir).entryList(QStringList(regex)); + if(files.isEmpty()) { + warn_msg(WarnLogic, "Dependency for [%s]: Not found %s", (*file_it).toLatin1().constData(), + dep.toLatin1().constData()); + } else { + for(int i = 0; i < files.count(); i++) + out_deps.append(dir + files[i]); + } + } + } + } + } + } + + // escape qmake command + project->values("QMAKE_QMAKE") = + ProStringList(escapeFilePath(Option::fixPathToTargetOS(Option::globals->qmake_abslocation, false))); +} + +bool +MakefileGenerator::processPrlFile(QString &file) +{ + bool ret = false, try_replace_file=false; + QString meta_file, orig_file = file; + if(QMakeMetaInfo::libExists(file)) { + try_replace_file = true; + meta_file = file; + file = ""; + } else { + QString tmp = file; + int ext = tmp.lastIndexOf('.'); + if(ext != -1) + tmp = tmp.left(ext); + meta_file = tmp; + } +// meta_file = fileFixify(meta_file); + QString real_meta_file = Option::fixPathToLocalOS(meta_file); + if(!meta_file.isEmpty()) { + QString f = fileFixify(real_meta_file, qmake_getpwd(), Option::output_dir); + if(QMakeMetaInfo::libExists(f)) { + QMakeMetaInfo libinfo(project); + debug_msg(1, "Processing PRL file: %s", real_meta_file.toLatin1().constData()); + if(!libinfo.readLib(f)) { + fprintf(stderr, "Error processing meta file: %s\n", real_meta_file.toLatin1().constData()); + } else if(project->isActiveConfig("no_read_prl_" + libinfo.type().toLower())) { + debug_msg(2, "Ignored meta file %s [%s]", real_meta_file.toLatin1().constData(), libinfo.type().toLatin1().constData()); + } else { + ret = true; + project->values("QMAKE_CURRENT_PRL_LIBS") = libinfo.values("QMAKE_PRL_LIBS"); + ProStringList &defs = project->values("DEFINES"); + const ProStringList &prl_defs = project->values("PRL_EXPORT_DEFINES"); + foreach (const ProString &def, libinfo.values("QMAKE_PRL_DEFINES")) + if (!defs.contains(def) && prl_defs.contains(def)) + defs.append(def); + if(try_replace_file && !libinfo.isEmpty("QMAKE_PRL_TARGET")) { + QString dir; + int slsh = real_meta_file.lastIndexOf(Option::dir_sep); + if(slsh != -1) + dir = real_meta_file.left(slsh+1); + file = libinfo.first("QMAKE_PRL_TARGET").toQString(); + if(QDir::isRelativePath(file)) + file.prepend(dir); + } + } + } + if(ret) { + QString mf = QMakeMetaInfo::findLib(meta_file); + if(project->values("QMAKE_PRL_INTERNAL_FILES").indexOf(mf) == -1) + project->values("QMAKE_PRL_INTERNAL_FILES").append(mf); + if(project->values("QMAKE_INTERNAL_INCLUDED_FILES").indexOf(mf) == -1) + project->values("QMAKE_INTERNAL_INCLUDED_FILES").append(mf); + } + } + if(try_replace_file && file.isEmpty()) { +#if 0 + warn_msg(WarnLogic, "Found prl [%s] file with no target [%s]!", meta_file.toLatin1().constData(), + orig_file.toLatin1().constData()); +#endif + file = orig_file; + } + return ret; +} + +void +MakefileGenerator::filterIncludedFiles(const char *var) +{ + ProStringList &inputs = project->values(var); + for (ProStringList::Iterator input = inputs.begin(); input != inputs.end(); ) { + if (QMakeSourceFileInfo::included((*input).toQString()) > 0) + input = inputs.erase(input); + else + ++input; + } +} + +void +MakefileGenerator::processPrlFiles() +{ + qFatal("MakefileGenerator::processPrlFiles() called!"); +} + +void +MakefileGenerator::writePrlFile(QTextStream &t) +{ + ProString target = project->first("TARGET"); + int slsh = target.lastIndexOf(Option::dir_sep); + if(slsh != -1) + target.chopFront(slsh + 1); + QString bdir = Option::output_dir; + if(bdir.isEmpty()) + bdir = qmake_getpwd(); + t << "QMAKE_PRL_BUILD_DIR = " << bdir << endl; + + t << "QMAKE_PRO_INPUT = " << project->projectFile().section('/', -1) << endl; + + if(!project->isEmpty("QMAKE_ABSOLUTE_SOURCE_PATH")) + t << "QMAKE_PRL_SOURCE_DIR = " << project->first("QMAKE_ABSOLUTE_SOURCE_PATH") << endl; + t << "QMAKE_PRL_TARGET = " << target << endl; + if(!project->isEmpty("PRL_EXPORT_DEFINES")) + t << "QMAKE_PRL_DEFINES = " << project->values("PRL_EXPORT_DEFINES").join(' ') << endl; + if(!project->isEmpty("PRL_EXPORT_CFLAGS")) + t << "QMAKE_PRL_CFLAGS = " << project->values("PRL_EXPORT_CFLAGS").join(' ') << endl; + if(!project->isEmpty("PRL_EXPORT_CXXFLAGS")) + t << "QMAKE_PRL_CXXFLAGS = " << project->values("PRL_EXPORT_CXXFLAGS").join(' ') << endl; + if(!project->isEmpty("CONFIG")) + t << "QMAKE_PRL_CONFIG = " << project->values("CONFIG").join(' ') << endl; + if(!project->isEmpty("TARGET_VERSION_EXT")) + t << "QMAKE_PRL_VERSION = " << project->first("TARGET_VERSION_EXT") << endl; + else if(!project->isEmpty("VERSION")) + t << "QMAKE_PRL_VERSION = " << project->first("VERSION") << endl; + if(project->isActiveConfig("staticlib") || project->isActiveConfig("explicitlib")) { + ProStringList libs; + if(!project->isEmpty("QMAKE_INTERNAL_PRL_LIBS")) + libs = project->values("QMAKE_INTERNAL_PRL_LIBS"); + else + libs << "QMAKE_LIBS"; //obvious one + if(project->isActiveConfig("staticlib")) + libs << "QMAKE_LIBS_PRIVATE"; + t << "QMAKE_PRL_LIBS = "; + for (ProStringList::Iterator it = libs.begin(); it != libs.end(); ++it) + t << project->values((*it).toKey()).join(' ').replace('\\', "\\\\") << " "; + t << endl; + } +} + +bool +MakefileGenerator::writeProjectMakefile() +{ + QTextStream t(&Option::output); + + //header + writeHeader(t); + + QList targets; + { + ProStringList builds = project->values("BUILDS"); + for (ProStringList::Iterator it = builds.begin(); it != builds.end(); ++it) { + SubTarget *st = new SubTarget; + targets.append(st); + st->makefile = "$(MAKEFILE)." + (*it); + st->name = (*it).toQString(); + const ProKey tkey(*it + ".target"); + st->target = (project->isEmpty(tkey) ? (*it) : project->first(tkey)).toQString(); + } + } + if(project->isActiveConfig("build_all")) { + t << "first: all\n"; + QList::Iterator it; + + //install + t << "install: "; + for(it = targets.begin(); it != targets.end(); ++it) + t << (*it)->target << "-install "; + t << endl; + + //uninstall + t << "uninstall: "; + for(it = targets.begin(); it != targets.end(); ++it) + t << (*it)->target << "-uninstall "; + t << endl; + } else { + t << "first: " << targets.first()->target << endl + << "install: " << targets.first()->target << "-install\n" + << "uninstall: " << targets.first()->target << "-uninstall\n"; + } + + writeSubTargets(t, targets, SubTargetsNoFlags); + if(!project->isActiveConfig("no_autoqmake")) { + for(QList::Iterator it = targets.begin(); it != targets.end(); ++it) + t << (*it)->makefile << ": " << + Option::fixPathToTargetOS(fileFixify(Option::output.fileName())) << endl; + } + qDeleteAll(targets); + return true; +} + +bool +MakefileGenerator::write() +{ + if(!project) + return false; + writePrlFile(); + if(Option::qmake_mode == Option::QMAKE_GENERATE_MAKEFILE || //write makefile + Option::qmake_mode == Option::QMAKE_GENERATE_PROJECT) { + QTextStream t(&Option::output); + if(!writeMakefile(t)) { +#if 1 + warn_msg(WarnLogic, "Unable to generate output for: %s [TEMPLATE %s]", + Option::output.fileName().toLatin1().constData(), + project->first("TEMPLATE").toLatin1().constData()); + if(Option::output.exists()) + Option::output.remove(); +#endif + } + } + return true; +} + +QString +MakefileGenerator::prlFileName(bool fixify) +{ + QString ret = project->first("TARGET_PRL").toQString(); + if(ret.isEmpty()) + ret = project->first("TARGET").toQString(); + int slsh = ret.lastIndexOf(Option::dir_sep); + if(slsh != -1) + ret.remove(0, slsh); + if(!ret.endsWith(Option::prl_ext)) { + int dot = ret.indexOf('.'); + if(dot != -1) + ret.truncate(dot); + ret += Option::prl_ext; + } + if(!project->isEmpty("QMAKE_BUNDLE")) + ret.prepend(project->first("QMAKE_BUNDLE") + Option::dir_sep); + if(fixify) { + if(!project->isEmpty("DESTDIR")) + ret.prepend(project->first("DESTDIR").toQString()); + ret = Option::fixPathToLocalOS(fileFixify(ret, qmake_getpwd(), Option::output_dir)); + } + return ret; +} + +void +MakefileGenerator::writePrlFile() +{ + if((Option::qmake_mode == Option::QMAKE_GENERATE_MAKEFILE || + Option::qmake_mode == Option::QMAKE_GENERATE_PRL) + && project->values("QMAKE_FAILED_REQUIREMENTS").isEmpty() + && project->isActiveConfig("create_prl") + && (project->first("TEMPLATE") == "lib" + || project->first("TEMPLATE") == "vclib") + && (!project->isActiveConfig("plugin") || project->isActiveConfig("static"))) { //write prl file + QString local_prl = prlFileName(); + QString prl = fileFixify(local_prl); + mkdir(fileInfo(local_prl).path()); + QFile ft(local_prl); + if(ft.open(QIODevice::WriteOnly)) { + project->values("ALL_DEPS").append(prl); + project->values("QMAKE_INTERNAL_PRL_FILE").append(prl); + QTextStream t(&ft); + writePrlFile(t); + } + } +} + +void +MakefileGenerator::writeObj(QTextStream &t, const char *src) +{ + const ProStringList &srcl = project->values(src); + const ProStringList objl = createObjectList(srcl); + + ProStringList::ConstIterator oit = objl.begin(); + ProStringList::ConstIterator sit = srcl.begin(); + QString stringSrc("$src"); + QString stringObj("$obj"); + for(;sit != srcl.end() && oit != objl.end(); ++oit, ++sit) { + if((*sit).isEmpty()) + continue; + + QString srcf = (*sit).toQString(); + QString dstf = (*oit).toQString(); + t << escapeDependencyPath(dstf) << ": " << escapeDependencyPath(srcf) + << " " << escapeDependencyPaths(findDependencies(srcf)).join(" \\\n\t\t"); + + ProKey comp, cimp; + for(QStringList::Iterator cppit = Option::cpp_ext.begin(); cppit != Option::cpp_ext.end(); ++cppit) { + if((*sit).endsWith((*cppit))) { + comp = "QMAKE_RUN_CXX"; + cimp = "QMAKE_RUN_CXX_IMP"; + break; + } + } + if(comp.isEmpty()) { + comp = "QMAKE_RUN_CC"; + cimp = "QMAKE_RUN_CC_IMP"; + } + bool use_implicit_rule = !project->isEmpty(cimp); + use_implicit_rule = false; + if(use_implicit_rule) { + if(!project->isEmpty("OBJECTS_DIR")) { + use_implicit_rule = false; + } else { + int dot = (*sit).lastIndexOf('.'); + if(dot == -1 || ((*sit).left(dot) + Option::obj_ext != (*oit))) + use_implicit_rule = false; + } + } + if (!use_implicit_rule && !project->isEmpty(comp)) { + QString p = var(comp); + p.replace(stringSrc, escapeFilePath(srcf)); + p.replace(stringObj, escapeFilePath(dstf)); + t << "\n\t" << p; + } + t << endl << endl; + } +} + +QString +MakefileGenerator::filePrefixRoot(const QString &root, const QString &path) +{ + QString ret(root + path); + if(path.length() > 2 && path[1] == ':') //c:\foo + ret = QString(path.mid(0, 2) + root + path.mid(2)); + while(ret.endsWith("\\")) + ret = ret.left(ret.length()-1); + return ret; +} + +void +MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild) +{ + QString rm_dir_contents("-$(DEL_FILE)"); + if (!isWindowsShell()) //ick + rm_dir_contents = "-$(DEL_FILE) -r"; + + QString all_installs, all_uninstalls; + QSet made_dirs, removed_dirs; + const ProStringList &l = project->values("INSTALLS"); + for (ProStringList::ConstIterator it = l.begin(); it != l.end(); ++it) { + const ProKey pvar(*it + ".path"); + const ProStringList &installConfigValues = project->values(ProKey(*it + ".CONFIG")); + if (installConfigValues.indexOf("no_path") == -1 && + installConfigValues.indexOf("dummy_install") == -1 && + project->values(pvar).isEmpty()) { + warn_msg(WarnLogic, "%s is not defined: install target not created\n", pvar.toLatin1().constData()); + continue; + } + + bool do_default = true; + const QString root = "$(INSTALL_ROOT)"; + QString dst; + if (installConfigValues.indexOf("no_path") == -1 && + installConfigValues.indexOf("dummy_install") == -1) { + dst = fileFixify(unescapeFilePath(project->first(pvar).toQString()), FileFixifyAbsolute, false); + if(!dst.endsWith(Option::dir_sep)) + dst += Option::dir_sep; + } + + QStringList tmp, inst, uninst; + //other + ProStringList tmp2 = project->values(ProKey(*it + ".extra")); + if (tmp2.isEmpty()) + tmp2 = project->values(ProKey(*it + ".commands")); //to allow compatible name + if (!tmp2.isEmpty()) { + do_default = false; + inst << tmp2.join(' '); + } + //masks + tmp2 = findFilesInVPATH(project->values(ProKey(*it + ".files")), VPATH_NoFixify); + tmp = fileFixify(tmp2.toQStringList(), FileFixifyAbsolute); + if(!tmp.isEmpty()) { + do_default = false; + QString base_path = project->first(ProKey(*it + ".base")).toQString(); + if (!base_path.isEmpty()) { + base_path = Option::fixPathToTargetOS(base_path, false, true); + if (!base_path.endsWith(Option::dir_sep)) + base_path += Option::dir_sep; + } + for(QStringList::Iterator wild_it = tmp.begin(); wild_it != tmp.end(); ++wild_it) { + QString wild = Option::fixPathToTargetOS((*wild_it), false, false); + QString dirstr = qmake_getpwd(), filestr = wild; + int slsh = filestr.lastIndexOf(Option::dir_sep); + if(slsh != -1) { + dirstr = filestr.left(slsh+1); + filestr.remove(0, slsh+1); + } + if(!dirstr.endsWith(Option::dir_sep)) + dirstr += Option::dir_sep; + QString dst_dir = dst; + if (!base_path.isEmpty()) { + if (!dirstr.startsWith(base_path)) { + warn_msg(WarnLogic, "File %s in install rule %s does not start with base %s", + qPrintable(wild), qPrintable((*it).toQString()), + qPrintable(base_path)); + } else { + QString dir_sfx = dirstr.mid(base_path.length()); + dst_dir += dir_sfx; + if (!dir_sfx.isEmpty() && !made_dirs.contains(dir_sfx)) { + made_dirs.insert(dir_sfx); + QString tmp_dst = fileFixify(dst_dir, FileFixifyAbsolute, false); + tmp_dst.chop(1); + inst << mkdir_p_asstring(filePrefixRoot(root, tmp_dst)); + for (int i = dst.length(); i < dst_dir.length(); i++) { + if (dst_dir.at(i) == Option::dir_sep) { + QString subd = dst_dir.left(i); + if (!removed_dirs.contains(subd)) { + removed_dirs.insert(subd); + tmp_dst = fileFixify(subd, FileFixifyAbsolute, false); + uninst << "-$(DEL_DIR) " + + escapeFilePath(filePrefixRoot(root, tmp_dst)); + } + } + } + } + } + } + bool is_target = (wild == fileFixify(var("TARGET"), FileFixifyAbsolute)); + if(is_target || exists(wild)) { //real file or target + QFileInfo fi(fileInfo(wild)); + QString dst_file = filePrefixRoot(root, dst_dir); + if(fi.isDir() && project->isActiveConfig("copy_dir_files")) { + if(!dst_file.endsWith(Option::dir_sep)) + dst_file += Option::dir_sep; + dst_file += fi.fileName(); + } + QString cmd; + if (fi.isDir()) + cmd = "-$(INSTALL_DIR)"; + else if (is_target || fi.isExecutable()) + cmd = "-$(INSTALL_PROGRAM)"; + else + cmd = "-$(INSTALL_FILE)"; + cmd += " " + escapeFilePath(wild) + " " + escapeFilePath(dst_file); + inst << cmd; + if (!project->isActiveConfig("debug_info") && !project->isActiveConfig("nostrip") && + !fi.isDir() && fi.isExecutable() && !project->isEmpty("QMAKE_STRIP")) + inst << QString("-") + var("QMAKE_STRIP") + " " + + escapeFilePath(filePrefixRoot(root, fileFixify(dst_dir + filestr, FileFixifyAbsolute, false))); + uninst.append(rm_dir_contents + " " + escapeFilePath(filePrefixRoot(root, fileFixify(dst_dir + filestr, FileFixifyAbsolute, false)))); + continue; + } + QString local_dirstr = Option::fixPathToLocalOS(dirstr, true); + QStringList files = QDir(local_dirstr).entryList(QStringList(filestr)); + if (installConfigValues.contains("no_check_exist") && files.isEmpty()) { + QString dst_file = filePrefixRoot(root, dst_dir); + QString cmd; + if (installConfigValues.contains("directory")) { + cmd = QLatin1String("-$(INSTALL_DIR)"); + if (project->isActiveConfig("copy_dir_files")) { + if (!dst_file.endsWith(Option::dir_sep)) + dst_file += Option::dir_sep; + dst_file += filestr; + } + } else if (installConfigValues.contains("executable")) { + cmd = QLatin1String("-$(INSTALL_PROGRAM)"); + } else { + cmd = QLatin1String("-$(INSTALL_FILE)"); + } + cmd += " " + escapeFilePath(wild) + " " + escapeFilePath(dst_file); + inst << cmd; + uninst.append(rm_dir_contents + " " + escapeFilePath(filePrefixRoot(root, fileFixify(dst_dir + filestr, FileFixifyAbsolute, false)))); + } + for(int x = 0; x < files.count(); x++) { + QString file = files[x]; + if(file == "." || file == "..") //blah + continue; + uninst.append(rm_dir_contents + " " + escapeFilePath(filePrefixRoot(root, fileFixify(dst_dir + file, FileFixifyAbsolute, false)))); + QFileInfo fi(fileInfo(dirstr + file)); + QString dst_file = filePrefixRoot(root, fileFixify(dst_dir, FileFixifyAbsolute, false)); + if(fi.isDir() && project->isActiveConfig("copy_dir_files")) { + if(!dst_file.endsWith(Option::dir_sep)) + dst_file += Option::dir_sep; + dst_file += fi.fileName(); + } + QString cmd = QString(fi.isDir() ? "-$(INSTALL_DIR)" : "-$(INSTALL_FILE)") + " " + + escapeFilePath(dirstr + file) + " " + escapeFilePath(dst_file); + inst << cmd; + if (!project->isActiveConfig("debug_info") && !project->isActiveConfig("nostrip") && + !fi.isDir() && fi.isExecutable() && !project->isEmpty("QMAKE_STRIP")) + inst << QString("-") + var("QMAKE_STRIP") + " " + + escapeFilePath(filePrefixRoot(root, fileFixify(dst_dir + file, FileFixifyAbsolute, false))); + } + } + } + QString target; + //default? + if (do_default) + target = defaultInstall((*it).toQString()); + else + target = inst.join("\n\t"); + QString puninst = project->values(ProKey(*it + ".uninstall")).join(' '); + if (!puninst.isEmpty()) + uninst << puninst; + + if (!target.isEmpty() || installConfigValues.indexOf("dummy_install") != -1) { + if (noBuild || installConfigValues.indexOf("no_build") != -1) + t << "install_" << (*it) << ":"; + else if(project->isActiveConfig("build_all")) + t << "install_" << (*it) << ": all"; + else + t << "install_" << (*it) << ": first"; + const ProStringList &deps = project->values(ProKey(*it + ".depends")); + if(!deps.isEmpty()) { + for (ProStringList::ConstIterator dep_it = deps.begin(); dep_it != deps.end(); ++dep_it) { + QString targ = var(ProKey(*dep_it + ".target")); + if(targ.isEmpty()) + targ = (*dep_it).toQString(); + t << " " << escapeDependencyPath(targ); + } + } + t << " FORCE\n\t"; + const ProStringList &dirs = project->values(pvar); + for (ProStringList::ConstIterator pit = dirs.begin(); pit != dirs.end(); ++pit) { + QString tmp_dst = fileFixify((*pit).toQString(), FileFixifyAbsolute, false); + t << mkdir_p_asstring(filePrefixRoot(root, tmp_dst)) << "\n\t"; + } + t << target << endl << endl; + if(!uninst.isEmpty()) { + t << "uninstall_" << (*it) << ": FORCE"; + for (int i = uninst.size(); --i >= 0; ) + t << "\n\t" << uninst.at(i); + t << "\n\t-$(DEL_DIR) " << filePrefixRoot(root, dst) << " \n\n"; + } + t << endl; + + if (installConfigValues.indexOf("no_default_install") == -1) { + all_installs += QString("install_") + (*it) + " "; + if(!uninst.isEmpty()) + all_uninstalls += "uninstall_" + (*it) + " "; + } + } else { + debug_msg(1, "no definition for install %s: install target not created",(*it).toLatin1().constData()); + } + } + t << "install: " << var("INSTALLDEPS") << " " << all_installs + << " FORCE\n\nuninstall: " << all_uninstalls << " " << var("UNINSTALLDEPS") + << " FORCE\n\n"; +} + +QString +MakefileGenerator::var(const ProKey &var) const +{ + return val(project->values(var)); +} + +QString +MakefileGenerator::val(const ProStringList &varList) const +{ + return valGlue(varList, "", " ", ""); +} + +QString +MakefileGenerator::val(const QStringList &varList) const +{ + return valGlue(varList, "", " ", ""); +} + +QString +MakefileGenerator::varGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) const +{ + return valGlue(project->values(var), before, glue, after); +} + +QString +MakefileGenerator::fileVarGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) const +{ + ProStringList varList; + foreach (const ProString &val, project->values(var)) + varList << escapeFilePath(Option::fixPathToTargetOS(val.toQString())); + return valGlue(varList, before, glue, after); +} + +QString +MakefileGenerator::valGlue(const ProStringList &varList, const QString &before, const QString &glue, const QString &after) const +{ + QString ret; + for (ProStringList::ConstIterator it = varList.begin(); it != varList.end(); ++it) { + if (!(*it).isEmpty()) { + if (!ret.isEmpty()) + ret += glue; + ret += (*it).toQString(); + } + } + return ret.isEmpty() ? QString("") : before + ret + after; +} + +QString +MakefileGenerator::valGlue(const QStringList &varList, const QString &before, const QString &glue, const QString &after) const +{ + QString ret; + for(QStringList::ConstIterator it = varList.begin(); it != varList.end(); ++it) { + if(!(*it).isEmpty()) { + if(!ret.isEmpty()) + ret += glue; + ret += (*it); + } + } + return ret.isEmpty() ? QString("") : before + ret + after; +} + + +QString +MakefileGenerator::varList(const ProKey &var) const +{ + return valList(project->values(var)); +} + +QString +MakefileGenerator::valList(const ProStringList &varList) const +{ + return valGlue(varList, "", " \\\n\t\t", ""); +} + +QString +MakefileGenerator::valList(const QStringList &varList) const +{ + return valGlue(varList, "", " \\\n\t\t", ""); +} + +ProStringList +MakefileGenerator::createObjectList(const ProStringList &sources) +{ + ProStringList ret; + QString objdir; + if(!project->values("OBJECTS_DIR").isEmpty()) + objdir = project->first("OBJECTS_DIR").toQString(); + for (ProStringList::ConstIterator it = sources.begin(); it != sources.end(); ++it) { + QString sfn = (*it).toQString(); + QFileInfo fi(fileInfo(Option::fixPathToLocalOS(sfn))); + QString dir; + if (project->isActiveConfig("object_parallel_to_source")) { + // The source paths are relative to the output dir, but we need source-relative paths + QString sourceRelativePath = fileFixify(sfn, qmake_getpwd(), Option::output_dir); + sourceRelativePath = Option::fixPathToTargetOS(sourceRelativePath, false); + + if (sourceRelativePath.startsWith(".." + Option::dir_sep)) + sourceRelativePath = fileFixify(sourceRelativePath, FileFixifyAbsolute); + + if (QDir::isAbsolutePath(sourceRelativePath)) + sourceRelativePath.remove(0, sourceRelativePath.indexOf(Option::dir_sep) + 1); + + dir = objdir; // We still respect OBJECTS_DIR + + int lastDirSepPosition = sourceRelativePath.lastIndexOf(Option::dir_sep); + if (lastDirSepPosition != -1) + dir += sourceRelativePath.leftRef(lastDirSepPosition + 1); + + if (!noIO()) { + // Ensure that the final output directory of each object exists + QString outRelativePath = fileFixify(dir, qmake_getpwd(), Option::output_dir); + if (!mkdir(outRelativePath)) + warn_msg(WarnLogic, "Cannot create directory '%s'", outRelativePath.toLatin1().constData()); + } + } else { + dir = objdir; + } + ret.append(dir + fi.completeBaseName() + Option::obj_ext); + } + return ret; +} + +ReplaceExtraCompilerCacheKey::ReplaceExtraCompilerCacheKey(const QString &v, const QStringList &i, const QStringList &o) +{ + static QString doubleColon = QLatin1String("::"); + + hash = 0; + pwd = qmake_getpwd(); + var = v; + { + QStringList il = i; + il.sort(); + in = il.join(doubleColon); + } + { + QStringList ol = o; + ol.sort(); + out = ol.join(doubleColon); + } +} + +bool ReplaceExtraCompilerCacheKey::operator==(const ReplaceExtraCompilerCacheKey &f) const +{ + return (hashCode() == f.hashCode() && + f.in == in && + f.out == out && + f.var == var && + f.pwd == pwd); +} + + +QString +MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const QStringList &in, const QStringList &out) +{ + //lazy cache + ReplaceExtraCompilerCacheKey cacheKey(orig_var, in, out); + QString cacheVal = extraCompilerVariablesCache.value(cacheKey); + if(!cacheVal.isNull()) + return cacheVal; + + //do the work + QString ret = orig_var; + QRegExp reg_var("\\$\\{.*\\}"); + reg_var.setMinimal(true); + for(int rep = 0; (rep = reg_var.indexIn(ret, rep)) != -1; ) { + QStringList val; + const ProString var(ret.mid(rep + 2, reg_var.matchedLength() - 3)); + bool filePath = false; + if(val.isEmpty() && var.startsWith(QLatin1String("QMAKE_VAR_"))) { + const ProKey varname = var.mid(10).toKey(); + val += project->values(varname).toQStringList(); + } + if(val.isEmpty() && var.startsWith(QLatin1String("QMAKE_VAR_FIRST_"))) { + const ProKey varname = var.mid(16).toKey(); + val += project->first(varname).toQString(); + } + + if(val.isEmpty() && !in.isEmpty()) { + if(var.startsWith(QLatin1String("QMAKE_FUNC_FILE_IN_"))) { + filePath = true; + const ProKey funcname = var.mid(19).toKey(); + val += project->expand(funcname, QList() << ProStringList(in)); + } else if(var == QLatin1String("QMAKE_FILE_BASE") || var == QLatin1String("QMAKE_FILE_IN_BASE")) { + //filePath = true; + for(int i = 0; i < in.size(); ++i) { + QFileInfo fi(fileInfo(Option::fixPathToLocalOS(in.at(i)))); + QString base = fi.completeBaseName(); + if(base.isNull()) + base = fi.fileName(); + val += base; + } + } else if(var == QLatin1String("QMAKE_FILE_EXT")) { + filePath = true; + for(int i = 0; i < in.size(); ++i) { + QFileInfo fi(fileInfo(Option::fixPathToLocalOS(in.at(i)))); + QString ext; + // Ensure complementarity with QMAKE_FILE_BASE + int baseLen = fi.completeBaseName().length(); + if(baseLen == 0) + ext = fi.fileName(); + else + ext = fi.fileName().remove(0, baseLen); + val += ext; + } + } else if(var == QLatin1String("QMAKE_FILE_PATH") || var == QLatin1String("QMAKE_FILE_IN_PATH")) { + filePath = true; + for(int i = 0; i < in.size(); ++i) + val += fileInfo(Option::fixPathToLocalOS(in.at(i))).path(); + } else if(var == QLatin1String("QMAKE_FILE_NAME") || var == QLatin1String("QMAKE_FILE_IN")) { + filePath = true; + for(int i = 0; i < in.size(); ++i) + val += fileInfo(Option::fixPathToLocalOS(in.at(i))).filePath(); + + } + } + if(val.isEmpty() && !out.isEmpty()) { + if(var.startsWith(QLatin1String("QMAKE_FUNC_FILE_OUT_"))) { + filePath = true; + const ProKey funcname = var.mid(20).toKey(); + val += project->expand(funcname, QList() << ProStringList(out)); + } else if(var == QLatin1String("QMAKE_FILE_OUT")) { + filePath = true; + for(int i = 0; i < out.size(); ++i) + val += fileInfo(Option::fixPathToLocalOS(out.at(i))).filePath(); + } else if(var == QLatin1String("QMAKE_FILE_OUT_BASE")) { + //filePath = true; + for(int i = 0; i < out.size(); ++i) { + QFileInfo fi(fileInfo(Option::fixPathToLocalOS(out.at(i)))); + QString base = fi.completeBaseName(); + if(base.isNull()) + base = fi.fileName(); + val += base; + } + } + } + if(val.isEmpty() && var.startsWith(QLatin1String("QMAKE_FUNC_"))) { + const ProKey funcname = var.mid(11).toKey(); + val += project->expand(funcname, QList() << ProStringList(in) << ProStringList(out)); + } + + if(!val.isEmpty()) { + QString fullVal; + if(filePath) { + for(int i = 0; i < val.size(); ++i) { + const QString file = Option::fixPathToTargetOS(unescapeFilePath(val.at(i)), false); + if(!fullVal.isEmpty()) + fullVal += " "; + fullVal += escapeFilePath(file); + } + } else { + fullVal = val.join(' '); + } + ret.replace(rep, reg_var.matchedLength(), fullVal); + rep += fullVal.length(); + } else { + rep += reg_var.matchedLength(); + } + } + + //cache the value + extraCompilerVariablesCache.insert(cacheKey, ret); + return ret; +} + +bool +MakefileGenerator::verifyExtraCompiler(const ProString &comp, const QString &file_unfixed) +{ + if(noIO()) + return false; + const QString file = Option::fixPathToLocalOS(file_unfixed); + + const ProStringList &config = project->values(ProKey(comp + ".CONFIG")); + if (config.indexOf("moc_verify") != -1) { + if(!file.isNull()) { + QMakeSourceFileInfo::addSourceFile(file, QMakeSourceFileInfo::SEEK_MOCS); + if(!mocable(file)) { + return false; + } else { + project->values("MOCABLES").append(file); + } + } + } else if (config.indexOf("function_verify") != -1) { + ProString tmp_out = project->values(ProKey(comp + ".output")).first(); + if(tmp_out.isEmpty()) + return false; + ProStringList verify_function = project->values(ProKey(comp + ".verify_function")); + if(verify_function.isEmpty()) + return false; + + for(int i = 0; i < verify_function.size(); ++i) { + bool invert = false; + ProString verify = verify_function.at(i); + if(verify.at(0) == QLatin1Char('!')) { + invert = true; + verify = verify.mid(1); + } + + if (config.indexOf("combine") != -1) { + bool pass = project->test(verify.toKey(), QList() << ProStringList(tmp_out) << ProStringList(file)); + if(invert) + pass = !pass; + if(!pass) + return false; + } else { + const ProStringList &tmp = project->values(ProKey(comp + ".input")); + for (ProStringList::ConstIterator it = tmp.begin(); it != tmp.end(); ++it) { + const ProStringList &inputs = project->values((*it).toKey()); + for (ProStringList::ConstIterator input = inputs.begin(); input != inputs.end(); ++input) { + if((*input).isEmpty()) + continue; + QString inpf = (*input).toQString(); + QString in = fileFixify(Option::fixPathToTargetOS(inpf, false)); + if(in == file) { + bool pass = project->test(verify.toKey(), + QList() << ProStringList(replaceExtraCompilerVariables(tmp_out.toQString(), inpf, QString())) << + ProStringList(file)); + if(invert) + pass = !pass; + if(!pass) + return false; + break; + } + } + } + } + } + } else if (config.indexOf("verify") != -1) { + QString tmp_out = project->values(ProKey(comp + ".output")).first().toQString(); + if(tmp_out.isEmpty()) + return false; + QString tmp_cmd; + const ProKey ckey(comp + ".commands"); + if (!project->isEmpty(ckey)) { + int argv0 = -1; + ProStringList cmdline = project->values(ckey); + for(int i = 0; i < cmdline.count(); ++i) { + if(!cmdline.at(i).contains('=')) { + argv0 = i; + break; + } + } + if(argv0 != -1) { + cmdline[argv0] = Option::fixPathToTargetOS(cmdline.at(argv0).toQString(), false); + tmp_cmd = cmdline.join(' '); + } + } + + if (config.indexOf("combine") != -1) { + QString cmd = replaceExtraCompilerVariables(tmp_cmd, QString(), tmp_out); + if(system(cmd.toLatin1().constData())) + return false; + } else { + const ProStringList &tmp = project->values(ProKey(comp + ".input")); + for (ProStringList::ConstIterator it = tmp.begin(); it != tmp.end(); ++it) { + const ProStringList &inputs = project->values((*it).toKey()); + for (ProStringList::ConstIterator input = inputs.begin(); input != inputs.end(); ++input) { + if((*input).isEmpty()) + continue; + QString inpf = (*input).toQString(); + QString in = fileFixify(Option::fixPathToTargetOS(inpf, false)); + if(in == file) { + QString out = replaceExtraCompilerVariables(tmp_out, inpf, QString()); + QString cmd = replaceExtraCompilerVariables(tmp_cmd, in, out); + if(system(cmd.toLatin1().constData())) + return false; + break; + } + } + } + } + } + return true; +} + +void +MakefileGenerator::writeExtraTargets(QTextStream &t) +{ + const ProStringList &qut = project->values("QMAKE_EXTRA_TARGETS"); + for (ProStringList::ConstIterator it = qut.begin(); it != qut.end(); ++it) { + QString targ = var(ProKey(*it + ".target")), + cmd = var(ProKey(*it + ".commands")), deps; + if(targ.isEmpty()) + targ = (*it).toQString(); + const ProStringList &deplist = project->values(ProKey(*it + ".depends")); + for (ProStringList::ConstIterator dep_it = deplist.begin(); dep_it != deplist.end(); ++dep_it) { + QString dep = var(ProKey(*dep_it + ".target")); + if(dep.isEmpty()) + dep = (*dep_it).toQString(); + deps += " " + escapeDependencyPath(dep); + } + const ProStringList &config = project->values(ProKey(*it + ".CONFIG")); + if (config.indexOf("fix_target") != -1) + targ = fileFixify(targ, Option::output_dir, Option::output_dir); + if (config.indexOf("phony") != -1) + deps += QLatin1String(" FORCE"); + t << escapeDependencyPath(targ) << ":" << deps; + if(!cmd.isEmpty()) + t << "\n\t" << cmd; + t << endl << endl; + } +} + +void +MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) +{ + QString clean_targets; + const ProStringList &quc = project->values("QMAKE_EXTRA_COMPILERS"); + for (ProStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it) { + QString tmp_out = fileFixify(project->first(ProKey(*it + ".output")).toQString(), + Option::output_dir, Option::output_dir); + QString tmp_cmd; + const ProKey ckey(*it + ".commands"); + if (!project->isEmpty(ckey)) { + QStringList cmdline = project->values(ckey).toQStringList(); + int argv0 = findExecutable(cmdline); + if(argv0 != -1) { + cmdline[argv0] = escapeFilePath(Option::fixPathToTargetOS(cmdline.at(argv0), false)); + tmp_cmd = cmdline.join(' '); + } + } + QString tmp_dep_cmd; + QString dep_cd_cmd; + const ProKey dckey(*it + ".depend_command"); + if (!project->isEmpty(dckey)) { + int argv0 = -1; + ProStringList cmdline = project->values(dckey); + for(int i = 0; i < cmdline.count(); ++i) { + if(!cmdline.at(i).contains('=')) { + argv0 = i; + break; + } + } + if(argv0 != -1) { + QString arg = cmdline.at(argv0).toQString(); + const QString c = Option::fixPathToLocalOS(arg, true); + if(exists(c)) { + arg = escapeFilePath(Option::fixPathToLocalOS(arg, false)); + } else { + arg = escapeFilePath(arg); + } + QFileInfo cmdFileInfo(arg); + if (!cmdFileInfo.isAbsolute() || cmdFileInfo.exists()) { + cmdline[argv0] = arg; + tmp_dep_cmd = cmdline.join(' '); + } + } + dep_cd_cmd = QLatin1String("cd ") + + escapeFilePath(Option::fixPathToLocalOS(Option::output_dir, false)) + + QLatin1String(" && "); + } + const ProStringList &vars = project->values(ProKey(*it + ".variables")); + if(tmp_out.isEmpty() || tmp_cmd.isEmpty()) + continue; + ProStringList tmp_inputs; + { + const ProStringList &comp_inputs = project->values(ProKey(*it + ".input")); + for (ProStringList::ConstIterator it2 = comp_inputs.begin(); it2 != comp_inputs.end(); ++it2) { + const ProStringList &tmp = project->values((*it2).toKey()); + for (ProStringList::ConstIterator input = tmp.begin(); input != tmp.end(); ++input) { + QString in = Option::fixPathToTargetOS((*input).toQString(), false); + if(verifyExtraCompiler((*it), in)) + tmp_inputs.append((*input)); + } + } + } + + t << "compiler_" << (*it) << "_make_all:"; + const ProStringList &config = project->values(ProKey(*it + ".CONFIG")); + if (config.indexOf("combine") != -1) { + // compilers with a combined input only have one output + QString input = project->first(ProKey(*it + ".output")).toQString(); + t << " " << escapeDependencyPath(Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_out, input, QString()))); + } else { + for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) { + t << " " << escapeDependencyPath(Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_out, (*input).toQString(), QString()))); + } + } + t << endl; + + if (config.indexOf("no_clean") == -1) { + QString tmp_clean = project->values(ProKey(*it + ".clean")).join(' '); + QString tmp_clean_cmds = project->values(ProKey(*it + ".clean_commands")).join(' '); + if(!tmp_inputs.isEmpty()) + clean_targets += QString("compiler_" + (*it) + "_clean "); + t << "compiler_" << (*it) << "_clean:"; + bool wrote_clean_cmds = false, wrote_clean = false; + if(tmp_clean_cmds.isEmpty()) { + wrote_clean_cmds = true; + } else if(tmp_clean_cmds.indexOf("${QMAKE_") == -1) { + t << "\n\t" << tmp_clean_cmds; + wrote_clean_cmds = true; + } + if(tmp_clean.isEmpty()) + tmp_clean = tmp_out; + if(tmp_clean.indexOf("${QMAKE_") == -1) { + t << "\n\t-$(DEL_FILE) " << tmp_clean; + wrote_clean = true; + } + if(!wrote_clean_cmds || !wrote_clean) { + ProStringList cleans; + const QString del_statement("-$(DEL_FILE)"); + if(!wrote_clean) { + if(project->isActiveConfig("no_delete_multiple_files")) { + for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) { + QString tinp = (*input).toQString(); + cleans.append(" " + Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_clean, tinp, + replaceExtraCompilerVariables(tmp_out, tinp, QString())))); + } + } else { + QString files, file; + const int commandlineLimit = 2047; // NT limit, expanded + for(int input = 0; input < tmp_inputs.size(); ++input) { + QString tinp = tmp_inputs.at(input).toQString(); + file = " " + replaceExtraCompilerVariables(tmp_clean, tinp, + replaceExtraCompilerVariables(tmp_out, tinp, QString())); + if(del_statement.length() + files.length() + + qMax(fixEnvVariables(file).length(), file.length()) > commandlineLimit) { + cleans.append(files); + files.clear(); + } + files += Option::fixPathToTargetOS(file); + } + if(!files.isEmpty()) + cleans.append(files); + } + } + if(!cleans.isEmpty()) + t << valGlue(cleans, "\n\t" + del_statement, "\n\t" + del_statement, ""); + if(!wrote_clean_cmds) { + for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) { + QString tinp = (*input).toQString(); + t << "\n\t" << replaceExtraCompilerVariables(tmp_clean_cmds, tinp, + replaceExtraCompilerVariables(tmp_out, tinp, QString())); + } + } + } + t << endl; + } + QStringList tmp_dep = project->values(ProKey(*it + ".depends")).toQStringList(); + if (config.indexOf("combine") != -1) { + if (tmp_out.contains(QRegExp("(^|[^$])\\$\\{QMAKE_(?!VAR_)"))) { + warn_msg(WarnLogic, "QMAKE_EXTRA_COMPILERS(%s) with combine has variable output.", + (*it).toLatin1().constData()); + continue; + } + QStringList deps, inputs; + if(!tmp_dep.isEmpty()) + deps += fileFixify(tmp_dep, Option::output_dir, Option::output_dir); + for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) { + QString inpf = (*input).toQString(); + deps += findDependencies(inpf); + inputs += Option::fixPathToTargetOS(inpf, false); + if(!tmp_dep_cmd.isEmpty() && doDepends()) { + char buff[256]; + QString dep_cmd = replaceExtraCompilerVariables(tmp_dep_cmd, inpf, tmp_out); + dep_cmd = dep_cd_cmd + fixEnvVariables(dep_cmd); + if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) { + QString indeps; + while(!feof(proc)) { + int read_in = (int)fread(buff, 1, 255, proc); + if(!read_in) + break; + indeps += QByteArray(buff, read_in); + } + QT_PCLOSE(proc); + if(!indeps.isEmpty()) { + QStringList dep_cmd_deps = indeps.replace('\n', ' ').simplified().split(' '); + for(int i = 0; i < dep_cmd_deps.count(); ++i) { + QString &file = dep_cmd_deps[i]; + QString absFile = QDir(Option::output_dir).absoluteFilePath(file); + if (exists(absFile)) { + file = absFile; + } else { + QString localFile; + QList depdirs = QMakeSourceFileInfo::dependencyPaths(); + for (QList::Iterator dit = depdirs.begin(); + dit != depdirs.end(); ++dit) { + if (exists((*dit).real() + Option::dir_sep + file)) { + localFile = (*dit).local() + Option::dir_sep + file; + break; + } + } + if (localFile.isEmpty()) { + if (exists(file)) + warn_msg(WarnDeprecated, ".depend_command for extra compiler %s" + " prints paths relative to source directory", + (*it).toLatin1().constData()); + else + file.clear(); + } else { + file = localFile; + } + } + if(!file.isEmpty()) + file = fileFixify(file); + } + deps += dep_cmd_deps; + } + } + } + } + for(int i = 0; i < inputs.size(); ) { + if(tmp_out == inputs.at(i)) + inputs.removeAt(i); + else + ++i; + } + for(int i = 0; i < deps.size(); ) { + if(tmp_out == deps.at(i)) + deps.removeAt(i); + else + ++i; + } + if (inputs.isEmpty()) + continue; + + QString out = replaceExtraCompilerVariables(tmp_out, QString(), QString()); + QString cmd = replaceExtraCompilerVariables(tmp_cmd, escapeFilePaths(inputs), QStringList() << out); + t << escapeDependencyPath(Option::fixPathToTargetOS(out)) << ":"; + // compiler.CONFIG+=explicit_dependencies means that ONLY compiler.depends gets to cause Makefile dependencies + if (config.indexOf("explicit_dependencies") != -1) { + t << " " << valList(escapeDependencyPaths(fileFixify(tmp_dep, Option::output_dir, Option::output_dir))); + } else { + t << " " << valList(escapeDependencyPaths(inputs)) << " " << valList(escapeDependencyPaths(deps)); + } + t << "\n\t" << cmd << endl << endl; + continue; + } + for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) { + QString inpf = (*input).toQString(); + QString in = Option::fixPathToTargetOS(inpf, false); + QStringList deps = findDependencies(inpf); + deps += escapeDependencyPath(in); + QString out = unescapeFilePath(Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_out, inpf, QString()))); + if(!tmp_dep.isEmpty()) { + QStringList pre_deps = fileFixify(tmp_dep, Option::output_dir, Option::output_dir); + for(int i = 0; i < pre_deps.size(); ++i) + deps += replaceExtraCompilerVariables(pre_deps.at(i), inpf, out); + } + QString cmd = replaceExtraCompilerVariables(tmp_cmd, inpf, out); + // NOTE: The var -> QMAKE_COMP_var replace feature is unsupported, do not use! + for (ProStringList::ConstIterator it3 = vars.constBegin(); it3 != vars.constEnd(); ++it3) + cmd.replace("$(" + (*it3) + ")", "$(QMAKE_COMP_" + (*it3)+")"); + if(!tmp_dep_cmd.isEmpty() && doDepends()) { + char buff[256]; + QString dep_cmd = replaceExtraCompilerVariables(tmp_dep_cmd, inpf, out); + dep_cmd = dep_cd_cmd + fixEnvVariables(dep_cmd); + if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) { + QString indeps; + while(!feof(proc)) { + int read_in = (int)fread(buff, 1, 255, proc); + if(!read_in) + break; + indeps += QByteArray(buff, read_in); + } + QT_PCLOSE(proc); + if(!indeps.isEmpty()) { + QStringList dep_cmd_deps = indeps.replace('\n', ' ').simplified().split(' '); + for(int i = 0; i < dep_cmd_deps.count(); ++i) { + QString &file = dep_cmd_deps[i]; + QString absFile = QDir(Option::output_dir).absoluteFilePath(file); + if (exists(absFile)) { + file = absFile; + } else { + QString localFile; + QList depdirs = QMakeSourceFileInfo::dependencyPaths(); + for (QList::Iterator dit = depdirs.begin(); + dit != depdirs.end(); ++dit) { + if (exists((*dit).real() + Option::dir_sep + file)) { + localFile = (*dit).local() + Option::dir_sep + file; + break; + } + } + if (localFile.isEmpty()) { + if (exists(file)) + warn_msg(WarnDeprecated, ".depend_command for extra compiler %s" + " prints paths relative to source directory", + (*it).toLatin1().constData()); + else + file.clear(); + } else { + file = localFile; + } + } + if(!file.isEmpty()) + file = fileFixify(file); + } + deps += dep_cmd_deps; + } + } + //use the depend system to find includes of these included files + QStringList inc_deps; + for(int i = 0; i < deps.size(); ++i) { + const QString dep = deps.at(i); + if(QFile::exists(dep)) { + SourceFileType type = TYPE_UNKNOWN; + if(type == TYPE_UNKNOWN) { + for(QStringList::Iterator cit = Option::c_ext.begin(); + cit != Option::c_ext.end(); ++cit) { + if(dep.endsWith((*cit))) { + type = TYPE_C; + break; + } + } + } + if(type == TYPE_UNKNOWN) { + for(QStringList::Iterator cppit = Option::cpp_ext.begin(); + cppit != Option::cpp_ext.end(); ++cppit) { + if(dep.endsWith((*cppit))) { + type = TYPE_C; + break; + } + } + } + if(type == TYPE_UNKNOWN) { + for(QStringList::Iterator hit = Option::h_ext.begin(); + type == TYPE_UNKNOWN && hit != Option::h_ext.end(); ++hit) { + if(dep.endsWith((*hit))) { + type = TYPE_C; + break; + } + } + } + if(type != TYPE_UNKNOWN) { + if(!QMakeSourceFileInfo::containsSourceFile(dep, type)) + QMakeSourceFileInfo::addSourceFile(dep, type); + inc_deps += QMakeSourceFileInfo::dependencies(dep); + } + } + } + deps += inc_deps; + } + for(int i = 0; i < deps.size(); ) { + QString &dep = deps[i]; + dep = Option::fixPathToTargetOS(unescapeFilePath(dep), false); + if(out == dep) + deps.removeAt(i); + else + ++i; + } + t << escapeDependencyPath(out) << ": " << valList(escapeDependencyPaths(deps)) << "\n\t" + << cmd << endl << endl; + } + } + t << "compiler_clean: " << clean_targets << endl << endl; +} + +void +MakefileGenerator::writeExtraCompilerVariables(QTextStream &t) +{ + bool first = true; + const ProStringList &quc = project->values("QMAKE_EXTRA_COMPILERS"); + for (ProStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it) { + const ProStringList &vars = project->values(ProKey(*it + ".variables")); + for (ProStringList::ConstIterator varit = vars.begin(); varit != vars.end(); ++varit) { + if(first) { + t << "\n####### Custom Compiler Variables\n"; + first = false; + } + t << "QMAKE_COMP_" << (*varit) << " = " + << valList(project->values((*varit).toKey())) << endl; + } + } + if(!first) + t << endl; +} + +void +MakefileGenerator::writeExtraVariables(QTextStream &t) +{ + t << endl; + + ProStringList outlist; + const ProValueMap &vars = project->variables(); + const ProStringList &exports = project->values("QMAKE_EXTRA_VARIABLES"); + for (ProValueMap::ConstIterator it = vars.begin(); it != vars.end(); ++it) { + for (ProStringList::ConstIterator exp_it = exports.begin(); exp_it != exports.end(); ++exp_it) { + QRegExp rx((*exp_it).toQString(), Qt::CaseInsensitive, QRegExp::Wildcard); + if (rx.exactMatch(it.key().toQString())) + outlist << ("EXPORT_" + it.key() + " = " + it.value().join(' ')); + } + } + if (!outlist.isEmpty()) { + t << "####### Custom Variables\n"; + t << outlist.join("\n") << endl << endl; + } +} + +bool +MakefileGenerator::writeDummyMakefile(QTextStream &t) +{ + if (project->values("QMAKE_FAILED_REQUIREMENTS").isEmpty()) + return false; + t << "QMAKE = " << var("QMAKE_QMAKE") << endl; + const ProStringList &qut = project->values("QMAKE_EXTRA_TARGETS"); + for (ProStringList::ConstIterator it = qut.begin(); it != qut.end(); ++it) + t << *it << " "; + t << "first all clean install distclean uninstall qmake_all:\n\t" + << "@echo \"Some of the required modules (" + << var("QMAKE_FAILED_REQUIREMENTS") << ") are not available.\"\n\t" + << "@echo \"Skipped.\"\n\n"; + writeMakeQmake(t); + t << "FORCE:\n\n"; + return true; +} + +bool +MakefileGenerator::writeStubMakefile(QTextStream &t) +{ + t << "QMAKE = " << var("QMAKE_QMAKE") << endl; + const ProStringList &qut = project->values("QMAKE_EXTRA_TARGETS"); + for (ProStringList::ConstIterator it = qut.begin(); it != qut.end(); ++it) + t << *it << " "; + //const QString ofile = Option::fixPathToTargetOS(fileFixify(Option::output.fileName())); + t << "first all clean install distclean uninstall: qmake\n" + << "qmake_all:\n"; + writeMakeQmake(t); + t << "FORCE:\n\n"; + return true; +} + +bool +MakefileGenerator::writeMakefile(QTextStream &t) +{ + t << "####### Compile\n\n"; + writeObj(t, "SOURCES"); + writeObj(t, "GENERATED_SOURCES"); + + t << "####### Install\n\n"; + writeInstalls(t); + + t << "FORCE:\n\n"; + return true; +} + +QString MakefileGenerator::fixifySpecdir(const QString &spec, const QString &outdir) +{ + if (QFileInfo(spec).isAbsolute()) + return fileFixify(spec, outdir); + return spec; +} + +QString MakefileGenerator::buildArgs() +{ + QString ret; + + foreach (const QString &arg, Option::globals->qmake_args) + ret += " " + escapeFilePath(arg); + return ret; +} + +//could get stored argv, but then it would have more options than are +//probably necesary this will try to guess the bare minimum.. +QString MakefileGenerator::build_args(const QString &outdir) +{ + QString ret = "$(QMAKE)"; + + // general options and arguments + ret += buildArgs(); + + //output + QString ofile = Option::fixPathToTargetOS(fileFixify(Option::output.fileName())); + if(!ofile.isEmpty() && ofile != project->first("QMAKE_MAKEFILE")) + ret += " -o " + escapeFilePath(ofile); + + //inputs + ret += " " + escapeFilePath(fileFixify(project->projectFile(), outdir)); + + return ret; +} + +void +MakefileGenerator::writeHeader(QTextStream &t) +{ + t << "#############################################################################\n"; + t << "# Makefile for building: " << escapeFilePath(var("TARGET")) << endl; + t << "# Generated by qmake (" QMAKE_VERSION_STR ") (Qt " QT_VERSION_STR ")\n"; + t << "# Project: " << fileFixify(project->projectFile()) << endl; + t << "# Template: " << var("TEMPLATE") << endl; + if(!project->isActiveConfig("build_pass")) + t << "# Command: " << build_args().replace("$(QMAKE)", var("QMAKE_QMAKE")) << endl; + t << "#############################################################################\n"; + t << endl; + QString ofile = Option::fixPathToTargetOS(Option::output.fileName()); + if (ofile.lastIndexOf(Option::dir_sep) != -1) + ofile.remove(0, ofile.lastIndexOf(Option::dir_sep) +1); + t << "MAKEFILE = " << ofile << endl << endl; +} + +QList +MakefileGenerator::findSubDirsSubTargets() const +{ + QList targets; + { + const ProStringList &subdirs = project->values("SUBDIRS"); + for(int subdir = 0; subdir < subdirs.size(); ++subdir) { + ProString ofile = subdirs[subdir]; + QString oname = ofile.toQString(); + QString fixedSubdir = oname; + fixedSubdir = fixedSubdir.replace(QRegExp("[^a-zA-Z0-9_]"),"-"); + + SubTarget *st = new SubTarget; + st->name = oname; + targets.append(st); + + bool fromFile = false; + const ProKey fkey(fixedSubdir + ".file"); + const ProKey skey(fixedSubdir + ".subdir"); + if (!project->isEmpty(fkey)) { + if (!project->isEmpty(skey)) + warn_msg(WarnLogic, "Cannot assign both file and subdir for subdir %s", + subdirs[subdir].toLatin1().constData()); + ofile = project->first(fkey); + fromFile = true; + } else if (!project->isEmpty(skey)) { + ofile = project->first(skey); + fromFile = false; + } else { + fromFile = ofile.endsWith(Option::pro_ext); + } + QString file = Option::fixPathToTargetOS(ofile.toQString()); + + if(fromFile) { + int slsh = file.lastIndexOf(Option::dir_sep); + if(slsh != -1) { + st->in_directory = file.left(slsh+1); + st->profile = file.mid(slsh+1); + } else { + st->profile = file; + } + } else { + if(!file.isEmpty() && !project->isActiveConfig("subdir_first_pro")) + st->profile = file.section(Option::dir_sep, -1) + Option::pro_ext; + st->in_directory = file; + } + while(st->in_directory.endsWith(Option::dir_sep)) + st->in_directory.chop(1); + if(fileInfo(st->in_directory).isRelative()) + st->out_directory = st->in_directory; + else + st->out_directory = fileFixify(st->in_directory, qmake_getpwd(), Option::output_dir); + const ProKey mkey(fixedSubdir + ".makefile"); + if (!project->isEmpty(mkey)) { + st->makefile = project->first(mkey).toQString(); + } else { + st->makefile = "Makefile"; + if(!st->profile.isEmpty()) { + QString basename = st->in_directory; + int new_slsh = basename.lastIndexOf(Option::dir_sep); + if(new_slsh != -1) + basename = basename.mid(new_slsh+1); + if(st->profile != basename + Option::pro_ext) + st->makefile += "." + st->profile.left(st->profile.length() - Option::pro_ext.length()); + } + } + const ProKey dkey(fixedSubdir + ".depends"); + if (!project->isEmpty(dkey)) { + const ProStringList &depends = project->values(dkey); + for(int depend = 0; depend < depends.size(); ++depend) { + bool found = false; + for(int subDep = 0; subDep < subdirs.size(); ++subDep) { + if(subdirs[subDep] == depends.at(depend)) { + QString subName = subdirs[subDep].toQString(); + QString fixedSubDep = subName; + fixedSubDep = fixedSubDep.replace(QRegExp("[^a-zA-Z0-9_]"),"-"); + const ProKey dtkey(fixedSubDep + ".target"); + if (!project->isEmpty(dtkey)) { + st->depends += project->first(dtkey); + } else { + QString d = Option::fixPathToLocalOS(subName); + const ProKey dfkey(fixedSubDep + ".file"); + if (!project->isEmpty(dfkey)) { + d = project->first(dfkey).toQString(); + } else { + const ProKey dskey(fixedSubDep + ".subdir"); + if (!project->isEmpty(dskey)) + d = project->first(dskey).toQString(); + } + st->depends += "sub-" + d.replace(QRegExp("[^a-zA-Z0-9_]"),"-"); + } + found = true; + break; + } + } + if(!found) { + QString depend_str = depends.at(depend).toQString(); + st->depends += depend_str.replace(QRegExp("[^a-zA-Z0-9_]"),"-"); + } + } + } + const ProKey tkey(fixedSubdir + ".target"); + if (!project->isEmpty(tkey)) { + st->target = project->first(tkey).toQString(); + } else { + st->target = "sub-" + file; + st->target = st->target.replace(QRegExp("[^a-zA-Z0-9_]"),"-"); + } + } + } + return targets; +} + +void +MakefileGenerator::writeSubDirs(QTextStream &t) +{ + QList targets = findSubDirsSubTargets(); + t << "first: make_first\n"; + int flags = SubTargetInstalls; + if(project->isActiveConfig("ordered")) + flags |= SubTargetOrdered; + writeSubTargets(t, targets, flags); + qDeleteAll(targets); +} + +void MakefileGenerator::writeSubMakeCall(QTextStream &t, const QString &callPrefix, + const QString &makeArguments) +{ + t << callPrefix << "$(MAKE)" << makeArguments << endl; +} + +void +MakefileGenerator::writeSubTargetCall(QTextStream &t, + const QString &in_directory, const QString &in, const QString &out_directory, const QString &out, + const QString &out_directory_cdin, const QString &makefilein) +{ + QString pfx; + if (!in.isEmpty()) { + if (!in_directory.isEmpty()) + t << "\n\t" << mkdir_p_asstring(out_directory); + pfx = "( " + chkexists.arg(out) + + + " $(QMAKE) " + in + buildArgs() + " -o " + out + + " ) && "; + } + writeSubMakeCall(t, out_directory_cdin + pfx, makefilein); +} + +void +MakefileGenerator::writeSubTargets(QTextStream &t, QList targets, int flags) +{ + // blasted includes + const ProStringList &qeui = project->values("QMAKE_EXTRA_INCLUDES"); + for (ProStringList::ConstIterator qeui_it = qeui.begin(); qeui_it != qeui.end(); ++qeui_it) + t << "include " << (*qeui_it) << endl; + + if (!(flags & SubTargetSkipDefaultVariables)) { + t << "QMAKE = " << var("QMAKE_QMAKE") << endl; + t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl; + t << "CHK_DIR_EXISTS= " << var("QMAKE_CHK_DIR_EXISTS") << endl; + t << "MKDIR = " << var("QMAKE_MKDIR") << endl; + t << "COPY = " << var("QMAKE_COPY") << endl; + t << "COPY_FILE = " << var("QMAKE_COPY_FILE") << endl; + t << "COPY_DIR = " << var("QMAKE_COPY_DIR") << endl; + t << "INSTALL_FILE = " << var("QMAKE_INSTALL_FILE") << endl; + t << "INSTALL_PROGRAM = " << var("QMAKE_INSTALL_PROGRAM") << endl; + t << "INSTALL_DIR = " << var("QMAKE_INSTALL_DIR") << endl; + t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl; + t << "SYMLINK = " << var("QMAKE_SYMBOLIC_LINK") << endl; + t << "DEL_DIR = " << var("QMAKE_DEL_DIR") << endl; + t << "MOVE = " << var("QMAKE_MOVE") << endl; + t << "SUBTARGETS = "; // subtargets are sub-directory + for(int target = 0; target < targets.size(); ++target) + t << " \\\n\t\t" << targets.at(target)->target; + t << endl << endl; + } + writeExtraVariables(t); + + QStringList targetSuffixes; + const QString abs_source_path = project->first("QMAKE_ABSOLUTE_SOURCE_PATH").toQString(); + if (!(flags & SubTargetSkipDefaultTargets)) { + targetSuffixes << "make_first" << "all" << "clean" << "distclean" + << QString((flags & SubTargetInstalls) ? "install_subtargets" : "install") + << QString((flags & SubTargetInstalls) ? "uninstall_subtargets" : "uninstall"); + } + + bool dont_recurse = project->isActiveConfig("dont_recurse"); + + // generate target rules + for(int target = 0; target < targets.size(); ++target) { + SubTarget *subtarget = targets.at(target); + QString in_directory = subtarget->in_directory; + if(!in_directory.isEmpty() && !in_directory.endsWith(Option::dir_sep)) + in_directory += Option::dir_sep; + QString out_directory = subtarget->out_directory; + if(!out_directory.isEmpty() && !out_directory.endsWith(Option::dir_sep)) + out_directory += Option::dir_sep; + if(!abs_source_path.isEmpty() && out_directory.startsWith(abs_source_path)) + out_directory = Option::output_dir + out_directory.mid(abs_source_path.length()); + + QString out_directory_cdin = out_directory.isEmpty() ? "\n\t" + : "\n\tcd " + out_directory + " && "; + QString makefilein = " -f " + subtarget->makefile; + + //qmake it + QString out; + QString in; + if(!subtarget->profile.isEmpty()) { + out = subtarget->makefile; + in = escapeFilePath(fileFixify(in_directory + subtarget->profile, FileFixifyAbsolute)); + if(out.startsWith(in_directory)) + out = out.mid(in_directory.length()); + t << subtarget->target << "-qmake_all: "; + if (flags & SubTargetOrdered) { + if (target) + t << targets.at(target - 1)->target << "-qmake_all"; + } else { + if (!subtarget->depends.isEmpty()) + t << valGlue(subtarget->depends, QString(), "-qmake_all ", "-qmake_all"); + } + t << " FORCE\n\t"; + if(!in_directory.isEmpty()) { + t << mkdir_p_asstring(out_directory) + << out_directory_cdin; + } + t << "$(QMAKE) " << in << buildArgs() << " -o " << out; + if (!dont_recurse) + writeSubMakeCall(t, out_directory_cdin, makefilein + " qmake_all"); + else + t << endl; + } + + { //actually compile + t << subtarget->target << ":"; + if(!subtarget->depends.isEmpty()) + t << " " << valList(subtarget->depends); + t << " FORCE"; + writeSubTargetCall(t, in_directory, in, out_directory, out, + out_directory_cdin, makefilein); + } + + for(int suffix = 0; suffix < targetSuffixes.size(); ++suffix) { + QString s = targetSuffixes.at(suffix); + if(s == "install_subtargets") + s = "install"; + else if(s == "uninstall_subtargets") + s = "uninstall"; + else if(s == "make_first") + s = QString(); + + if(flags & SubTargetOrdered) { + t << subtarget->target << "-" << targetSuffixes.at(suffix) << "-ordered:"; + if(target) + t << " " << targets.at(target-1)->target << "-" << targetSuffixes.at(suffix) << "-ordered "; + t << " FORCE"; + writeSubTargetCall(t, in_directory, in, out_directory, out, + out_directory_cdin, makefilein + " " + s); + } + t << subtarget->target << "-" << targetSuffixes.at(suffix) << ":"; + if(!subtarget->depends.isEmpty()) + t << " " << valGlue(subtarget->depends, QString(), "-" + targetSuffixes.at(suffix) + " ", + "-"+targetSuffixes.at(suffix)); + t << " FORCE"; + writeSubTargetCall(t, in_directory, in, out_directory, out, + out_directory_cdin, makefilein + " " + s); + } + } + t << endl; + + if (!(flags & SubTargetSkipDefaultTargets)) { + writeMakeQmake(t, true); + + t << "qmake_all:"; + if(!targets.isEmpty()) { + for(QList::Iterator it = targets.begin(); it != targets.end(); ++it) { + if(!(*it)->profile.isEmpty()) + t << " " << (*it)->target << "-qmake_all"; + } + } + t << " FORCE\n\n"; + } + + for(int s = 0; s < targetSuffixes.size(); ++s) { + QString suffix = targetSuffixes.at(s); + if(!(flags & SubTargetInstalls) && suffix.endsWith("install")) + continue; + + t << suffix << ":"; + for(int target = 0; target < targets.size(); ++target) { + SubTarget *subTarget = targets.at(target); + const ProStringList &config = project->values(ProKey(subTarget->name + ".CONFIG")); + if (suffix == "make_first" + && config.indexOf("no_default_target") != -1) { + continue; + } + if((suffix == "install_subtargets" || suffix == "uninstall_subtargets") + && config.indexOf("no_default_install") != -1) { + continue; + } + QString targetRule = subTarget->target + "-" + suffix; + if(flags & SubTargetOrdered) + targetRule += "-ordered"; + t << " " << targetRule; + } + if(suffix == "all" || suffix == "make_first") + t << varGlue("ALL_DEPS"," "," ",""); + if(suffix == "clean") + t << varGlue("CLEAN_DEPS"," "," ",""); + else if (suffix == "distclean") + t << varGlue("DISTCLEAN_DEPS"," "," ",""); + t << " FORCE\n"; + if(suffix == "clean") { + t << fileVarGlue("QMAKE_CLEAN", "\t-$(DEL_FILE) ", "\n\t-$(DEL_FILE) ", "\n"); + } else if(suffix == "distclean") { + QString ofile = Option::fixPathToTargetOS(fileFixify(Option::output.fileName())); + if(!ofile.isEmpty()) + t << "\t-$(DEL_FILE) " << ofile << endl; + t << fileVarGlue("QMAKE_DISTCLEAN", "\t-$(DEL_FILE) ", " ", "\n"); + } + } + + // user defined targets + const ProStringList &qut = project->values("QMAKE_EXTRA_TARGETS"); + for (ProStringList::ConstIterator qut_it = qut.begin(); qut_it != qut.end(); ++qut_it) { + const ProStringList &config = project->values(ProKey(*qut_it + ".CONFIG")); + QString targ = var(ProKey(*qut_it + ".target")), + cmd = var(ProKey(*qut_it + ".commands")), deps; + if(targ.isEmpty()) + targ = (*qut_it).toQString(); + t << endl; + + const ProStringList &deplist = project->values(ProKey(*qut_it + ".depends")); + for (ProStringList::ConstIterator dep_it = deplist.begin(); dep_it != deplist.end(); ++dep_it) { + QString dep = var(ProKey(*dep_it + ".target")); + if(dep.isEmpty()) + dep = Option::fixPathToTargetOS((*dep_it).toQString(), false); + deps += " " + dep; + } + if (config.indexOf("recursive") != -1) { + QSet recurse; + const ProKey rkey(*qut_it + ".recurse"); + if (project->isSet(rkey)) { + recurse = project->values(rkey).toQStringList().toSet(); + } else { + for(int target = 0; target < targets.size(); ++target) + recurse.insert(targets.at(target)->name); + } + for(int target = 0; target < targets.size(); ++target) { + SubTarget *subtarget = targets.at(target); + QString in_directory = subtarget->in_directory; + if(!in_directory.isEmpty() && !in_directory.endsWith(Option::dir_sep)) + in_directory += Option::dir_sep; + QString out_directory = subtarget->out_directory; + if(!out_directory.isEmpty() && !out_directory.endsWith(Option::dir_sep)) + out_directory += Option::dir_sep; + if(!abs_source_path.isEmpty() && out_directory.startsWith(abs_source_path)) + out_directory = Option::output_dir + out_directory.mid(abs_source_path.length()); + + if(!recurse.contains(subtarget->name)) + continue; + + QString out_directory_cdin = out_directory.isEmpty() ? "\n\t" + : "\n\tcd " + out_directory + " && "; + QString makefilein = " -f " + subtarget->makefile; + + QString out; + QString in; + if (!subtarget->profile.isEmpty()) { + out = subtarget->makefile; + in = escapeFilePath(fileFixify(in_directory + subtarget->profile, FileFixifyAbsolute)); + if (out.startsWith(in_directory)) + out = out.mid(in_directory.length()); + } + + //write the rule/depends + if(flags & SubTargetOrdered) { + const QString dep = subtarget->target + "-" + (*qut_it) + "_ordered"; + t << dep << ":"; + if(target) + t << " " << targets.at(target-1)->target << "-" << (*qut_it) << "_ordered "; + deps += " " + dep; + } else { + const QString dep = subtarget->target + "-" + (*qut_it); + t << dep << ":"; + if(!subtarget->depends.isEmpty()) + t << " " << valGlue(subtarget->depends, QString(), "-" + (*qut_it) + " ", "-" + (*qut_it)); + deps += " " + dep; + } + + QString sub_targ = targ; + const ProKey rtkey(*qut_it + ".recurse_target"); + if (project->isSet(rtkey)) + sub_targ = project->first(rtkey).toQString(); + + //write the commands + writeSubTargetCall(t, in_directory, in, out_directory, out, + out_directory_cdin, makefilein + " " + sub_targ); + } + } + if (config.indexOf("phony") != -1) + deps += " FORCE"; + t << targ << ":" << deps << "\n"; + if(!cmd.isEmpty()) + t << "\t" << cmd << endl; + } + + if(flags & SubTargetInstalls) { + project->values("INSTALLDEPS") += "install_subtargets"; + project->values("UNINSTALLDEPS") += "uninstall_subtargets"; + writeInstalls(t, true); + } + t << "FORCE:\n\n"; +} + +void +MakefileGenerator::writeMakeQmake(QTextStream &t, bool noDummyQmakeAll) +{ + QString ofile = Option::fixPathToTargetOS(fileFixify(Option::output.fileName())); + if(project->isEmpty("QMAKE_FAILED_REQUIREMENTS") && !project->isEmpty("QMAKE_INTERNAL_PRL_FILE")) { + QStringList files = fileFixify(Option::mkfile::project_files); + t << escapeDependencyPath(project->first("QMAKE_INTERNAL_PRL_FILE").toQString()) << ": \n\t" + << "@$(QMAKE) -prl " << buildArgs() << " " << files.join(' ') << endl; + } + + QString qmake = build_args(); + if(!ofile.isEmpty() && !project->isActiveConfig("no_autoqmake")) { + t << escapeFilePath(ofile) << ": " + << escapeDependencyPath(fileFixify(project->projectFile())) << " "; + if (Option::globals->do_cache) { + if (!project->confFile().isEmpty()) + t << escapeDependencyPath(fileFixify(project->confFile())) << " "; + if (!project->cacheFile().isEmpty()) + t << escapeDependencyPath(fileFixify(project->cacheFile())) << " "; + } + if(!specdir().isEmpty()) { + if(exists(Option::fixPathToLocalOS(specdir()+QDir::separator()+"qmake.conf"))) + t << escapeDependencyPath(specdir() + Option::dir_sep + "qmake.conf") << " "; + } + const ProStringList &included = project->values("QMAKE_INTERNAL_INCLUDED_FILES"); + t << escapeDependencyPaths(included).join(" \\\n\t\t") << "\n\t" + << qmake << endl; + for(int include = 0; include < included.size(); ++include) { + const ProString &i = included.at(include); + if(!i.isEmpty()) + t << i << ":\n"; + } + } + if(project->first("QMAKE_ORIG_TARGET") != "qmake") { + t << "qmake: FORCE\n\t@" << qmake << endl << endl; + if (!noDummyQmakeAll) + t << "qmake_all: FORCE\n\n"; + } +} + +QFileInfo +MakefileGenerator::fileInfo(QString file) const +{ + static QHash *cache = 0; + static QFileInfo noInfo = QFileInfo(); + if(!cache) { + cache = new QHash; + qmakeAddCacheClear(qmakeDeleteCacheClear >, (void**)&cache); + } + FileInfoCacheKey cacheKey(file); + QFileInfo value = cache->value(cacheKey, noInfo); + if (value != noInfo) + return value; + + QFileInfo fi(file); + if (fi.exists()) + cache->insert(cacheKey, fi); + return fi; +} + +QString +MakefileGenerator::unescapeFilePath(const QString &path) const +{ + QString ret = path; + ret.replace(QLatin1String("\\ "), QLatin1String(" ")); + ret.remove(QLatin1Char('\"')); + return ret; +} + +ProString +MakefileGenerator::unescapeFilePath(const ProString &path) const +{ + return ProString(unescapeFilePath(path.toQString())); +} + +ProString +MakefileGenerator::escapeFilePath(const ProString &path) const +{ + return ProString(escapeFilePath(path.toQString())); +} + +QStringList +MakefileGenerator::escapeFilePaths(const QStringList &paths) const +{ + QStringList ret; + for(int i = 0; i < paths.size(); ++i) + ret.append(escapeFilePath(paths.at(i))); + return ret; +} + +ProStringList +MakefileGenerator::escapeFilePaths(const ProStringList &paths) const +{ + ProStringList ret; + for (int i = 0; i < paths.size(); ++i) + ret.append(escapeFilePath(paths.at(i))); + return ret; +} + +QStringList +MakefileGenerator::escapeDependencyPaths(const QStringList &paths) const +{ + QStringList ret; + for(int i = 0; i < paths.size(); ++i) + ret.append(escapeDependencyPath(paths.at(i))); + return ret; +} + +ProStringList +MakefileGenerator::escapeDependencyPaths(const ProStringList &paths) const +{ + ProStringList ret; + for (int i = 0; i < paths.size(); ++i) + ret.append(escapeDependencyPath(paths.at(i).toQString())); + return ret; +} + +QStringList +MakefileGenerator::unescapeFilePaths(const QStringList &paths) const +{ + QStringList ret; + for(int i = 0; i < paths.size(); ++i) + ret.append(unescapeFilePath(paths.at(i))); + return ret; +} + +ProStringList +MakefileGenerator::unescapeFilePaths(const ProStringList &paths) const +{ + ProStringList ret; + for (int i = 0; i < paths.size(); ++i) + ret.append(unescapeFilePath(paths.at(i))); + return ret; +} + +QStringList +MakefileGenerator::fileFixify(const QStringList& files, const QString &out_dir, const QString &in_dir, + FileFixifyType fix, bool canon) const +{ + if(files.isEmpty()) + return files; + QStringList ret; + for(QStringList::ConstIterator it = files.begin(); it != files.end(); ++it) { + if(!(*it).isEmpty()) + ret << fileFixify((*it), out_dir, in_dir, fix, canon); + } + return ret; +} + +QString +MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const QString &in_d, + FileFixifyType fix, bool canon) const +{ + if(file.isEmpty()) + return file; + QString ret = unescapeFilePath(file); + + //do the fixin' + QString orig_file = ret; + if(ret.startsWith(QLatin1Char('~'))) { + if(ret.startsWith(QLatin1String("~/"))) + ret = QDir::homePath() + ret.mid(1); + else + warn_msg(WarnLogic, "Unable to expand ~ in %s", ret.toLatin1().constData()); + } + if(fix == FileFixifyAbsolute || (fix == FileFixifyDefault && project->isActiveConfig("no_fixpath"))) { + if(fix == FileFixifyAbsolute && QDir::isRelativePath(ret)) { //already absolute + QString pwd = qmake_getpwd(); + if (!pwd.endsWith(QLatin1Char('/'))) + pwd += QLatin1Char('/'); + ret.prepend(pwd); + } + ret = Option::fixPathToTargetOS(ret, false, canon); + } else { //fix it.. + QString out_dir = QDir(Option::output_dir).absoluteFilePath(out_d); + QString in_dir = QDir(qmake_getpwd()).absoluteFilePath(in_d); + { + QFileInfo in_fi(fileInfo(in_dir)); + if(in_fi.exists()) + in_dir = in_fi.canonicalFilePath(); + QFileInfo out_fi(fileInfo(out_dir)); + if(out_fi.exists()) + out_dir = out_fi.canonicalFilePath(); + } + + QString qfile(Option::fixPathToLocalOS(ret, true, canon)); + QFileInfo qfileinfo(fileInfo(qfile)); + if(out_dir != in_dir || !qfileinfo.isRelative()) { + if(qfileinfo.isRelative()) { + ret = in_dir + "/" + qfile; + qfileinfo.setFile(ret); + } + ret = Option::fixPathToTargetOS(ret, false, canon); + if(canon && qfileinfo.exists() && + file == Option::fixPathToTargetOS(ret, true, canon)) + ret = Option::fixPathToTargetOS(qfileinfo.canonicalFilePath()); + QString match_dir = Option::fixPathToTargetOS(out_dir, false, canon); + if(ret == match_dir) { + ret = ""; + } else if(ret.startsWith(match_dir + Option::dir_sep)) { + ret = ret.mid(match_dir.length() + Option::dir_sep.length()); + } else { + //figure out the depth + int depth = 4; + if(Option::qmake_mode == Option::QMAKE_GENERATE_MAKEFILE || + Option::qmake_mode == Option::QMAKE_GENERATE_PRL) { + if(project && !project->isEmpty("QMAKE_PROJECT_DEPTH")) + depth = project->first("QMAKE_PROJECT_DEPTH").toInt(); + else if(Option::mkfile::cachefile_depth != -1) + depth = Option::mkfile::cachefile_depth; + } + //calculate how much can be removed + QString dot_prefix; + for(int i = 1; i <= depth; i++) { + int sl = match_dir.lastIndexOf(Option::dir_sep); + if(sl == -1) + break; + match_dir = match_dir.left(sl); + if(match_dir.isEmpty()) + break; + if(ret.startsWith(match_dir + Option::dir_sep)) { + //concat + int remlen = ret.length() - (match_dir.length() + 1); + if(remlen < 0) + remlen = 0; + ret = ret.right(remlen); + //prepend + for(int o = 0; o < i; o++) + dot_prefix += ".." + Option::dir_sep; + break; + } + } + ret.prepend(dot_prefix); + } + } else { + ret = Option::fixPathToTargetOS(ret, false, canon); + } + } + if(ret.isEmpty()) + ret = "."; + debug_msg(3, "Fixed[%d,%d] %s :: to :: %s [%s::%s] [%s::%s]", fix, canon, orig_file.toLatin1().constData(), + ret.toLatin1().constData(), in_d.toLatin1().constData(), out_d.toLatin1().constData(), + qmake_getpwd().toLatin1().constData(), Option::output_dir.toLatin1().constData()); + return ret; +} + +QMakeLocalFileName +MakefileGenerator::fixPathForFile(const QMakeLocalFileName &file, bool forOpen) +{ + if(forOpen) + return QMakeLocalFileName(fileFixify(file.real(), qmake_getpwd(), Option::output_dir)); + return QMakeLocalFileName(fileFixify(file.real())); +} + +QFileInfo +MakefileGenerator::findFileInfo(const QMakeLocalFileName &file) +{ + return fileInfo(file.local()); +} + +QMakeLocalFileName +MakefileGenerator::findFileForDep(const QMakeLocalFileName &dep, const QMakeLocalFileName &file) +{ + QMakeLocalFileName ret; + if(!project->isEmpty("SKIP_DEPENDS")) { + bool found = false; + const ProStringList &nodeplist = project->values("SKIP_DEPENDS"); + for (ProStringList::ConstIterator it = nodeplist.begin(); + it != nodeplist.end(); ++it) { + QRegExp regx((*it).toQString()); + if(regx.indexIn(dep.local()) != -1) { + found = true; + break; + } + } + if(found) + return ret; + } + + ret = QMakeSourceFileInfo::findFileForDep(dep, file); + if(!ret.isNull()) + return ret; + + //these are some "hacky" heuristics it will try to do on an include + //however these can be turned off at runtime, I'm not sure how + //reliable these will be, most likely when problems arise turn it off + //and see if they go away.. + if(Option::mkfile::do_dep_heuristics) { + if(depHeuristicsCache.contains(dep.real())) + return depHeuristicsCache[dep.real()]; + + if(Option::output_dir != qmake_getpwd() + && QDir::isRelativePath(dep.real())) { //is it from the shadow tree + QList depdirs = QMakeSourceFileInfo::dependencyPaths(); + depdirs.prepend(fileInfo(file.real()).absoluteDir().path()); + QString pwd = qmake_getpwd(); + if(pwd.at(pwd.length()-1) != '/') + pwd += '/'; + for(int i = 0; i < depdirs.count(); i++) { + QString dir = depdirs.at(i).real(); + if(!QDir::isRelativePath(dir) && dir.startsWith(pwd)) + dir = dir.mid(pwd.length()); + if(QDir::isRelativePath(dir)) { + if(!dir.endsWith(Option::dir_sep)) + dir += Option::dir_sep; + QString shadow = fileFixify(dir + dep.local(), pwd, Option::output_dir); + if(exists(shadow)) { + ret = QMakeLocalFileName(shadow); + goto found_dep_from_heuristic; + } + } + } + } + { //is it from an EXTRA_TARGET + const QString dep_basename = dep.local().section(Option::dir_sep, -1); + const ProStringList &qut = project->values("QMAKE_EXTRA_TARGETS"); + for (ProStringList::ConstIterator it = qut.begin(); it != qut.end(); ++it) { + QString targ = var(ProKey(*it + ".target")); + if(targ.isEmpty()) + targ = (*it).toQString(); + QString out = Option::fixPathToTargetOS(targ); + if(out == dep.real() || out.section(Option::dir_sep, -1) == dep_basename) { + ret = QMakeLocalFileName(out); + goto found_dep_from_heuristic; + } + } + } + { //is it from an EXTRA_COMPILER + const QString dep_basename = dep.local().section(Option::dir_sep, -1); + const ProStringList &quc = project->values("QMAKE_EXTRA_COMPILERS"); + for (ProStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it) { + const ProString &tmp_out = project->first(ProKey(*it + ".output")); + if(tmp_out.isEmpty()) + continue; + const ProStringList &tmp = project->values(ProKey(*it + ".input")); + for (ProStringList::ConstIterator it2 = tmp.begin(); it2 != tmp.end(); ++it2) { + const ProStringList &inputs = project->values((*it2).toKey()); + for (ProStringList::ConstIterator input = inputs.begin(); input != inputs.end(); ++input) { + QString out = Option::fixPathToTargetOS(unescapeFilePath( + replaceExtraCompilerVariables(tmp_out.toQString(), (*input).toQString(), QString()))); + if (out == dep.real() || out.section(Option::dir_sep, -1) == dep_basename) { + ret = QMakeLocalFileName(fileFixify(out, qmake_getpwd(), Option::output_dir)); + goto found_dep_from_heuristic; + } + } + } + } + } + found_dep_from_heuristic: + depHeuristicsCache.insert(dep.real(), ret); + } + return ret; +} + +QStringList +&MakefileGenerator::findDependencies(const QString &file) +{ + const QString fixedFile = fileFixify(file); + if(!dependsCache.contains(fixedFile)) { +#if 1 + QStringList deps = QMakeSourceFileInfo::dependencies(file); + if(file != fixedFile) + deps += QMakeSourceFileInfo::dependencies(fixedFile); +#else + QStringList deps = QMakeSourceFileInfo::dependencies(fixedFile); +#endif + dependsCache.insert(fixedFile, deps); + } + return dependsCache[fixedFile]; +} + +QString +MakefileGenerator::specdir() +{ + if (spec.isEmpty()) + spec = fileFixify(project->specDir()); + return spec; +} + +bool +MakefileGenerator::openOutput(QFile &file, const QString &build) const +{ + { + QString outdir; + if(!file.fileName().isEmpty()) { + if(QDir::isRelativePath(file.fileName())) + file.setFileName(Option::output_dir + "/" + file.fileName()); //pwd when qmake was run + QFileInfo fi(fileInfo(file.fileName())); + if(fi.isDir()) + outdir = file.fileName() + '/'; + } + if(!outdir.isEmpty() || file.fileName().isEmpty()) { + QString fname = "Makefile"; + if(!project->isEmpty("MAKEFILE")) + fname = project->first("MAKEFILE").toQString(); + file.setFileName(outdir + fname); + } + } + if(QDir::isRelativePath(file.fileName())) { + QString fname = Option::output_dir; //pwd when qmake was run + if(!fname.endsWith("/")) + fname += "/"; + fname += file.fileName(); + file.setFileName(fname); + } + if(!build.isEmpty()) + file.setFileName(file.fileName() + "." + build); + if(project->isEmpty("QMAKE_MAKEFILE")) + project->values("QMAKE_MAKEFILE").append(file.fileName()); + int slsh = file.fileName().lastIndexOf('/'); + if(slsh != -1) + mkdir(file.fileName().left(slsh)); + if(file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) { + QFileInfo fi(fileInfo(Option::output.fileName())); + QString od; + if(fi.isSymLink()) + od = fileInfo(fi.readLink()).absolutePath(); + else + od = fi.path(); + od = QDir::fromNativeSeparators(od); + if(QDir::isRelativePath(od)) { + QString dir = Option::output_dir; + if (!dir.endsWith('/') && !od.isEmpty()) + dir += '/'; + od.prepend(dir); + } + Option::output_dir = od; + return true; + } + return false; +} + +QString +MakefileGenerator::pkgConfigFileName(bool fixify) +{ + QString ret = project->first("QMAKE_PKGCONFIG_FILE").toQString(); + if (ret.isEmpty()) { + ret = project->first("TARGET").toQString(); + int slsh = ret.lastIndexOf(Option::dir_sep); + if (slsh != -1) + ret = ret.right(ret.length() - slsh - 1); + if (ret.startsWith("lib")) + ret = ret.mid(3); + int dot = ret.indexOf('.'); + if (dot != -1) + ret = ret.left(dot); + } + ret += Option::pkgcfg_ext; + QString subdir = project->first("QMAKE_PKGCONFIG_DESTDIR").toQString(); + if(!subdir.isEmpty()) { + // initOutPaths() appends dir_sep, but just to be safe.. + if (!subdir.endsWith(Option::dir_sep)) + ret.prepend(Option::dir_sep); + ret.prepend(subdir); + } + if(fixify) { + if(QDir::isRelativePath(ret) && !project->isEmpty("DESTDIR")) + ret.prepend(project->first("DESTDIR").toQString()); + ret = Option::fixPathToLocalOS(fileFixify(ret, qmake_getpwd(), Option::output_dir)); + } + return ret; +} + +QString +MakefileGenerator::pkgConfigPrefix() const +{ + if(!project->isEmpty("QMAKE_PKGCONFIG_PREFIX")) + return project->first("QMAKE_PKGCONFIG_PREFIX").toQString(); + return QLibraryInfo::rawLocation(QLibraryInfo::PrefixPath, QLibraryInfo::FinalPaths); +} + +QString +MakefileGenerator::pkgConfigFixPath(QString path) const +{ + QString prefix = pkgConfigPrefix(); + if(path.startsWith(prefix)) + path = path.replace(prefix, "${prefix}"); + return path; +} + +void +MakefileGenerator::writePkgConfigFile() +{ + QString fname = pkgConfigFileName(); + mkdir(fileInfo(fname).path()); + QFile ft(fname); + if(!ft.open(QIODevice::WriteOnly)) + return; + project->values("ALL_DEPS").append(fileFixify(fname)); + QTextStream t(&ft); + + QString prefix = pkgConfigPrefix(); + QString libDir = project->first("QMAKE_PKGCONFIG_LIBDIR").toQString(); + if(libDir.isEmpty()) + libDir = prefix + Option::dir_sep + "lib" + Option::dir_sep; + QString includeDir = project->first("QMAKE_PKGCONFIG_INCDIR").toQString(); + if(includeDir.isEmpty()) + includeDir = prefix + "/include"; + + t << "prefix=" << prefix << endl; + t << "exec_prefix=${prefix}\n" + << "libdir=" << pkgConfigFixPath(libDir) << "\n" + << "includedir=" << pkgConfigFixPath(includeDir) << endl; + t << endl; + + //extra PKGCONFIG variables + const ProStringList &pkgconfig_vars = project->values("QMAKE_PKGCONFIG_VARIABLES"); + for(int i = 0; i < pkgconfig_vars.size(); ++i) { + const ProString &var = project->first(ProKey(pkgconfig_vars.at(i) + ".name")); + QString val = project->values(ProKey(pkgconfig_vars.at(i) + ".value")).join(' '); + if(var.isEmpty()) + continue; + if(val.isEmpty()) { + const ProStringList &var_vars = project->values(ProKey(pkgconfig_vars.at(i) + ".variable")); + for(int v = 0; v < var_vars.size(); ++v) { + const ProStringList &vars = project->values(var_vars.at(v).toKey()); + for(int var = 0; var < vars.size(); ++var) { + if(!val.isEmpty()) + val += " "; + val += pkgConfigFixPath(vars.at(var).toQString()); + } + } + } + if (!val.isEmpty()) + t << var << "=" << val << endl; + } + + t << endl; + + QString name = project->first("QMAKE_PKGCONFIG_NAME").toQString(); + if(name.isEmpty()) { + name = project->first("QMAKE_ORIG_TARGET").toQString().toLower(); + name.replace(0, 1, name[0].toUpper()); + } + t << "Name: " << name << endl; + QString desc = project->values("QMAKE_PKGCONFIG_DESCRIPTION").join(' '); + if(desc.isEmpty()) { + if(name.isEmpty()) { + desc = project->first("QMAKE_ORIG_TARGET").toQString().toLower(); + desc.replace(0, 1, desc[0].toUpper()); + } else { + desc = name; + } + if(project->first("TEMPLATE") == "lib") { + if(project->isActiveConfig("plugin")) + desc += " Plugin"; + else + desc += " Library"; + } else if(project->first("TEMPLATE") == "app") { + desc += " Application"; + } + } + t << "Description: " << desc << endl; + ProString version = project->first("QMAKE_PKGCONFIG_VERSION"); + if (version.isEmpty()) + version = project->first("VERSION"); + if (!version.isEmpty()) + t << "Version: " << version << endl; + + // libs + t << "Libs: "; + QString pkgConfiglibDir; + QString pkgConfiglibName; + if (target_mode == TARG_MAC_MODE && project->isActiveConfig("lib_bundle")) { + pkgConfiglibDir = "-F${libdir}"; + ProString bundle; + if (!project->isEmpty("QMAKE_FRAMEWORK_BUNDLE_NAME")) + bundle = unescapeFilePath(project->first("QMAKE_FRAMEWORK_BUNDLE_NAME")); + else + bundle = unescapeFilePath(project->first("TARGET")); + int suffix = bundle.lastIndexOf(".framework"); + if (suffix != -1) + bundle = bundle.left(suffix); + pkgConfiglibName = "-framework " + bundle + " "; + } else { + pkgConfiglibDir = "-L${libdir}"; + pkgConfiglibName = "-l" + unescapeFilePath(project->first("QMAKE_ORIG_TARGET")); + if (project->isActiveConfig("shared")) + pkgConfiglibName += project->first("TARGET_VERSION_EXT").toQString(); + } + t << pkgConfiglibDir << " " << pkgConfiglibName << " \n"; + + ProStringList libs; + if(!project->isEmpty("QMAKE_INTERNAL_PRL_LIBS")) { + libs = project->values("QMAKE_INTERNAL_PRL_LIBS"); + } else { + libs << "QMAKE_LIBS"; //obvious one + } + libs << "QMAKE_LIBS_PRIVATE"; + libs << "QMAKE_LFLAGS_THREAD"; //not sure about this one, but what about things like -pthread? + t << "Libs.private: "; + for (ProStringList::ConstIterator it = libs.begin(); it != libs.end(); ++it) { + t << project->values((*it).toKey()).join(' ') << " "; + } + t << endl; + + // flags + // ### too many + t << "Cflags: " + // << var("QMAKE_CXXFLAGS") << " " + << varGlue("PRL_EXPORT_DEFINES","-D"," -D"," ") + << varGlue("PRL_EXPORT_CXXFLAGS", "", " ", " ") + << varGlue("QMAKE_PKGCONFIG_CFLAGS", "", " ", " ") + // << varGlue("DEFINES","-D"," -D"," ") + << "-I${includedir}\n"; + + // requires + const QString requires = project->values("QMAKE_PKGCONFIG_REQUIRES").join(' '); + if (!requires.isEmpty()) { + t << "Requires: " << requires << endl; + } + + t << endl; +} + +static QString windowsifyPath(const QString &str) +{ + // The paths are escaped in prl files, so every slash needs to turn into two backslashes. + // Then each backslash needs to be escaped for sed. And another level for C quoting here. + return QString(str).replace('/', "\\\\\\\\"); +} + +QString MakefileGenerator::installMetaFile(const ProKey &replace_rule, const QString &src, const QString &dst) +{ + QString ret; + if (project->isEmpty(replace_rule) + || project->isActiveConfig("no_sed_meta_install")) { + ret += "-$(INSTALL_FILE) \"" + src + "\" \"" + dst + "\""; + } else { + ret += "-$(SED)"; + const ProStringList &replace_rules = project->values(replace_rule); + for (int r = 0; r < replace_rules.size(); ++r) { + const ProString match = project->first(ProKey(replace_rules.at(r) + ".match")), + replace = project->first(ProKey(replace_rules.at(r) + ".replace")); + if (!match.isEmpty() /*&& match != replace*/) { + ret += " -e " + shellQuote("s," + match + "," + replace + ",g"); + if (isWindowsShell() && project->first(ProKey(replace_rules.at(r) + ".CONFIG")).contains("path")) + ret += " -e " + shellQuote("s," + windowsifyPath(match.toQString()) + + "," + windowsifyPath(replace.toQString()) + ",gi"); + } + } + ret += " \"" + src + "\" >\"" + dst + "\""; + } + return ret; +} + +QString MakefileGenerator::shellQuote(const QString &str) +{ + return isWindowsShell() ? QMakeInternal::IoUtils::shellQuoteWin(str) + : QMakeInternal::IoUtils::shellQuoteUnix(str); +} + +QT_END_NAMESPACE diff --git a/Telegram/_qt_5_3_0_patch/qtbase/src/gui/painting/qpaintengine_p.h b/Telegram/_qt_5_3_0_patch/qtbase/src/gui/painting/qpaintengine_p.h new file mode 100644 index 000000000..c9d85033d --- /dev/null +++ b/Telegram/_qt_5_3_0_patch/qtbase/src/gui/painting/qpaintengine_p.h @@ -0,0 +1,135 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPAINTENGINE_P_H +#define QPAINTENGINE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of other Qt classes. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "QtGui/qpainter.h" +#include "QtGui/qpaintengine.h" +#include "QtGui/qregion.h" +#include "private/qobject_p.h" + +QT_BEGIN_NAMESPACE + +class QPaintDevice; + +class Q_GUI_EXPORT QPaintEnginePrivate +{ + Q_DECLARE_PUBLIC(QPaintEngine) +public: + QPaintEnginePrivate() : pdev(0), q_ptr(0), currentClipDevice(0), hasSystemTransform(0), + hasSystemViewport(0) {} + virtual ~QPaintEnginePrivate() { } + QPaintDevice *pdev; + QPaintEngine *q_ptr; + QRegion systemClip; + QRect systemRect; + QRegion systemViewport; + QTransform systemTransform; + QPaintDevice *currentClipDevice; + uint hasSystemTransform : 1; + uint hasSystemViewport : 1; + + inline void transformSystemClip() + { + if (systemClip.isEmpty()) + return; + + if (hasSystemTransform) { + if (systemTransform.type() <= QTransform::TxTranslate) + systemClip.translate(qRound(systemTransform.dx()), qRound(systemTransform.dy())); + else { + // Transform the system clip region back from device pixels to device-independent pixels before + // applying systemTransform, which already has transform from device-independent pixels to device pixels +#ifdef Q_OS_MAC + QTransform scaleTransform; + const qreal invDevicePixelRatio = 1. / pdev->devicePixelRatio(); + scaleTransform.scale(invDevicePixelRatio, invDevicePixelRatio); + systemClip = systemTransform.map(scaleTransform.map(systemClip)); +#else + systemClip = systemTransform.map(systemClip); +#endif + } + } + + // Make sure we're inside the viewport. + if (hasSystemViewport) { + systemClip &= systemViewport; + if (systemClip.isEmpty()) { + // We don't want to paint without system clip, so set it to 1 pixel :) + systemClip = QRect(systemViewport.boundingRect().topLeft(), QSize(1, 1)); + } + } + } + + inline void setSystemTransform(const QTransform &xform) + { + systemTransform = xform; + if ((hasSystemTransform = !xform.isIdentity()) || hasSystemViewport) + transformSystemClip(); + systemStateChanged(); + } + + inline void setSystemViewport(const QRegion ®ion) + { + systemViewport = region; + hasSystemViewport = !systemViewport.isEmpty(); + } + + virtual void systemStateChanged() { } + + void drawBoxTextItem(const QPointF &p, const QTextItemInt &ti); +}; + +QT_END_NAMESPACE + +#endif // QPAINTENGINE_P_H diff --git a/Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm b/Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm new file mode 100644 index 000000000..db9e8137e --- /dev/null +++ b/Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm @@ -0,0 +1,1772 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include + +#include "qnsview.h" +#include "qcocoawindow.h" +#include "qcocoahelpers.h" +#include "qcocoaautoreleasepool.h" +#include "qmultitouch_mac_p.h" +#include "qcocoadrag.h" +#include + +#include +#include +#include +#include +#include "qcocoabackingstore.h" +#include "qcocoaglcontext.h" +#include "qcocoaintegration.h" + +#ifdef QT_COCOA_ENABLE_ACCESSIBILITY_INSPECTOR +#include +#endif + +static QTouchDevice *touchDevice = 0; + +@interface NSEvent (Qt_Compile_Leopard_DeviceDelta) + - (CGFloat)deviceDeltaX; + - (CGFloat)deviceDeltaY; + - (CGFloat)deviceDeltaZ; +@end + +@implementation QNSView + +- (id) init +{ + self = [super initWithFrame : NSMakeRect(0,0, 300,300)]; + if (self) { + m_backingStore = 0; + m_maskImage = 0; + m_shouldInvalidateWindowShadow = false; + m_window = 0; + m_buttons = Qt::NoButton; + m_sendKeyEvent = false; + m_subscribesForGlobalFrameNotifications = false; + m_glContext = 0; + m_shouldSetGLContextinDrawRect = false; + currentCustomDragTypes = 0; + m_sendUpAsRightButton = false; + m_inputSource = 0; + + if (!touchDevice) { + touchDevice = new QTouchDevice; + touchDevice->setType(QTouchDevice::TouchPad); + touchDevice->setCapabilities(QTouchDevice::Position | QTouchDevice::NormalizedPosition); + QWindowSystemInterface::registerTouchDevice(touchDevice); + } + } + return self; +} + +- (void)dealloc +{ + CGImageRelease(m_maskImage); + m_maskImage = 0; + m_window = 0; + m_subscribesForGlobalFrameNotifications = false; + [m_inputSource release]; + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + delete currentCustomDragTypes; + + [super dealloc]; +} + +- (id)initWithQWindow:(QWindow *)window platformWindow:(QCocoaWindow *) platformWindow +{ + self = [self init]; + if (!self) + return 0; + + m_window = window; + m_platformWindow = platformWindow; + m_sendKeyEvent = false; + +#ifdef QT_COCOA_ENABLE_ACCESSIBILITY_INSPECTOR + // prevent rift in space-time continuum, disable + // accessibility for the accessibility inspector's windows. + static bool skipAccessibilityForInspectorWindows = false; + if (!skipAccessibilityForInspectorWindows) { + + // m_accessibleRoot = window->accessibleRoot(); + + AccessibilityInspector *inspector = new AccessibilityInspector(window); + skipAccessibilityForInspectorWindows = true; + inspector->inspectWindow(window); + skipAccessibilityForInspectorWindows = false; + } +#endif + + [self registerDragTypes]; + [self setPostsFrameChangedNotifications : YES]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(updateGeometry) + name:NSViewFrameDidChangeNotification + object:self]; + + return self; +} + +- (void) setQCocoaGLContext:(QCocoaGLContext *)context +{ + m_glContext = context; + [m_glContext->nsOpenGLContext() setView:self]; + if (![m_glContext->nsOpenGLContext() view]) { + //was unable to set view + m_shouldSetGLContextinDrawRect = true; + } + + if (!m_subscribesForGlobalFrameNotifications) { + // NSOpenGLContext expects us to repaint (or update) the view when + // it changes position on screen. Since this happens unnoticed for + // the view when the parent view moves, we need to register a special + // notification that lets us handle this case: + m_subscribesForGlobalFrameNotifications = true; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(globalFrameChanged:) + name:NSViewGlobalFrameDidChangeNotification + object:self]; + } +} + +- (void) globalFrameChanged:(NSNotification*)notification +{ + Q_UNUSED(notification); + m_platformWindow->updateExposedGeometry(); +} + +- (void)viewDidMoveToSuperview +{ + if (!(m_platformWindow->m_contentViewIsToBeEmbedded)) + return; + + if ([self superview]) { + m_platformWindow->m_contentViewIsEmbedded = true; + QWindowSystemInterface::handleGeometryChange(m_window, m_platformWindow->geometry()); + m_platformWindow->updateExposedGeometry(); + QWindowSystemInterface::flushWindowSystemEvents(); + } else { + m_platformWindow->m_contentViewIsEmbedded = false; + } +} + +- (void)viewWillMoveToWindow:(NSWindow *)newWindow +{ + // ### Merge "normal" window code path with this one for 5.1. + if (!(m_window->type() & Qt::SubWindow)) + return; + + if (newWindow) { + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(windowNotification:) + name:nil // Get all notifications + object:newWindow]; + } + if ([self window]) + [[NSNotificationCenter defaultCenter] removeObserver:self name:nil object:[self window]]; +} + +- (QWindow *)topLevelWindow +{ + QWindow *focusWindow = m_window; + + // For widgets we need to do a bit of trickery as the window + // to activate is the window of the top-level widget. + if (m_window->metaObject()->className() == QStringLiteral("QWidgetWindow")) { + while (focusWindow->parent()) { + focusWindow = focusWindow->parent(); + } + } + + return focusWindow; +} + +- (void)updateGeometry +{ + QRect geometry; + + if (m_platformWindow->m_isNSWindowChild) { + return; +#if 0 + //geometry = qt_mac_toQRect([self frame]); + qDebug() << "nsview updateGeometry" << m_platformWindow->window(); + QRect screenRect = qt_mac_toQRect([m_platformWindow->m_nsWindow convertRectToScreen:[self frame]]); + qDebug() << "screenRect" << screenRect; + + screenRect.moveTop(qt_mac_flipYCoordinate(screenRect.y() + screenRect.height())); + geometry = QRect(m_platformWindow->window()->parent()->mapFromGlobal(screenRect.topLeft()), screenRect.size()); + qDebug() << "geometry" << geometry; +#endif + //geometry = QRect(screenRect.origin.x, qt_mac_flipYCoordinate(screenRect.origin.y + screenRect.size.height), screenRect.size.width, screenRect.size.height); + } else if (m_platformWindow->m_nsWindow) { + // top level window, get window rect and flip y. + NSRect rect = [self frame]; + NSRect windowRect = [[self window] frame]; + geometry = QRect(windowRect.origin.x, qt_mac_flipYCoordinate(windowRect.origin.y + rect.size.height), rect.size.width, rect.size.height); + } else if (m_platformWindow->m_contentViewIsToBeEmbedded) { + // embedded child window, use the frame rect ### merge with case below + geometry = qt_mac_toQRect([self bounds]); + } else { + // child window, use the frame rect + geometry = qt_mac_toQRect([self frame]); + } + + if (m_platformWindow->m_nsWindow && geometry == m_platformWindow->geometry()) + return; + +#ifdef QT_COCOA_ENABLE_WINDOW_DEBUG + qDebug() << "QNSView::udpateGeometry" << m_platformWindow << geometry; +#endif + + // Call setGeometry on QPlatformWindow. (not on QCocoaWindow, + // doing that will initiate a geometry change it and possibly create + // an infinite loop when this notification is triggered again.) + m_platformWindow->QPlatformWindow::setGeometry(geometry); + + // Don't send the geometry change if the QWindow is designated to be + // embedded in a foreign view hiearchy but has not actually been + // embedded yet - it's too early. + if (m_platformWindow->m_contentViewIsToBeEmbedded && !m_platformWindow->m_contentViewIsEmbedded) + return; + + // Send a geometry change event to Qt, if it's ready to handle events + if (!m_platformWindow->m_inConstructor) { + QWindowSystemInterface::handleGeometryChange(m_window, geometry); + m_platformWindow->updateExposedGeometry(); + QWindowSystemInterface::flushWindowSystemEvents(); + } +} + +- (void)notifyWindowStateChanged:(Qt::WindowState)newState +{ + // If the window was maximized, then fullscreen, then tried to go directly to "normal" state, + // this notification will say that it is "normal", but it will still look maximized, and + // if you called performZoom it would actually take it back to "normal". + // So we should say that it is maximized because it actually is. + if (newState == Qt::WindowNoState && m_platformWindow->m_effectivelyMaximized) + newState = Qt::WindowMaximized; + QWindowSystemInterface::handleWindowStateChanged(m_window, newState); + // We want to read the window state back from the window, + // but the event we just sent may be asynchronous. + QWindowSystemInterface::flushWindowSystemEvents(); + m_platformWindow->setSynchedWindowStateFromWindow(); +} + +- (void)windowNotification : (NSNotification *) windowNotification +{ + //qDebug() << "windowNotification" << QCFString::toQString([windowNotification name]); + + NSString *notificationName = [windowNotification name]; + if (notificationName == NSWindowDidBecomeKeyNotification) { + if (!m_platformWindow->windowIsPopupType()) + QWindowSystemInterface::handleWindowActivated(m_window); + } else if (notificationName == NSWindowDidResignKeyNotification) { + // key window will be non-nil if another window became key... do not + // set the active window to zero here, the new key window's + // NSWindowDidBecomeKeyNotification hander will change the active window + NSWindow *keyWindow = [NSApp keyWindow]; + if (!keyWindow) { + // no new key window, go ahead and set the active window to zero + if (!m_platformWindow->windowIsPopupType()) + QWindowSystemInterface::handleWindowActivated(0); + } + } else if (notificationName == NSWindowDidMiniaturizeNotification + || notificationName == NSWindowDidDeminiaturizeNotification) { + Qt::WindowState newState = notificationName == NSWindowDidMiniaturizeNotification ? + Qt::WindowMinimized : Qt::WindowNoState; + [self notifyWindowStateChanged:newState]; + // NSWindowDidOrderOnScreenAndFinishAnimatingNotification is private API, and not + // emitted in 10.6, so we bring back the old behavior for that case alone. + if (newState == Qt::WindowNoState/* && QSysInfo::QSysInfo::MacintoshVersion == QSysInfo::MV_10_6*/) // also not emitted if window restored from the app + m_platformWindow->exposeWindow(); + } else if ([notificationName isEqualToString: @"NSWindowDidOrderOffScreenNotification"]) { + m_platformWindow->obscureWindow(); + } else if ([notificationName isEqualToString: @"NSWindowDidOrderOnScreenAndFinishAnimatingNotification"]) { + m_platformWindow->exposeWindow(); + } else if (notificationName == NSWindowDidChangeScreenNotification) { + if (m_window) { + NSUInteger screenIndex = [[NSScreen screens] indexOfObject:self.window.screen]; + if (screenIndex != NSNotFound) { + m_platformWindow->updateExposedGeometry(); + QCocoaScreen *cocoaScreen = QCocoaIntegration::instance()->screenAtIndex(screenIndex); + QWindowSystemInterface::handleWindowScreenChanged(m_window, cocoaScreen->screen()); + } + } + } else { + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + if (QSysInfo::QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7) { + if (notificationName == NSWindowDidEnterFullScreenNotification + || notificationName == NSWindowDidExitFullScreenNotification) { + Qt::WindowState newState = notificationName == NSWindowDidEnterFullScreenNotification ? + Qt::WindowFullScreen : Qt::WindowNoState; + [self notifyWindowStateChanged:newState]; + } + } +#endif + + } +} + +- (void)notifyWindowWillZoom:(BOOL)willZoom +{ + Qt::WindowState newState = willZoom ? Qt::WindowMaximized : Qt::WindowNoState; + if (!willZoom) + m_platformWindow->m_effectivelyMaximized = false; + [self notifyWindowStateChanged:newState]; +} + +- (void)viewDidHide +{ + m_platformWindow->obscureWindow(); +} + +- (void)viewDidUnhide +{ + m_platformWindow->exposeWindow(); +} + +- (void) flushBackingStore:(QCocoaBackingStore *)backingStore region:(const QRegion &)region offset:(QPoint)offset +{ + m_backingStore = backingStore; + m_backingStoreOffset = offset * m_backingStore->getBackingStoreDevicePixelRatio(); + foreach (QRect rect, region.rects()) { + [self setNeedsDisplayInRect:NSMakeRect(rect.x(), rect.y(), rect.width(), rect.height())]; + } +} + +- (BOOL) hasMask +{ + return m_maskImage != 0; +} + +- (BOOL) isOpaque +{ + return m_platformWindow->isOpaque(); +} + +- (void) setMaskRegion:(const QRegion *)region +{ + m_shouldInvalidateWindowShadow = true; + if (m_maskImage) + CGImageRelease(m_maskImage); + if (region->isEmpty()) { + m_maskImage = 0; + return; + } + + const QRect &rect = region->boundingRect(); + QImage tmp(rect.size(), QImage::Format_RGB32); + tmp.fill(Qt::white); + QPainter p(&tmp); + p.setClipRegion(*region); + p.fillRect(rect, Qt::black); + p.end(); + QImage maskImage = QImage(rect.size(), QImage::Format_Indexed8); + for (int y=0; ym_nsWindow) { + [m_platformWindow->m_nsWindow invalidateShadow]; + m_shouldInvalidateWindowShadow = false; + } +} + +- (void) drawRect:(NSRect)dirtyRect +{ + if (m_glContext && m_shouldSetGLContextinDrawRect) { + [m_glContext->nsOpenGLContext() setView:self]; + m_shouldSetGLContextinDrawRect = false; + } + + if (m_platformWindow->m_drawContentBorderGradient) + NSDrawWindowBackground(dirtyRect); + + if (!m_backingStore) + return; + + // Calculate source and target rects. The target rect is the dirtyRect: + CGRect dirtyWindowRect = NSRectToCGRect(dirtyRect); + + // The backing store source rect will be larger on retina displays. + // Scale dirtyRect by the device pixel ratio: + const qreal devicePixelRatio = m_backingStore->getBackingStoreDevicePixelRatio(); + CGRect dirtyBackingRect = CGRectMake(dirtyRect.origin.x * devicePixelRatio, + dirtyRect.origin.y * devicePixelRatio, + dirtyRect.size.width * devicePixelRatio, + dirtyRect.size.height * devicePixelRatio); + + NSGraphicsContext *nsGraphicsContext = [NSGraphicsContext currentContext]; + CGContextRef cgContext = (CGContextRef) [nsGraphicsContext graphicsPort]; + + // Translate coordiate system from CoreGraphics (bottom-left) to NSView (top-left): + CGContextSaveGState(cgContext); + int dy = dirtyWindowRect.origin.y + CGRectGetMaxY(dirtyWindowRect); + + CGContextTranslateCTM(cgContext, 0, dy); + CGContextScaleCTM(cgContext, 1, -1); + + // If a mask is set, modify the sub image accordingly: + CGImageRef subMask = 0; + if (m_maskImage) { + subMask = CGImageCreateWithImageInRect(m_maskImage, dirtyWindowRect); + CGContextClipToMask(cgContext, dirtyWindowRect, subMask); + } + + // Clip out and draw the correct sub image from the (shared) backingstore: + CGRect backingStoreRect = CGRectMake( + dirtyBackingRect.origin.x + m_backingStoreOffset.x(), + dirtyBackingRect.origin.y + m_backingStoreOffset.y(), + dirtyBackingRect.size.width, + dirtyBackingRect.size.height + ); + CGImageRef bsCGImage = m_backingStore->getBackingStoreCGImage(); + CGImageRef cleanImg = CGImageCreateWithImageInRect(bsCGImage, backingStoreRect); + + // Optimization: Copy frame buffer content instead of blending for + // top-level windows where Qt fills the entire window content area. + // (But don't overpaint the title-bar gradient) + if (m_platformWindow->m_nsWindow && !m_platformWindow->m_drawContentBorderGradient) + CGContextSetBlendMode(cgContext, kCGBlendModeCopy); + + CGContextDrawImage(cgContext, dirtyWindowRect, cleanImg); + + // Clean-up: + CGContextRestoreGState(cgContext); + CGImageRelease(cleanImg); + CGImageRelease(subMask); + + [self invalidateWindowShadowIfNeeded]; +} + +- (BOOL) isFlipped +{ + return YES; +} + +- (BOOL)becomeFirstResponder +{ + if (m_window->flags() & Qt::WindowTransparentForInput) + return NO; + QWindowSystemInterface::handleWindowActivated([self topLevelWindow]); + return YES; +} + +- (BOOL)acceptsFirstResponder +{ + if (m_window->flags() & Qt::WindowDoesNotAcceptFocus) + return NO; + if (m_window->flags() & Qt::WindowTransparentForInput) + return NO; + if ((m_window->flags() & Qt::ToolTip) == Qt::ToolTip) + return NO; + return YES; +} + +- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent +{ + Q_UNUSED(theEvent) + if (m_window->flags() & Qt::WindowTransparentForInput) + return NO; + return YES; +} + +- (void)convertFromScreen:(NSPoint)mouseLocation toWindowPoint:(QPointF *)qtWindowPoint andScreenPoint:(QPointF *)qtScreenPoint +{ + // Calculate the mouse position in the QWindow and Qt screen coordinate system, + // starting from coordinates in the NSWindow coordinate system. + // + // This involves translating according to the window location on screen, + // as well as inverting the y coordinate due to the origin change. + // + // Coordinate system overview, outer to innermost: + // + // Name Origin + // + // OS X screen bottom-left + // Qt screen top-left + // NSWindow bottom-left + // NSView/QWindow top-left + // + // NSView and QWindow are equal coordinate systems: the QWindow covers the + // entire NSView, and we've set the NSView's isFlipped property to true. + + NSWindow *window = [self window]; + NSPoint nsWindowPoint; + // Use convertRectToScreen if available (added in 10.7). +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + if ([window respondsToSelector:@selector(convertRectFromScreen:)]) { + NSRect windowRect = [window convertRectFromScreen:NSMakeRect(mouseLocation.x, mouseLocation.y, 1, 1)]; + nsWindowPoint = windowRect.origin; // NSWindow coordinates + } else +#endif + { + nsWindowPoint = [window convertScreenToBase:mouseLocation]; // NSWindow coordinates + } + NSPoint nsViewPoint = [self convertPoint: nsWindowPoint fromView: nil]; // NSView/QWindow coordinates + *qtWindowPoint = QPointF(nsViewPoint.x, nsViewPoint.y); // NSView/QWindow coordinates + + *qtScreenPoint = QPointF(mouseLocation.x, qt_mac_flipYCoordinate(mouseLocation.y)); // Qt screen coordinates +} + +- (void)resetMouseButtons +{ + m_buttons = Qt::NoButton; +} + +- (void)handleMouseEvent:(NSEvent *)theEvent +{ + [self handleTabletEvent: theEvent]; + + QPointF qtWindowPoint; + QPointF qtScreenPoint; + QNSView *targetView = self; + if (m_platformWindow && m_platformWindow->m_forwardWindow) { + if (theEvent.type == NSLeftMouseDragged || theEvent.type == NSLeftMouseUp) + targetView = m_platformWindow->m_forwardWindow->m_qtView; + else + m_platformWindow->m_forwardWindow = 0; + } + + [targetView convertFromScreen:[NSEvent mouseLocation] toWindowPoint:&qtWindowPoint andScreenPoint:&qtScreenPoint]; + ulong timestamp = [theEvent timestamp] * 1000; + + QCocoaDrag* nativeDrag = QCocoaIntegration::instance()->drag(); + nativeDrag->setLastMouseEvent(theEvent, self); + + Qt::KeyboardModifiers keyboardModifiers = [QNSView convertKeyModifiers:[theEvent modifierFlags]]; + QWindowSystemInterface::handleMouseEvent(targetView->m_window, timestamp, qtWindowPoint, qtScreenPoint, m_buttons, keyboardModifiers); +} + +- (void)handleFrameStrutMouseEvent:(NSEvent *)theEvent +{ + // get m_buttons in sync + NSEventType ty = [theEvent type]; + switch (ty) { + case NSLeftMouseDown: + m_buttons |= Qt::LeftButton; + break; + case NSLeftMouseUp: + m_buttons &= ~Qt::LeftButton; + break; + case NSRightMouseDown: + m_buttons |= Qt::RightButton; + break; + case NSRightMouseUp: + m_buttons &= ~Qt::RightButton; + break; + case NSOtherMouseDown: + m_buttons |= cocoaButton2QtButton([theEvent buttonNumber]); + break; + case NSOtherMouseUp: + m_buttons &= ~cocoaButton2QtButton([theEvent buttonNumber]); + default: + break; + } + + NSWindow *window = [self window]; + NSPoint windowPoint = [theEvent locationInWindow]; + + int windowScreenY = [window frame].origin.y + [window frame].size.height; + int viewScreenY = [window convertBaseToScreen:[self convertPoint:[self frame].origin toView:nil]].y; + int titleBarHeight = windowScreenY - viewScreenY; + + NSPoint nsViewPoint = [self convertPoint: windowPoint fromView: nil]; + QPoint qtWindowPoint = QPoint(nsViewPoint.x, titleBarHeight + nsViewPoint.y); + NSPoint screenPoint = [window convertBaseToScreen:windowPoint]; + QPoint qtScreenPoint = QPoint(screenPoint.x, qt_mac_flipYCoordinate(screenPoint.y)); + + ulong timestamp = [theEvent timestamp] * 1000; + QWindowSystemInterface::handleFrameStrutMouseEvent(m_window, timestamp, qtWindowPoint, qtScreenPoint, m_buttons); +} + +- (void)mouseDown:(NSEvent *)theEvent +{ + if (m_window->flags() & Qt::WindowTransparentForInput) + return [super mouseDown:theEvent]; + m_sendUpAsRightButton = false; + if (m_platformWindow->m_activePopupWindow) { + Qt::WindowType type = m_platformWindow->m_activePopupWindow->type(); + QWindowSystemInterface::handleCloseEvent(m_platformWindow->m_activePopupWindow); + QWindowSystemInterface::flushWindowSystemEvents(); + m_platformWindow->m_activePopupWindow = 0; + // Consume the mouse event when closing the popup, except for tool tips + // were it's expected that the event is processed normally. + if (type != Qt::ToolTip) + return; + } + if ([self hasMarkedText]) { + NSInputManager* inputManager = [NSInputManager currentInputManager]; + if ([inputManager wantsToHandleMouseEvents]) { + [inputManager handleMouseEvent:theEvent]; + } + } else { + if ([QNSView convertKeyModifiers:[theEvent modifierFlags]] & Qt::MetaModifier) { + m_buttons |= Qt::RightButton; + m_sendUpAsRightButton = true; + } else { + m_buttons |= Qt::LeftButton; + } + [self handleMouseEvent:theEvent]; + } +} + +- (void)mouseDragged:(NSEvent *)theEvent +{ + if (m_window->flags() & Qt::WindowTransparentForInput) + return [super mouseDragged:theEvent]; + if (!(m_buttons & (m_sendUpAsRightButton ? Qt::RightButton : Qt::LeftButton))) + qWarning("QNSView mouseDragged: Internal mouse button tracking invalid (missing Qt::LeftButton)"); + [self handleMouseEvent:theEvent]; +} + +- (void)mouseUp:(NSEvent *)theEvent +{ + if (m_window->flags() & Qt::WindowTransparentForInput) + return [super mouseUp:theEvent]; + if (m_sendUpAsRightButton) { + m_buttons &= ~Qt::RightButton; + m_sendUpAsRightButton = false; + } else { + m_buttons &= ~Qt::LeftButton; + } + [self handleMouseEvent:theEvent]; +} + +- (void)updateTrackingAreas +{ + [super updateTrackingAreas]; + + // [NSView addTrackingArea] is slow, so bail out early if we can: + if (NSIsEmptyRect([self visibleRect])) + return; + + // Remove current trakcing areas: + QCocoaAutoReleasePool pool; + if (NSArray *trackingArray = [self trackingAreas]) { + NSUInteger size = [trackingArray count]; + for (NSUInteger i = 0; i < size; ++i) { + NSTrackingArea *t = [trackingArray objectAtIndex:i]; + [self removeTrackingArea:t]; + } + } + + // Ideally, we shouldn't have NSTrackingMouseMoved events included below, it should + // only be turned on if mouseTracking, hover is on or a tool tip is set. + // Unfortunately, Qt will send "tooltip" events on mouse moves, so we need to + // turn it on in ALL case. That means EVERY QWindow gets to pay the cost of + // mouse moves delivered to it (Apple recommends keeping it OFF because there + // is a performance hit). So it goes. + NSUInteger trackingOptions = NSTrackingMouseEnteredAndExited | NSTrackingActiveInActiveApp + | NSTrackingInVisibleRect | NSTrackingMouseMoved | NSTrackingCursorUpdate; + NSTrackingArea *ta = [[[NSTrackingArea alloc] initWithRect:[self frame] + options:trackingOptions + owner:self + userInfo:nil] + autorelease]; + [self addTrackingArea:ta]; +} + +-(void)cursorUpdate:(NSEvent *)theEvent +{ + Q_UNUSED(theEvent) + // Set the cursor manually if there is no NSWindow. + if (!m_platformWindow->m_nsWindow && m_platformWindow->m_windowCursor) + [m_platformWindow->m_windowCursor set]; + else + [super cursorUpdate:theEvent]; +} + +-(void)resetCursorRects +{ + // Use the cursor rect API if there is a NSWindow + if (m_platformWindow->m_nsWindow && m_platformWindow->m_windowCursor) + [self addCursorRect:[self visibleRect] cursor:m_platformWindow->m_windowCursor]; +} + +- (void)mouseMoved:(NSEvent *)theEvent +{ + if (m_window->flags() & Qt::WindowTransparentForInput) + return [super mouseMoved:theEvent]; + + QPointF windowPoint; + QPointF screenPoint; + [self convertFromScreen:[NSEvent mouseLocation] toWindowPoint:&windowPoint andScreenPoint:&screenPoint]; + QWindow *childWindow = m_platformWindow->childWindowAt(windowPoint.toPoint()); + + // Top-level windows generate enter-leave events for sub-windows. + // Qt wants to know which window (if any) will be entered at the + // the time of the leave. This is dificult to accomplish by + // handling mouseEnter and mouseLeave envents, since they are sent + // individually to different views. + if (m_platformWindow->m_nsWindow && childWindow) { + if (childWindow != m_platformWindow->m_enterLeaveTargetWindow) { + QWindowSystemInterface::handleEnterLeaveEvent(childWindow, m_platformWindow->m_enterLeaveTargetWindow, windowPoint, screenPoint); + m_platformWindow->m_enterLeaveTargetWindow = childWindow; + } + } + + // Cocoa keeps firing mouse move events for obscured parent views. Qt should not + // send those events so filter them out here. + if (childWindow != m_window) + return; + + [self handleMouseEvent: theEvent]; +} + +- (void)mouseEntered:(NSEvent *)theEvent +{ + m_platformWindow->m_windowUnderMouse = true; + + if (m_window->flags() & Qt::WindowTransparentForInput) + return [super mouseEntered:theEvent]; + + // Top-level windows generate enter events for sub-windows. + if (!m_platformWindow->m_nsWindow) + return; + + QPointF windowPoint; + QPointF screenPoint; + [self convertFromScreen:[NSEvent mouseLocation] toWindowPoint:&windowPoint andScreenPoint:&screenPoint]; + m_platformWindow->m_enterLeaveTargetWindow = m_platformWindow->childWindowAt(windowPoint.toPoint()); + QWindowSystemInterface::handleEnterEvent(m_platformWindow->m_enterLeaveTargetWindow, windowPoint, screenPoint); +} + +- (void)mouseExited:(NSEvent *)theEvent +{ + m_platformWindow->m_windowUnderMouse = false; + + if (m_window->flags() & Qt::WindowTransparentForInput) + return [super mouseExited:theEvent]; + Q_UNUSED(theEvent); + + // Top-level windows generate leave events for sub-windows. + if (!m_platformWindow->m_nsWindow) + return; + + QWindowSystemInterface::handleLeaveEvent(m_platformWindow->m_enterLeaveTargetWindow); + m_platformWindow->m_enterLeaveTargetWindow = 0; +} + +- (void)rightMouseDown:(NSEvent *)theEvent +{ + if (m_window->flags() & Qt::WindowTransparentForInput) + return [super rightMouseDown:theEvent]; + m_buttons |= Qt::RightButton; + [self handleMouseEvent:theEvent]; +} + +- (void)rightMouseDragged:(NSEvent *)theEvent +{ + if (m_window->flags() & Qt::WindowTransparentForInput) + return [super rightMouseDragged:theEvent]; + if (!(m_buttons & Qt::RightButton)) + qWarning("QNSView rightMouseDragged: Internal mouse button tracking invalid (missing Qt::RightButton)"); + [self handleMouseEvent:theEvent]; +} + +- (void)rightMouseUp:(NSEvent *)theEvent +{ + if (m_window->flags() & Qt::WindowTransparentForInput) + return [super rightMouseUp:theEvent]; + m_buttons &= ~Qt::RightButton; + [self handleMouseEvent:theEvent]; +} + +- (void)otherMouseDown:(NSEvent *)theEvent +{ + if (m_window->flags() & Qt::WindowTransparentForInput) + return [super otherMouseDown:theEvent]; + m_buttons |= cocoaButton2QtButton([theEvent buttonNumber]); + [self handleMouseEvent:theEvent]; +} + +- (void)otherMouseDragged:(NSEvent *)theEvent +{ + if (m_window->flags() & Qt::WindowTransparentForInput) + return [super otherMouseDragged:theEvent]; + if (!(m_buttons & ~(Qt::LeftButton | Qt::RightButton))) + qWarning("QNSView otherMouseDragged: Internal mouse button tracking invalid (missing Qt::MiddleButton or Qt::ExtraButton*)"); + [self handleMouseEvent:theEvent]; +} + +- (void)otherMouseUp:(NSEvent *)theEvent +{ + if (m_window->flags() & Qt::WindowTransparentForInput) + return [super otherMouseUp:theEvent]; + m_buttons &= ~cocoaButton2QtButton([theEvent buttonNumber]); + [self handleMouseEvent:theEvent]; +} + +struct QCocoaTabletDeviceData +{ + QTabletEvent::TabletDevice device; + QTabletEvent::PointerType pointerType; + uint capabilityMask; + qint64 uid; +}; + +typedef QHash QCocoaTabletDeviceDataHash; +Q_GLOBAL_STATIC(QCocoaTabletDeviceDataHash, tabletDeviceDataHash) + +- (void)handleTabletEvent: (NSEvent *)theEvent +{ + NSEventType eventType = [theEvent type]; + if (eventType != NSTabletPoint && [theEvent subtype] != NSTabletPointEventSubtype) + return; // Not a tablet event. + + ulong timestamp = [theEvent timestamp] * 1000; + + QPointF windowPoint; + QPointF screenPoint; + [self convertFromScreen:[NSEvent mouseLocation] toWindowPoint: &windowPoint andScreenPoint: &screenPoint]; + + uint deviceId = [theEvent deviceID]; + if (!tabletDeviceDataHash->contains(deviceId)) { + // Error: Unknown tablet device. Qt also gets into this state + // when running on a VM. This appears to be harmless; don't + // print a warning. + return; + } + const QCocoaTabletDeviceData &deviceData = tabletDeviceDataHash->value(deviceId); + + bool down = (eventType != NSMouseMoved); + + qreal pressure; + if (down) { + pressure = [theEvent pressure]; + } else { + pressure = 0.0; + } + + NSPoint tilt = [theEvent tilt]; + int xTilt = qRound(tilt.x * 60.0); + int yTilt = qRound(tilt.y * -60.0); + qreal tangentialPressure = 0; + qreal rotation = 0; + int z = 0; + if (deviceData.capabilityMask & 0x0200) + z = [theEvent absoluteZ]; + + if (deviceData.capabilityMask & 0x0800) + tangentialPressure = [theEvent tangentialPressure]; + + rotation = [theEvent rotation]; + + Qt::KeyboardModifiers keyboardModifiers = [QNSView convertKeyModifiers:[theEvent modifierFlags]]; + + QWindowSystemInterface::handleTabletEvent(m_window, timestamp, down, windowPoint, screenPoint, + deviceData.device, deviceData.pointerType, pressure, xTilt, yTilt, + tangentialPressure, rotation, z, deviceData.uid, + keyboardModifiers); +} + +- (void)tabletPoint: (NSEvent *)theEvent +{ + if (m_window->flags() & Qt::WindowTransparentForInput) + return [super tabletPoint:theEvent]; + + [self handleTabletEvent: theEvent]; +} + +static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) +{ + qint64 uid = [theEvent uniqueID]; + uint bits = [theEvent vendorPointingDeviceType]; + if (bits == 0 && uid != 0) { + // Fallback. It seems that the driver doesn't always include all the information. + // High-End Wacom devices store their "type" in the uper bits of the Unique ID. + // I'm not sure how to handle it for consumer devices, but I'll test that in a bit. + bits = uid >> 32; + } + + QTabletEvent::TabletDevice device; + // Defined in the "EN0056-NxtGenImpGuideX" + // on Wacom's Developer Website (www.wacomeng.com) + if (((bits & 0x0006) == 0x0002) && ((bits & 0x0F06) != 0x0902)) { + device = QTabletEvent::Stylus; + } else { + switch (bits & 0x0F06) { + case 0x0802: + device = QTabletEvent::Stylus; + break; + case 0x0902: + device = QTabletEvent::Airbrush; + break; + case 0x0004: + device = QTabletEvent::FourDMouse; + break; + case 0x0006: + device = QTabletEvent::Puck; + break; + case 0x0804: + device = QTabletEvent::RotationStylus; + break; + default: + device = QTabletEvent::NoDevice; + } + } + return device; +} + +- (void)tabletProximity: (NSEvent *)theEvent +{ + if (m_window->flags() & Qt::WindowTransparentForInput) + return [super tabletProximity:theEvent]; + + ulong timestamp = [theEvent timestamp] * 1000; + + QCocoaTabletDeviceData deviceData; + deviceData.uid = [theEvent uniqueID]; + deviceData.capabilityMask = [theEvent capabilityMask]; + + switch ([theEvent pointingDeviceType]) { + case NSUnknownPointingDevice: + default: + deviceData.pointerType = QTabletEvent::UnknownPointer; + break; + case NSPenPointingDevice: + deviceData.pointerType = QTabletEvent::Pen; + break; + case NSCursorPointingDevice: + deviceData.pointerType = QTabletEvent::Cursor; + break; + case NSEraserPointingDevice: + deviceData.pointerType = QTabletEvent::Eraser; + break; + } + + deviceData.device = wacomTabletDevice(theEvent); + + // The deviceID is "unique" while in the proximity, it's a key that we can use for + // linking up QCocoaTabletDeviceData to an event (especially if there are two devices in action). + bool entering = [theEvent isEnteringProximity]; + uint deviceId = [theEvent deviceID]; + if (entering) { + tabletDeviceDataHash->insert(deviceId, deviceData); + } else { + tabletDeviceDataHash->remove(deviceId); + } + + if (entering) { + QWindowSystemInterface::handleTabletEnterProximityEvent(timestamp, deviceData.device, deviceData.pointerType, deviceData.uid); + } else { + QWindowSystemInterface::handleTabletLeaveProximityEvent(timestamp, deviceData.device, deviceData.pointerType, deviceData.uid); + } +} + +- (void)touchesBeganWithEvent:(NSEvent *)event +{ + const NSTimeInterval timestamp = [event timestamp]; + const QList points = QCocoaTouch::getCurrentTouchPointList(event, /*acceptSingleTouch= ### true or false?*/false); + QWindowSystemInterface::handleTouchEvent(m_window, timestamp * 1000, touchDevice, points); +} + +- (void)touchesMovedWithEvent:(NSEvent *)event +{ + const NSTimeInterval timestamp = [event timestamp]; + const QList points = QCocoaTouch::getCurrentTouchPointList(event, /*acceptSingleTouch= ### true or false?*/false); + QWindowSystemInterface::handleTouchEvent(m_window, timestamp * 1000, touchDevice, points); +} + +- (void)touchesEndedWithEvent:(NSEvent *)event +{ + const NSTimeInterval timestamp = [event timestamp]; + const QList points = QCocoaTouch::getCurrentTouchPointList(event, /*acceptSingleTouch= ### true or false?*/false); + QWindowSystemInterface::handleTouchEvent(m_window, timestamp * 1000, touchDevice, points); +} + +- (void)touchesCancelledWithEvent:(NSEvent *)event +{ + const NSTimeInterval timestamp = [event timestamp]; + const QList points = QCocoaTouch::getCurrentTouchPointList(event, /*acceptSingleTouch= ### true or false?*/false); + QWindowSystemInterface::handleTouchEvent(m_window, timestamp * 1000, touchDevice, points); +} + +#ifndef QT_NO_GESTURES +//#define QT_COCOA_ENABLE_GESTURE_DEBUG +- (void)magnifyWithEvent:(NSEvent *)event +{ +#ifdef QT_COCOA_ENABLE_GESTURE_DEBUG + qDebug() << "magnifyWithEvent" << [event magnification]; +#endif + const NSTimeInterval timestamp = [event timestamp]; + QPointF windowPoint; + QPointF screenPoint; + [self convertFromScreen:[NSEvent mouseLocation] toWindowPoint:&windowPoint andScreenPoint:&screenPoint]; + QWindowSystemInterface::handleGestureEventWithRealValue(m_window, timestamp, Qt::ZoomNativeGesture, + [event magnification], windowPoint, screenPoint); +} + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8 +- (void)smartMagnifyWithEvent:(NSEvent *)event +{ + static bool zoomIn = true; +#ifdef QT_COCOA_ENABLE_GESTURE_DEBUG + qDebug() << "smartMagnifyWithEvent" << zoomIn; +#endif + const NSTimeInterval timestamp = [event timestamp]; + QPointF windowPoint; + QPointF screenPoint; + [self convertFromScreen:[NSEvent mouseLocation] toWindowPoint:&windowPoint andScreenPoint:&screenPoint]; + QWindowSystemInterface::handleGestureEventWithRealValue(m_window, timestamp, Qt::SmartZoomNativeGesture, + zoomIn ? 1.0f : 0.0f, windowPoint, screenPoint); + zoomIn = !zoomIn; +} +#endif + +- (void)rotateWithEvent:(NSEvent *)event +{ +#ifdef QT_COCOA_ENABLE_GESTURE_DEBUG + qDebug() << "rotateWithEvent" << [event rotation]; +#endif + const NSTimeInterval timestamp = [event timestamp]; + QPointF windowPoint; + QPointF screenPoint; + [self convertFromScreen:[NSEvent mouseLocation] toWindowPoint:&windowPoint andScreenPoint:&screenPoint]; + QWindowSystemInterface::handleGestureEventWithRealValue(m_window, timestamp, Qt::RotateNativeGesture, + -[event rotation], windowPoint, screenPoint); +} + +- (void)swipeWithEvent:(NSEvent *)event +{ +#ifdef QT_COCOA_ENABLE_GESTURE_DEBUG + qDebug() << "swipeWithEvent" << [event deltaX] << [event deltaY]; +#endif + const NSTimeInterval timestamp = [event timestamp]; + QPointF windowPoint; + QPointF screenPoint; + [self convertFromScreen:[NSEvent mouseLocation] toWindowPoint:&windowPoint andScreenPoint:&screenPoint]; + + qreal angle = 0.0f; + if ([event deltaX] == 1) + angle = 180.0f; + else if ([event deltaX] == -1) + angle = 0.0f; + else if ([event deltaY] == 1) + angle = 90.0f; + else if ([event deltaY] == -1) + angle = 270.0f; + + QWindowSystemInterface::handleGestureEventWithRealValue(m_window, timestamp, Qt::SwipeNativeGesture, + angle, windowPoint, screenPoint); +} + +- (void)beginGestureWithEvent:(NSEvent *)event +{ +#ifdef QT_COCOA_ENABLE_GESTURE_DEBUG + qDebug() << "beginGestureWithEvent"; +#endif + const NSTimeInterval timestamp = [event timestamp]; + QPointF windowPoint; + QPointF screenPoint; + [self convertFromScreen:[NSEvent mouseLocation] toWindowPoint:&windowPoint andScreenPoint:&screenPoint]; + QWindowSystemInterface::handleGestureEvent(m_window, timestamp, Qt::BeginNativeGesture, + windowPoint, screenPoint); +} + +- (void)endGestureWithEvent:(NSEvent *)event +{ +#ifdef QT_COCOA_ENABLE_GESTURE_DEBUG + qDebug() << "endGestureWithEvent"; +#endif + const NSTimeInterval timestamp = [event timestamp]; + QPointF windowPoint; + QPointF screenPoint; + [self convertFromScreen:[NSEvent mouseLocation] toWindowPoint:&windowPoint andScreenPoint:&screenPoint]; + QWindowSystemInterface::handleGestureEvent(m_window, timestamp, Qt::EndNativeGesture, + windowPoint, screenPoint); +} +#endif // QT_NO_GESTURES + +#ifndef QT_NO_WHEELEVENT +- (void)scrollWheel:(NSEvent *)theEvent +{ + if (m_window->flags() & Qt::WindowTransparentForInput) + return [super scrollWheel:theEvent]; + const EventRef carbonEvent = (EventRef)[theEvent eventRef]; + const UInt32 carbonEventKind = carbonEvent ? ::GetEventKind(carbonEvent) : 0; + const bool scrollEvent = carbonEventKind == kEventMouseScroll; + + QPoint angleDelta; + if (scrollEvent) { + // The mouse device contains pixel scroll wheel support (Mighty Mouse, Trackpad). + // Since deviceDelta is delivered as pixels rather than degrees, we need to + // convert from pixels to degrees in a sensible manner. + // It looks like 1/4 degrees per pixel behaves most native. + // (NB: Qt expects the unit for delta to be 8 per degree): + const int pixelsToDegrees = 2; // 8 * 1/4 + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + if ([theEvent respondsToSelector:@selector(scrollingDeltaX)]) { + angleDelta.setX([theEvent scrollingDeltaX] * pixelsToDegrees); + angleDelta.setY([theEvent scrollingDeltaY] * pixelsToDegrees); + } else +#endif + { + angleDelta.setX([theEvent deviceDeltaX] * pixelsToDegrees); + angleDelta.setY([theEvent deviceDeltaY] * pixelsToDegrees); + } + + } else { + // carbonEventKind == kEventMouseWheelMoved + // Remove acceleration, and use either -120 or 120 as delta: + angleDelta.setX(qBound(-120, int([theEvent deltaX] * 10000), 120)); + angleDelta.setY(qBound(-120, int([theEvent deltaY] * 10000), 120)); + } + + QPoint pixelDelta; +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + if ([theEvent respondsToSelector:@selector(scrollingDeltaX)]) { + if ([theEvent hasPreciseScrollingDeltas]) { + pixelDelta.setX([theEvent scrollingDeltaX]); + pixelDelta.setY([theEvent scrollingDeltaY]); + } else { + // docs: "In the case of !hasPreciseScrollingDeltas, multiply the delta with the line width." + // scrollingDeltaX seems to return a minimum value of 0.1 in this case, map that to two pixels. + const CGFloat lineWithEstimate = 20.0; + pixelDelta.setX([theEvent scrollingDeltaX] * lineWithEstimate); + pixelDelta.setY([theEvent scrollingDeltaY] * lineWithEstimate); + } + } +#endif + + QPointF qt_windowPoint; + QPointF qt_screenPoint; + [self convertFromScreen:[NSEvent mouseLocation] toWindowPoint:&qt_windowPoint andScreenPoint:&qt_screenPoint]; + NSTimeInterval timestamp = [theEvent timestamp]; + ulong qt_timestamp = timestamp * 1000; + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + if ([theEvent respondsToSelector:@selector(scrollingDeltaX)]) { + // Prevent keyboard modifier state from changing during scroll event streams. + // A two-finger trackpad flick generates a stream of scroll events. We want + // the keyboard modifier state to be the state at the beginning of the + // flick in order to avoid changing the interpretation of the events + // mid-stream. One example of this happening would be when pressing cmd + // after scrolling in Qt Creator: not taking the phase into account causes + // the end of the event stream to be interpreted as font size changes. + NSEventPhase momentumPhase = [theEvent momentumPhase]; + if (momentumPhase == NSEventPhaseNone) { + currentWheelModifiers = [QNSView convertKeyModifiers:[theEvent modifierFlags]]; + } + + NSEventPhase phase = [theEvent phase]; + Qt::ScrollPhase ph = Qt::ScrollUpdate; +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8 + if (QSysInfo::QSysInfo::MacintoshVersion >= QSysInfo::MV_10_8) { + // On 10.8 and above, MayBegin is likely to happen. We treat it the same as an actual begin. + if (phase == NSEventPhaseMayBegin) + ph = Qt::ScrollBegin; + } else +#endif + if (phase == NSEventPhaseBegan) { + // On 10.7, MayBegin will not happen, so Began is the actual beginning. + ph = Qt::ScrollBegin; + } + if (phase == NSEventPhaseEnded || phase == NSEventPhaseCancelled) { + ph = Qt::ScrollEnd; + } + + QWindowSystemInterface::handleWheelEvent(m_window, qt_timestamp, qt_windowPoint, qt_screenPoint, pixelDelta, angleDelta, currentWheelModifiers, ph); + + if (momentumPhase == NSEventPhaseEnded || momentumPhase == NSEventPhaseCancelled || momentumPhase == NSEventPhaseNone) { + currentWheelModifiers = Qt::NoModifier; + } + } else +#endif + { + QWindowSystemInterface::handleWheelEvent(m_window, qt_timestamp, qt_windowPoint, qt_screenPoint, pixelDelta, angleDelta, + [QNSView convertKeyModifiers:[theEvent modifierFlags]]); + } +} +#endif //QT_NO_WHEELEVENT + +- (int) convertKeyCode : (QChar)keyChar +{ + return qt_mac_cocoaKey2QtKey(keyChar); +} + ++ (Qt::KeyboardModifiers) convertKeyModifiers : (ulong)modifierFlags +{ + Qt::KeyboardModifiers qtMods =Qt::NoModifier; + if (modifierFlags & NSShiftKeyMask) + qtMods |= Qt::ShiftModifier; + if (modifierFlags & NSControlKeyMask) + qtMods |= Qt::MetaModifier; + if (modifierFlags & NSAlternateKeyMask) + qtMods |= Qt::AltModifier; + if (modifierFlags & NSCommandKeyMask) + qtMods |= Qt::ControlModifier; + if (modifierFlags & NSNumericPadKeyMask) + qtMods |= Qt::KeypadModifier; + return qtMods; +} + +- (void)handleKeyEvent:(NSEvent *)nsevent eventType:(int)eventType +{ + ulong timestamp = [nsevent timestamp] * 1000; + ulong nativeModifiers = [nsevent modifierFlags]; + Qt::KeyboardModifiers modifiers = [QNSView convertKeyModifiers: nativeModifiers]; + NSString *charactersIgnoringModifiers = [nsevent charactersIgnoringModifiers]; + NSString *characters = [nsevent characters]; + if (m_inputSource != characters) { + [m_inputSource release]; + m_inputSource = [characters retain]; + } + + // There is no way to get the scan code from carbon/cocoa. But we cannot + // use the value 0, since it indicates that the event originates from somewhere + // else than the keyboard. + quint32 nativeScanCode = 1; + quint32 nativeVirtualKey = [nsevent keyCode]; + + QChar ch = QChar::ReplacementCharacter; + int keyCode = Qt::Key_unknown; + if ([characters length] != 0) { + if ((modifiers & Qt::MetaModifier) && ([charactersIgnoringModifiers length] != 0)) + ch = QChar([charactersIgnoringModifiers characterAtIndex:0]); + else + ch = QChar([characters characterAtIndex:0]); + keyCode = [self convertKeyCode:ch]; + } + + // we will send a key event unless the input method sets m_sendKeyEvent to false + m_sendKeyEvent = true; + QString text; + // ignore text for the U+F700-U+F8FF range. This is used by Cocoa when + // delivering function keys (e.g. arrow keys, backspace, F1-F35, etc.) + if (ch.unicode() < 0xf700 || ch.unicode() > 0xf8ff) + text = QCFString::toQString(characters); + + QWindow *focusWindow = [self topLevelWindow]; + + if (eventType == QEvent::KeyPress) { + + if (m_composingText.isEmpty()) + m_sendKeyEvent = !QWindowSystemInterface::tryHandleShortcutEvent(focusWindow, timestamp, keyCode, modifiers, text); + + QObject *fo = QGuiApplication::focusObject(); + if (m_sendKeyEvent && fo) { + QInputMethodQueryEvent queryEvent(Qt::ImEnabled | Qt::ImHints); + if (QCoreApplication::sendEvent(fo, &queryEvent)) { + bool imEnabled = queryEvent.value(Qt::ImEnabled).toBool(); + Qt::InputMethodHints hints = static_cast(queryEvent.value(Qt::ImHints).toUInt()); + if (imEnabled && !(hints & Qt::ImhDigitsOnly || hints & Qt::ImhFormattedNumbersOnly || hints & Qt::ImhHiddenText)) { + // pass the key event to the input method. note that m_sendKeyEvent may be set to false during this call + [self interpretKeyEvents:[NSArray arrayWithObject:nsevent]]; + } + } + } + } + + if (m_sendKeyEvent && m_composingText.isEmpty()) + QWindowSystemInterface::handleExtendedKeyEvent(focusWindow, timestamp, QEvent::Type(eventType), keyCode, modifiers, + nativeScanCode, nativeVirtualKey, nativeModifiers, text, [nsevent isARepeat]); + + m_sendKeyEvent = false; +} + +- (void)keyDown:(NSEvent *)nsevent +{ + if (m_window->flags() & Qt::WindowTransparentForInput) + return [super keyDown:nsevent]; + [self handleKeyEvent:nsevent eventType:int(QEvent::KeyPress)]; +} + +- (void)keyUp:(NSEvent *)nsevent +{ + if (m_window->flags() & Qt::WindowTransparentForInput) + return [super keyUp:nsevent]; + [self handleKeyEvent:nsevent eventType:int(QEvent::KeyRelease)]; +} + +- (BOOL)performKeyEquivalent:(NSEvent *)nsevent +{ + NSString *chars = [nsevent charactersIgnoringModifiers]; + + if ([nsevent type] == NSKeyDown && [chars length] > 0) { + QChar ch = [chars characterAtIndex:0]; + Qt::Key qtKey = qt_mac_cocoaKey2QtKey(ch); + // check for Command + Key_Period + if ([nsevent modifierFlags] & NSCommandKeyMask + && qtKey == Qt::Key_Period) { + [self handleKeyEvent:nsevent eventType:int(QEvent::KeyPress)]; + return YES; + } + } + return [super performKeyEquivalent:nsevent]; +} + +- (void)flagsChanged:(NSEvent *)nsevent +{ + ulong timestamp = [nsevent timestamp] * 1000; + ulong modifiers = [nsevent modifierFlags]; + Qt::KeyboardModifiers qmodifiers = [QNSView convertKeyModifiers:modifiers]; + + // calculate the delta and remember the current modifiers for next time + static ulong m_lastKnownModifiers; + ulong lastKnownModifiers = m_lastKnownModifiers; + ulong delta = lastKnownModifiers ^ modifiers; + m_lastKnownModifiers = modifiers; + + struct qt_mac_enum_mapper + { + ulong mac_mask; + Qt::Key qt_code; + }; + static qt_mac_enum_mapper modifier_key_symbols[] = { + { NSShiftKeyMask, Qt::Key_Shift }, + { NSControlKeyMask, Qt::Key_Meta }, + { NSCommandKeyMask, Qt::Key_Control }, + { NSAlternateKeyMask, Qt::Key_Alt }, + { NSAlphaShiftKeyMask, Qt::Key_CapsLock }, + { 0ul, Qt::Key_unknown } }; + for (int i = 0; modifier_key_symbols[i].mac_mask != 0u; ++i) { + uint mac_mask = modifier_key_symbols[i].mac_mask; + if ((delta & mac_mask) == 0u) + continue; + + QWindowSystemInterface::handleKeyEvent(m_window, + timestamp, + (lastKnownModifiers & mac_mask) ? QEvent::KeyRelease : QEvent::KeyPress, + modifier_key_symbols[i].qt_code, + qmodifiers ^ [QNSView convertKeyModifiers:mac_mask]); + } +} + +- (void) doCommandBySelector:(SEL)aSelector +{ + [self tryToPerform:aSelector with:self]; +} + +- (void) insertText:(id)aString replacementRange:(NSRange)replacementRange +{ + Q_UNUSED(replacementRange) + + if (m_sendKeyEvent && m_composingText.isEmpty() && [aString isEqualToString:m_inputSource]) { + // don't send input method events for simple text input (let handleKeyEvent send key events instead) + return; + } + + QString commitString; + if ([aString length]) { + if ([aString isKindOfClass:[NSAttributedString class]]) { + commitString = QCFString::toQString(reinterpret_cast([aString string])); + } else { + commitString = QCFString::toQString(reinterpret_cast(aString)); + }; + } + QObject *fo = QGuiApplication::focusObject(); + if (fo) { + QInputMethodQueryEvent queryEvent(Qt::ImEnabled); + if (QCoreApplication::sendEvent(fo, &queryEvent)) { + if (queryEvent.value(Qt::ImEnabled).toBool()) { + QInputMethodEvent e; + e.setCommitString(commitString); + QCoreApplication::sendEvent(fo, &e); + // prevent handleKeyEvent from sending a key event + m_sendKeyEvent = false; + } + } + } + + m_composingText.clear(); +} + +- (void) setMarkedText:(id)aString selectedRange:(NSRange)selectedRange replacementRange:(NSRange)replacementRange +{ + Q_UNUSED(replacementRange) + QString preeditString; + + QList attrs; + attrs<([aString string])); + int composingLength = preeditString.length(); + int index = 0; + // Create attributes for individual sections of preedit text + while (index < composingLength) { + NSRange effectiveRange; + NSRange range = NSMakeRange(index, composingLength-index); + NSDictionary *attributes = [aString attributesAtIndex:index + longestEffectiveRange:&effectiveRange + inRange:range]; + NSNumber *underlineStyle = [attributes objectForKey:NSUnderlineStyleAttributeName]; + if (underlineStyle) { + QColor clr (Qt::black); + NSColor *color = [attributes objectForKey:NSUnderlineColorAttributeName]; + if (color) { + clr = qt_mac_toQColor(color); + } + QTextCharFormat format; + format.setFontUnderline(true); + format.setUnderlineColor(clr); + attrs<(aString)); + } + + if (attrs.isEmpty()) { + QTextCharFormat format; + format.setFontUnderline(true); + attrs<((CFStringRef)string); + return [[[NSAttributedString alloc] initWithString:const_cast(tmpString)] autorelease]; +} + +- (NSRange) markedRange +{ + NSRange range; + if (!m_composingText.isEmpty()) { + range.location = 0; + range.length = m_composingText.length(); + } else { + range.location = NSNotFound; + range.length = 0; + } + return range; +} + +- (NSRange) selectedRange +{ + NSRange selectedRange = {NSNotFound, 0}; + selectedRange.location = NSNotFound; + selectedRange.length = 0; + + QObject *fo = QGuiApplication::focusObject(); + if (!fo) + return selectedRange; + QInputMethodQueryEvent queryEvent(Qt::ImEnabled | Qt::ImCurrentSelection); + if (!QCoreApplication::sendEvent(fo, &queryEvent)) + return selectedRange; + if (!queryEvent.value(Qt::ImEnabled).toBool()) + return selectedRange; + + QString selectedText = queryEvent.value(Qt::ImCurrentSelection).toString(); + + if (!selectedText.isEmpty()) { + selectedRange.location = 0; + selectedRange.length = selectedText.length(); + } + return selectedRange; +} + +- (NSRect) firstRectForCharacterRange:(NSRange)aRange actualRange:(NSRangePointer)actualRange +{ + Q_UNUSED(aRange) + Q_UNUSED(actualRange) + QObject *fo = QGuiApplication::focusObject(); + if (!fo) + return NSZeroRect; + + QInputMethodQueryEvent queryEvent(Qt::ImEnabled); + if (!QCoreApplication::sendEvent(fo, &queryEvent)) + return NSZeroRect; + if (!queryEvent.value(Qt::ImEnabled).toBool()) + return NSZeroRect; + + if (!m_window) + return NSZeroRect; + + // The returned rect is always based on the internal cursor. + QRect mr = qApp->inputMethod()->cursorRectangle().toRect(); + QPoint mp = m_window->mapToGlobal(mr.bottomLeft()); + + NSRect rect; + rect.origin.x = mp.x(); + rect.origin.y = qt_mac_flipYCoordinate(mp.y()); + rect.size.width = mr.width(); + rect.size.height = mr.height(); + return rect; +} + +- (NSUInteger)characterIndexForPoint:(NSPoint)aPoint +{ + // We don't support cursor movements using mouse while composing. + Q_UNUSED(aPoint); + return NSNotFound; +} + +- (NSArray*) validAttributesForMarkedText +{ + if (m_window != QGuiApplication::focusWindow()) + return nil; + + QObject *fo = QGuiApplication::focusObject(); + if (!fo) + return nil; + + QInputMethodQueryEvent queryEvent(Qt::ImEnabled); + if (!QCoreApplication::sendEvent(fo, &queryEvent)) + return nil; + if (!queryEvent.value(Qt::ImEnabled).toBool()) + return nil; + + // Support only underline color/style. + return [NSArray arrayWithObjects:NSUnderlineColorAttributeName, + NSUnderlineStyleAttributeName, nil]; +} + +-(void)registerDragTypes +{ + QCocoaAutoReleasePool pool; + QStringList customTypes = qt_mac_enabledDraggedTypes(); + if (currentCustomDragTypes == 0 || *currentCustomDragTypes != customTypes) { + if (currentCustomDragTypes == 0) + currentCustomDragTypes = new QStringList(); + *currentCustomDragTypes = customTypes; + const NSString* mimeTypeGeneric = @"com.trolltech.qt.MimeTypeName"; + NSMutableArray *supportedTypes = [NSMutableArray arrayWithObjects:NSColorPboardType, + NSFilenamesPboardType, NSStringPboardType, + NSFilenamesPboardType, NSPostScriptPboardType, NSTIFFPboardType, + NSRTFPboardType, NSTabularTextPboardType, NSFontPboardType, + NSRulerPboardType, NSFileContentsPboardType, NSColorPboardType, + NSRTFDPboardType, NSHTMLPboardType, + NSURLPboardType, NSPDFPboardType, NSVCardPboardType, + NSFilesPromisePboardType, NSInkTextPboardType, + NSMultipleTextSelectionPboardType, mimeTypeGeneric, nil]; + // Add custom types supported by the application. + for (int i = 0; i < customTypes.size(); i++) { + [supportedTypes addObject:QCFString::toNSString(customTypes[i])]; + } + [self registerForDraggedTypes:supportedTypes]; + } +} + +static QWindow *findEventTargetWindow(QWindow *candidate) +{ + while (candidate) { + if (!(candidate->flags() & Qt::WindowTransparentForInput)) + return candidate; + candidate = candidate->parent(); + } + return candidate; +} + +static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint point) +{ + return target->mapFromGlobal(source->mapToGlobal(point)); +} + +- (NSDragOperation) draggingSourceOperationMaskForLocal:(BOOL)isLocal +{ + Q_UNUSED(isLocal); + QCocoaDrag* nativeDrag = QCocoaIntegration::instance()->drag(); + return qt_mac_mapDropActions(nativeDrag->currentDrag()->supportedActions()); +} + +- (BOOL) ignoreModifierKeysWhileDragging +{ + return NO; +} + +- (NSDragOperation)draggingEntered:(id )sender +{ + return [self handleDrag : sender]; +} + +- (NSDragOperation)draggingUpdated:(id )sender +{ + return [self handleDrag : sender]; +} + +// Sends drag update to Qt, return the action +- (NSDragOperation)handleDrag:(id )sender +{ + NSPoint windowPoint = [self convertPoint: [sender draggingLocation] fromView: nil]; + QPoint qt_windowPoint(windowPoint.x, windowPoint.y); + Qt::DropActions qtAllowed = qt_mac_mapNSDragOperations([sender draggingSourceOperationMask]); + + QWindow *target = findEventTargetWindow(m_window); + + // update these so selecting move/copy/link works + QGuiApplicationPrivate::modifier_buttons = [QNSView convertKeyModifiers: [[NSApp currentEvent] modifierFlags]]; + + QPlatformDragQtResponse response(false, Qt::IgnoreAction, QRect()); + if ([sender draggingSource] != nil) { + QCocoaDrag* nativeDrag = QCocoaIntegration::instance()->drag(); + response = QWindowSystemInterface::handleDrag(target, nativeDrag->platformDropData(), mapWindowCoordinates(m_window, target, qt_windowPoint), qtAllowed); + } else { + QCocoaDropData mimeData([sender draggingPasteboard]); + response = QWindowSystemInterface::handleDrag(target, &mimeData, mapWindowCoordinates(m_window, target, qt_windowPoint), qtAllowed); + } + + return qt_mac_mapDropAction(response.acceptedAction()); +} + +- (void)draggingExited:(id )sender +{ + QWindow *target = findEventTargetWindow(m_window); + + NSPoint windowPoint = [self convertPoint: [sender draggingLocation] fromView: nil]; + QPoint qt_windowPoint(windowPoint.x, windowPoint.y); + + // Send 0 mime data to indicate drag exit + QWindowSystemInterface::handleDrag(target, 0, mapWindowCoordinates(m_window, target, qt_windowPoint), Qt::IgnoreAction); +} + +// called on drop, send the drop to Qt and return if it was accepted. +- (BOOL)performDragOperation:(id )sender +{ + QWindow *target = findEventTargetWindow(m_window); + + NSPoint windowPoint = [self convertPoint: [sender draggingLocation] fromView: nil]; + QPoint qt_windowPoint(windowPoint.x, windowPoint.y); + Qt::DropActions qtAllowed = qt_mac_mapNSDragOperations([sender draggingSourceOperationMask]); + + QPlatformDropQtResponse response(false, Qt::IgnoreAction); + if ([sender draggingSource] != nil) { + QCocoaDrag* nativeDrag = QCocoaIntegration::instance()->drag(); + response = QWindowSystemInterface::handleDrop(target, nativeDrag->platformDropData(), mapWindowCoordinates(m_window, target, qt_windowPoint), qtAllowed); + } else { + QCocoaDropData mimeData([sender draggingPasteboard]); + response = QWindowSystemInterface::handleDrop(target, &mimeData, mapWindowCoordinates(m_window, target, qt_windowPoint), qtAllowed); + } + if (response.isAccepted()) { + QCocoaDrag* nativeDrag = QCocoaIntegration::instance()->drag(); + nativeDrag->setAcceptedAction(response.acceptedAction()); + } + return response.isAccepted(); +} + +- (void)draggedImage:(NSImage*) img endedAt:(NSPoint) point operation:(NSDragOperation) operation +{ + Q_UNUSED(img); + Q_UNUSED(operation); + QWindow *target = findEventTargetWindow(m_window); + +// keep our state, and QGuiApplication state (buttons member) in-sync, +// or future mouse events will be processed incorrectly + m_buttons &= ~(m_sendUpAsRightButton ? Qt::RightButton : Qt::LeftButton); + + NSPoint windowPoint = [self convertPoint: point fromView: nil]; + QPoint qtWindowPoint(windowPoint.x, windowPoint.y); + + NSWindow *window = [self window]; + NSPoint screenPoint = [window convertBaseToScreen :point]; + QPoint qtScreenPoint = QPoint(screenPoint.x, qt_mac_flipYCoordinate(screenPoint.y)); + + QWindowSystemInterface::handleMouseEvent(target, mapWindowCoordinates(m_window, target, qtWindowPoint), qtScreenPoint, m_buttons); +} + +@end diff --git a/Telegram/icon_128x128@2x.png b/Telegram/icon_128x128@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..92566ae160174e5e8fcc5e7e9dfa42d9522f8e52 GIT binary patch literal 8808 zcmbVyS2)~X)b4M_VD#SGh~E8`=re=p(W5152oi!IdKop*g&?9QL@x=6&IqDK?|q2g zduNVwF3-hx@m;*n+RxtW;$3U)z4qGAUQv2FY9xe=ga81LXsACj007Ya5ClN+?uEH~ zk^Q}3@KiDNG<3E1^tN$-0VvwJK7Rqzcx~hG!r+CCo$s5T7xDn`fKcO+;uD{l9SfpF zbEEXT>odcm@+NX6X{-O0vrFo6N=i)sD{y3?(zSu0^du>J^p8f#5l6n6VQUv zp{R1VGy7}==b>~{#JqsL_Jy400exV|v_ZNEg_u#dJiFqhLsGDm1M^}AcO)tMyVb?l zG$Z`^8r{O||H%jKgCQ89s^?aj>~!|L^-SHXjg1i!>OZE0HEhyu{O@_hQl%(WkpFl@ zh;1=%+b*MUumAYCDxyliHzSGqp1&ygw^Bu_dsd&EKf9<}Z!fV{NRM@MqDjO~r+^5Y z93t3~6rjU@GakKn;Ib5+I2m3>a}=3qS!5f8Bp+(j9Bf=JZ~xRU8-kN&l}edncTjc{ z`#c?udqA}nUX~OcEW_Gm#+#Npw4TpZWt`OZRGyI>mG%QQ94`8hpG&{uqswnY zrR>C3eCEgyHB2wKMXeje9!%{n_c2(><@b36Gu@FtyVjvP65!9cT%>Y;(jBI>b*RqV zDaO7X?);$w41o2(h6TT?ml3ciz>O@8&{v~d=cNS*hWe6Tn4sC&s`mK~xr9zhERA5M zJff*HgQ1i{`rZVy(=AMDRL&_Zyc^WJ5kz^%o-R`&Xj768*znTPyJ*y#=;PiUvZ+{Iuy8{>gf1{lhwZFpreq6z7RBsgHJ zOG@0v-{Z+AQ3M$3j6PpaF6m#eW^%6_E!VybupL1H@M8+Llr(=2P=Fhe z%Og#CB9~1miWppEYIeD}V15UkyjPFXTR71e1n4Z0}_BdWQ zv7zvGl+DXCTQ__?b@|6g93fDAO(4RbhmZoLbNMuiQ@o8+=WFz~54KWZmZJ!1KX+2Z=yTQY}FMbHH! zbH8gWkt$WVXvIyY@D6K`^k9_;#Xu0w*q?E`Lg*4$`hD))<+^nsh!yB6G7bSU+jTjs z!6=ghq9gQQ4H0rc>I}9_=0jq$`9lX66w4+bx2jRbh5l-tcA5r59bVs-65x9Q3xC86 zE=+w>2v7;GPeV^}E&%x#J`_-xch$0ODjSCGqn6V{VlX{Z%8^ap6#fB~59cjTiN(k0 zW8h+A&DT@}Mb@moNnKkOXX6fY7A!sKA%NY{Xw#!qoIoP z1Q^9K9HgP!-)(^zO7!v~^S>;t`~8fEK(4ABn7nuJ+u*Ga7PW?92=#VS1MGAk7k6Fb z{~;M=wrqOmU!>mtD8_)G&ZqxB;j2ryv8bqUK`lIz8eV=Bf zD7wZw`0qK+k-<&P$g`YcY70}QZ>z_pj>8`f7}Y*Mg zu?IV%1*>{$9OG86*}xz`hA%L(*p;v#htqg)q(0g4GW1o0-PSbDmqn+jA*qR4y>Jb* zsBT90^{_d#<@&qqRhste zU$`)Jw6ZaJGUCQmy)wZ9IG#0KMStRMNi?HTdS^P&!vCJvG}(+h{3D;I)>OIeB!CqVTnYUl$3+ zMp~XQIIa?k+_}pykBe7fZQ0>ig(43$ho`kXpRjVv@ z?%+Uqjr&>5AfLcgfrQsdUo;w(7JzlWX-@R-S+)H`qymUye~KPnimR9m@Y6L0N(S2N za7D!a7QnO(1XT(kY)j^(txhCB(Bm9eNE^Z`t2f`KHjapUheUK{3 znSWGNR#)d~Izm5huC~{W^;OiH)vuTK>Q=!JFsQOM#C;P_{+|Yzd<}trSApX89qVxD zMlFnqg&9K&)-!MGjo4p^C{XI^dsv0?G9QHzCH~57*0?uFp=s7(WyiHS_cL6^DT&AB zpW`{e)%g~`nGN#Twm8EDH46cb7X=yvBcpIq86PhT{17ETMIte8kmNhIbpyxUd`1{XeCfaUFmeLNqTK1}tE2RNPD zZcHXRqx_+A5fVf2DEP)jA%jJ zBx`iEse)aMx*03J2iR!0d7Sl7>w8;`C7rA>>vHpP-C0W`k=Jt1gL(kF2d}kV4=6$A z_`8Pa4&8(iN>{(lOwGQIR=cOZ`oaQYiMeN^fz-OhukG@ZVEtvK?vF0(@iC8FGh+>= z%{D|RP1hK}fF`FHe|FmyTc*_}9jR)=+^KM>nb@oj2gf|Y4Q{|0*2ob+)k$9pc zz7@W0Bkf^vJ^PjOQ-`Y}TEbkTu<->5c3~n&6)fuDnzow#j7E5CRprWd%u7~@;Mc9V z9w!o6ta#x)( z&7BhQ^6Be>e|`-J7J$<#2@t<5&}jt00FnJOr5?CB-8Y)kw>6%YG)58Q>J2B4@C8?O zNs>cLOLz;4CHKh3LgGOT04L#v2d;UZJgEBy8!==|=jGq&apt^M>vd{Y+`Ods%uMyI z(Vis9?m8n1IaDc(5@0GlrbQ887YPb#5s{Arl;uqY99pXmWUkGJ#wT^N6!aN4bJO|8 zX`YDpH0Qy(bjkEwAIlfIMeTxpJP3zOO~1&4KK;r8KOXAP6}Y<`XK(n~lIl`X`K{px z<*Kkus`^NAg=KW7T7`bPv0M~?-~7)f(!eJ;q~m0t&}RE{wUah~7a$zTt?OJ{xsrK1 zx4gE~)#98i>;H9Zd=|0XY7-pLpm!H7b}mjq!ZO@Oh-7O7UfzO17n+*|!L4?x^)#KW zUM`33XZ5*=)ZB?ZaU#DTZJP=@$0-p+wmgRaj$lbyT zjFN6>|I2I^-FI!wP5q`z$QO9YJno8M$;&Pa&31OPAu~CTP>$%++}UUD?!HS8;sIXR z0x?h$r0u5*?i5CD3vq`eNpt0h%s^pGK+rSq@TB6g4I+NWp)$Vl35Pbpq({;5neh}6 z0pbul3G*+qARw&qHl6!Ut?=Wp(5aDUd(*2I?q{|khW<_4WF|w&aiWu_y2b8gHB#&I ztqQMx_Tb*`W0PyDShk5hKLcxyl_#4Ph|cJoFFj%oSYMlEk)l)M9EHg}?@ZQ~TplKu zk7sMq3gr~n5NoVJYiG4x&i6M;D&S9rIU}>J#FGx#%Lqx$d*6cb&!xM&+FH!@^clZw zCJV$&gfW`{Ltjd#b_nd>6l z3$C?YDBQ1NVPn(XGEAwIwP|HW~+dkfY7ND#P* zepSw?Ejz@HgW6PuDL_$AI8oCrQitLmXQ!Ffl?Jj7h=+yg#sng1M{770o9i=o&%2*E?S=6JN`XshmaMb(Ii;VO^VI?v>0_h z`z0tFB)Tl1Hw^x?gkOLd?HKHyp7iH&K+xWYb?^Q7uM9HNuDXO^gLGN>*1|X~6iMF+ z*@iM${GL;>rSZ+Z@$2^iy1$7cFBf{I*FzT^|98uXP~Jrj<+o-NkF$DMPH1*Dt@=>K_WEXX$&$4i;xxvao|zeBy`=<{ImJK0 zNtG@#UELB0jw}}O>S(>ylMLKV@{rG{W+S?!J+TYZ^7maAv9kzgXr9g@azcvmkofi2{6QWn~Yj4&b zyC_s~T5wcor>N_ljjP~LUUDR=U0(devRE3ZtITo$9O(d0Y8^_{Zx!SwwN-SgP|@MM zRxEKx@oQ#Wh3TRS-U5$TO-r(`0CSgr+8)eOX1 zHo*D2fG}!RY{sDr7s5c_lP@{;^*fJBg0qYYnd_@>F@-6kBYqjg-)QSs)1fU(waZz>X82v-Mb`tQ|0T_GS_?5Kv%>h)Vdyv{7heoC+)&$J zma66%d7JLyEeighKjrODSQr!SguaD}O%KZ3f8mtJU?`cSVm+t$-fIBih>d zjQjS9(bmFV&t2fVgJWIYs{2glymvgncB05QHUL08rSFsHs>uL&<6w;AqujfnVbFqV z=@6mN*mU4AOXs+4QtCeKAcxpo-NaX@fR;<{FBQ*_^HQ-yUiI`o-YbE=;);?v@5=Do;Dy`M{yUk*X}rgy^;zr6t+Hb}r11g?gRzAk!dM1E&+{XevkNVC6 z-vlMkQzf#FkTOuGi&jlk9@t9d#KvCBRM!vMBQmfJ*4sUn)BWl3cTSC|UNXMW&^%e? z%Rv@VK>W?%lG`0Epdri+}d7Z)EX}G)ic13>e$Qqf`cB!O@jB`tA=CUDK zg0FQwUmZ@}Czq%HzG1M>5)|JMp&Z2}0-YaNQ%=c~O2LGmMbyXoIN6FfSFhKp5Z;jj zGb|_w*m^agL$mZ<{9V!4u2$iYT`Yd&=jxMA z)xy@HH{hxB0$dF#;W1YiK+7pOn$(*lwh!F>$Tc`~VahA~jAj2|{@*eOTF|6NR1bJm zqv#8E+g7^W0LONbyiX7ndT$Z>8vofwus55xXT0_I?`piQm>zbll`G}c1`Qa6D;mj^ z$Q=?e8e+?L9(Bh0w02eWXIA{xvf1m~T>Lh~<*S|udpRi~6z`KjVoGvIRi(J9!uL7v zokyg_$~rW6HrEt0vtxTi*c>}R&x6jonaOI45VUhW63Uxi!%&ZTH#UoJjI~Gm-ejNvFV%+Vx$~)KN?=I3WVlPJg;W!gjQv@2okxlbiY*Z z_Bp;C4uRah>C&GGtm!u_4T?Fyjt;6HpZ>5=e@BFe@`nsny#h%INhpqYIg*Nj$1+4c z7%3@p(7vD@${pDeP1jxLqgX98F7gZ@@0Er;((<+a`1+9<9qK#nue+%VR0`=|c2aVW z+~vyp>V%-$P1tL>iaSM}Ina9$Y;WtsEac#UM1aIR8>8z_nRg{f9v$MXsKSlmtgIUM zeoMa#U2WsMxM&OrrmgUX82Da@bw1z+xov%+DS_h=m?|q#+L98aJN5^g2&(8lJkj?s zZ#vU^AJkG1VSIZQs5SkheeIvZ5d^mD1WeRju2xVY+e@xE%TUAp!Mz(KQ-9(6MZ)Nd z!1Gk~r0glSJeTV5(4{Jca?|c_Ye5aZr!F&YHCi&qh%Bz*Ou+I)5Tq_orp*=xvCH=_ z`+@0@UXNni)gBs+(~s7RQpl244pnNP1T`F|;G7KMy)_T*mj}lR0V93@Gy_}VHQ9jB zoT%vyt&e^4uqKfHHZ4N&W-;E_UtN6@`YtxU3+%WNJ?a`yswc*)JNjK`tOs+8QdC95 zosSO@wNJmDbM(=UoRqi?XKScQ=-|uQD)Rt^F{qQU?To^0T4Z}xD$@b={mzrJj%8DN~h;lmCpq{RQzS|BI}hMnXo zy}s3t<{@f5ZSnqsKOXF*Y!M~`MVf-CfY1rFLUjIGY^NZccrX9T4 zhn$>g{K$BU7I#ifrWwOjFw+sWMN%X76K%JsaNEEyP=kIQB-l~#Z`Fs2I|$1L^UypP z^RD@iE99Ug(cbZTLl~`Y6k=-zyve(DB2{sGRx49<5ppt+Q%V_!p*%@fY}h`>-wcsT zsN182VG$c*YJn=iZxYO_ zP9PQU6xnB%^QbyRnXRu$<*k!UnC zJEUe&jL{1r+rM%7G{8{@DLtmuz9zVW zg78^Nq!gky!*X8kFuStf_-+vvmw>%`d1v^d$pIu91PE9|h)~|o;?YFD?%s5}E^*n4 zfWO?olbtqR5_$)d^ZFJidk2Di$ssoA2%cNTsb<;6jK#(e0 z(BQZ$LYK`)F`z7b!a=c#Og!a*czXVm2R1!4;(d-TMg$7AwN846;OP%{N*R9xvKS^` z^*UMTQGLl-3;^|43Jh*<*AZ;mChX^a(to~~6J&v!B=Y4Dak^ro^_u{rXcEI(`=inG ze*4+cqsMU+gsG`Bl=1p)4rj<0B`$|;rf^g)qC6zl;*Pk7*J`5dCav(6_dhmeF7TA_3cF)$a1So`%|6X9P zyVzCZw@8d8FoENfB!>a5?0izS^iXSOx2J9*6T}z}xB7k6abZm(FotzXg!~5>g{V@L z9JP82wsy;1u`FXj|HG)h7fJe(Raru3;qml9vWy+wj`_G~VAm!`3ulrL;AQ(puQ&RG85Do_ExN1iB-PIm2kc0fp8fgngc^s<-$P*`QAL{b4#2D z2lUwfE56B=#v61>rfbnSV+aFsA4rb`zmvccKrjP1YgYiXBxwRFl zP`|^3P)r3X01$!K^+lR{bsERzNd~?st8?mqA#as_n-;clC*U$ zk!{d=`4gHaLc*pQOuB5gd8~HpX&9ss9#@SMtiekQ&IAn>VDea7V*b0lq*itLb0Ohd zB+R5oxtO%9b#Y5?d^TReBS8+jRSkN+jKrt!J;k<2(FSL zqh5L%Vp-;DP3=r`bYGeaYARQ!T{i{P&wd{Wu|bR9NQdS36Kg8Br_J$N9Z{L?BO`l) ziKcNJYD%~zB?6b2=`e5lYumVnSThQYieBVS4c)A^Ler2=ZsAzX5ucr=5J}MuN^49} z5I43~{TNS-9G$3zR%WT-VOIJQHh#{o^!hz6;w_FW$c6i<;7SntIh5de)CHcr;+8Nk zTo7em27(W-{(Dbyfrn_XAOm;PmEADIZq$yt*~!pmrXq{%jo#g7DBw>-;mTech3#YJ zBRuK&_SMClNSZ<)V)PS1s3=(a)nAH#U3LK&FF}?Ui=zoW6&o?jZ|*;H88gLJf8GJXZigDE+BLFA}Xj3S4*N_WWbpFYeg^M}ElG+4{uK0f5gkhUz_xrYs=e+bDr zc!_n?(_(3`@T1{aI5|qH&Gw7TGq(x}#qY3rjybvfWkfg&8zh(UX#rpFBR3u!=5)im zTXDNIr|P~=p?M8?T5?qH`(73Q0#7p5P@_aC=|FE2ymXfi4iLy^T){f{Eh9->dg!LC zyma4@vc_j~^f7&QN+WL@2QU4UvxPv!ps2Z~mqOcHr7Z~_b-2yBiqbGC6iMaw3uDAs zqTQ-Q2}=IG3UBpZ7+(DNsN3UQ$65vjcy{6OA;`syD1TG(nfTl+_=)c&yil-|f&%mm zFKW&1818!+sNCo#$f`ZQ^;rK(^y3o`7vx9B zFCe|zwM$QC$+Qa8COM%n-A_IQ|2l*jFL#tl`3I6)9iA6`Xw6Zp$7N=6EDB6bk<0o$ u7u~fd0(nfu2>stSOZodcm@+NX6X{-O0vrFo6N=i)sD{y3?(zSu0^du>J^p8f#5l6n6VQUv zp{R1VGy7}==b>~{#JqsL_Jy400exV|v_ZNEg_u#dJiFqhLsGDm1M^}AcO)tMyVb?l zG$Z`^8r{O||H%jKgCQ89s^?aj>~!|L^-SHXjg1i!>OZE0HEhyu{O@_hQl%(WkpFl@ zh;1=%+b*MUumAYCDxyliHzSGqp1&ygw^Bu_dsd&EKf9<}Z!fV{NRM@MqDjO~r+^5Y z93t3~6rjU@GakKn;Ib5+I2m3>a}=3qS!5f8Bp+(j9Bf=JZ~xRU8-kN&l}edncTjc{ z`#c?udqA}nUX~OcEW_Gm#+#Npw4TpZWt`OZRGyI>mG%QQ94`8hpG&{uqswnY zrR>C3eCEgyHB2wKMXeje9!%{n_c2(><@b36Gu@FtyVjvP65!9cT%>Y;(jBI>b*RqV zDaO7X?);$w41o2(h6TT?ml3ciz>O@8&{v~d=cNS*hWe6Tn4sC&s`mK~xr9zhERA5M zJff*HgQ1i{`rZVy(=AMDRL&_Zyc^WJ5kz^%o-R`&Xj768*znTPyJ*y#=;PiUvZ+{Iuy8{>gf1{lhwZFpreq6z7RBsgHJ zOG@0v-{Z+AQ3M$3j6PpaF6m#eW^%6_E!VybupL1H@M8+Llr(=2P=Fhe z%Og#CB9~1miWppEYIeD}V15UkyjPFXTR71e1n4Z0}_BdWQ zv7zvGl+DXCTQ__?b@|6g93fDAO(4RbhmZoLbNMuiQ@o8+=WFz~54KWZmZJ!1KX+2Z=yTQY}FMbHH! zbH8gWkt$WVXvIyY@D6K`^k9_;#Xu0w*q?E`Lg*4$`hD))<+^nsh!yB6G7bSU+jTjs z!6=ghq9gQQ4H0rc>I}9_=0jq$`9lX66w4+bx2jRbh5l-tcA5r59bVs-65x9Q3xC86 zE=+w>2v7;GPeV^}E&%x#J`_-xch$0ODjSCGqn6V{VlX{Z%8^ap6#fB~59cjTiN(k0 zW8h+A&DT@}Mb@moNnKkOXX6fY7A!sKA%NY{Xw#!qoIoP z1Q^9K9HgP!-)(^zO7!v~^S>;t`~8fEK(4ABn7nuJ+u*Ga7PW?92=#VS1MGAk7k6Fb z{~;M=wrqOmU!>mtD8_)G&ZqxB;j2ryv8bqUK`lIz8eV=Bf zD7wZw`0qK+k-<&P$g`YcY70}QZ>z_pj>8`f7}Y*Mg zu?IV%1*>{$9OG86*}xz`hA%L(*p;v#htqg)q(0g4GW1o0-PSbDmqn+jA*qR4y>Jb* zsBT90^{_d#<@&qqRhste zU$`)Jw6ZaJGUCQmy)wZ9IG#0KMStRMNi?HTdS^P&!vCJvG}(+h{3D;I)>OIeB!CqVTnYUl$3+ zMp~XQIIa?k+_}pykBe7fZQ0>ig(43$ho`kXpRjVv@ z?%+Uqjr&>5AfLcgfrQsdUo;w(7JzlWX-@R-S+)H`qymUye~KPnimR9m@Y6L0N(S2N za7D!a7QnO(1XT(kY)j^(txhCB(Bm9eNE^Z`t2f`KHjapUheUK{3 znSWGNR#)d~Izm5huC~{W^;OiH)vuTK>Q=!JFsQOM#C;P_{+|Yzd<}trSApX89qVxD zMlFnqg&9K&)-!MGjo4p^C{XI^dsv0?G9QHzCH~57*0?uFp=s7(WyiHS_cL6^DT&AB zpW`{e)%g~`nGN#Twm8EDH46cb7X=yvBcpIq86PhT{17ETMIte8kmNhIbpyxUd`1{XeCfaUFmeLNqTK1}tE2RNPD zZcHXRqx_+A5fVf2DEP)jA%jJ zBx`iEse)aMx*03J2iR!0d7Sl7>w8;`C7rA>>vHpP-C0W`k=Jt1gL(kF2d}kV4=6$A z_`8Pa4&8(iN>{(lOwGQIR=cOZ`oaQYiMeN^fz-OhukG@ZVEtvK?vF0(@iC8FGh+>= z%{D|RP1hK}fF`FHe|FmyTc*_}9jR)=+^KM>nb@oj2gf|Y4Q{|0*2ob+)k$9pc zz7@W0Bkf^vJ^PjOQ-`Y}TEbkTu<->5c3~n&6)fuDnzow#j7E5CRprWd%u7~@;Mc9V z9w!o6ta#x)( z&7BhQ^6Be>e|`-J7J$<#2@t<5&}jt00FnJOr5?CB-8Y)kw>6%YG)58Q>J2B4@C8?O zNs>cLOLz;4CHKh3LgGOT04L#v2d;UZJgEBy8!==|=jGq&apt^M>vd{Y+`Ods%uMyI z(Vis9?m8n1IaDc(5@0GlrbQ887YPb#5s{Arl;uqY99pXmWUkGJ#wT^N6!aN4bJO|8 zX`YDpH0Qy(bjkEwAIlfIMeTxpJP3zOO~1&4KK;r8KOXAP6}Y<`XK(n~lIl`X`K{px z<*Kkus`^NAg=KW7T7`bPv0M~?-~7)f(!eJ;q~m0t&}RE{wUah~7a$zTt?OJ{xsrK1 zx4gE~)#98i>;H9Zd=|0XY7-pLpm!H7b}mjq!ZO@Oh-7O7UfzO17n+*|!L4?x^)#KW zUM`33XZ5*=)ZB?ZaU#DTZJP=@$0-p+wmgRaj$lbyT zjFN6>|I2I^-FI!wP5q`z$QO9YJno8M$;&Pa&31OPAu~CTP>$%++}UUD?!HS8;sIXR z0x?h$r0u5*?i5CD3vq`eNpt0h%s^pGK+rSq@TB6g4I+NWp)$Vl35Pbpq({;5neh}6 z0pbul3G*+qARw&qHl6!Ut?=Wp(5aDUd(*2I?q{|khW<_4WF|w&aiWu_y2b8gHB#&I ztqQMx_Tb*`W0PyDShk5hKLcxyl_#4Ph|cJoFFj%oSYMlEk)l)M9EHg}?@ZQ~TplKu zk7sMq3gr~n5NoVJYiG4x&i6M;D&S9rIU}>J#FGx#%Lqx$d*6cb&!xM&+FH!@^clZw zCJV$&gfW`{Ltjd#b_nd>6l z3$C?YDBQ1NVPn(XGEAwIwP|HW~+dkfY7ND#P* zepSw?Ejz@HgW6PuDL_$AI8oCrQitLmXQ!Ffl?Jj7h=+yg#sng1M{770o9i=o&%2*E?S=6JN`XshmaMb(Ii;VO^VI?v>0_h z`z0tFB)Tl1Hw^x?gkOLd?HKHyp7iH&K+xWYb?^Q7uM9HNuDXO^gLGN>*1|X~6iMF+ z*@iM${GL;>rSZ+Z@$2^iy1$7cFBf{I*FzT^|98uXP~Jrj<+o-NkF$DMPH1*Dt@=>K_WEXX$&$4i;xxvao|zeBy`=<{ImJK0 zNtG@#UELB0jw}}O>S(>ylMLKV@{rG{W+S?!J+TYZ^7maAv9kzgXr9g@azcvmkofi2{6QWn~Yj4&b zyC_s~T5wcor>N_ljjP~LUUDR=U0(devRE3ZtITo$9O(d0Y8^_{Zx!SwwN-SgP|@MM zRxEKx@oQ#Wh3TRS-U5$TO-r(`0CSgr+8)eOX1 zHo*D2fG}!RY{sDr7s5c_lP@{;^*fJBg0qYYnd_@>F@-6kBYqjg-)QSs)1fU(waZz>X82v-Mb`tQ|0T_GS_?5Kv%>h)Vdyv{7heoC+)&$J zma66%d7JLyEeighKjrODSQr!SguaD}O%KZ3f8mtJU?`cSVm+t$-fIBih>d zjQjS9(bmFV&t2fVgJWIYs{2glymvgncB05QHUL08rSFsHs>uL&<6w;AqujfnVbFqV z=@6mN*mU4AOXs+4QtCeKAcxpo-NaX@fR;<{FBQ*_^HQ-yUiI`o-YbE=;);?v@5=Do;Dy`M{yUk*X}rgy^;zr6t+Hb}r11g?gRzAk!dM1E&+{XevkNVC6 z-vlMkQzf#FkTOuGi&jlk9@t9d#KvCBRM!vMBQmfJ*4sUn)BWl3cTSC|UNXMW&^%e? z%Rv@VK>W?%lG`0Epdri+}d7Z)EX}G)ic13>e$Qqf`cB!O@jB`tA=CUDK zg0FQwUmZ@}Czq%HzG1M>5)|JMp&Z2}0-YaNQ%=c~O2LGmMbyXoIN6FfSFhKp5Z;jj zGb|_w*m^agL$mZ<{9V!4u2$iYT`Yd&=jxMA z)xy@HH{hxB0$dF#;W1YiK+7pOn$(*lwh!F>$Tc`~VahA~jAj2|{@*eOTF|6NR1bJm zqv#8E+g7^W0LONbyiX7ndT$Z>8vofwus55xXT0_I?`piQm>zbll`G}c1`Qa6D;mj^ z$Q=?e8e+?L9(Bh0w02eWXIA{xvf1m~T>Lh~<*S|udpRi~6z`KjVoGvIRi(J9!uL7v zokyg_$~rW6HrEt0vtxTi*c>}R&x6jonaOI45VUhW63Uxi!%&ZTH#UoJjI~Gm-ejNvFV%+Vx$~)KN?=I3WVlPJg;W!gjQv@2okxlbiY*Z z_Bp;C4uRah>C&GGtm!u_4T?Fyjt;6HpZ>5=e@BFe@`nsny#h%INhpqYIg*Nj$1+4c z7%3@p(7vD@${pDeP1jxLqgX98F7gZ@@0Er;((<+a`1+9<9qK#nue+%VR0`=|c2aVW z+~vyp>V%-$P1tL>iaSM}Ina9$Y;WtsEac#UM1aIR8>8z_nRg{f9v$MXsKSlmtgIUM zeoMa#U2WsMxM&OrrmgUX82Da@bw1z+xov%+DS_h=m?|q#+L98aJN5^g2&(8lJkj?s zZ#vU^AJkG1VSIZQs5SkheeIvZ5d^mD1WeRju2xVY+e@xE%TUAp!Mz(KQ-9(6MZ)Nd z!1Gk~r0glSJeTV5(4{Jca?|c_Ye5aZr!F&YHCi&qh%Bz*Ou+I)5Tq_orp*=xvCH=_ z`+@0@UXNni)gBs+(~s7RQpl244pnNP1T`F|;G7KMy)_T*mj}lR0V93@Gy_}VHQ9jB zoT%vyt&e^4uqKfHHZ4N&W-;E_UtN6@`YtxU3+%WNJ?a`yswc*)JNjK`tOs+8QdC95 zosSO@wNJmDbM(=UoRqi?XKScQ=-|uQD)Rt^F{qQU?To^0T4Z}xD$@b={mzrJj%8DN~h;lmCpq{RQzS|BI}hMnXo zy}s3t<{@f5ZSnqsKOXF*Y!M~`MVf-CfY1rFLUjIGY^NZccrX9T4 zhn$>g{K$BU7I#ifrWwOjFw+sWMN%X76K%JsaNEEyP=kIQB-l~#Z`Fs2I|$1L^UypP z^RD@iE99Ug(cbZTLl~`Y6k=-zyve(DB2{sGRx49<5ppt+Q%V_!p*%@fY}h`>-wcsT zsN182VG$c*YJn=iZxYO_ zP9PQU6xnB%^QbyRnXRu$<*k!UnC zJEUe&jL{1r+rM%7G{8{@DLtmuz9zVW zg78^Nq!gky!*X8kFuStf_-+vvmw>%`d1v^d$pIu91PE9|h)~|o;?YFD?%s5}E^*n4 zfWO?olbtqR5_$)d^ZFJidk2Di$ssoA2%cNTsb<;6jK#(e0 z(BQZ$LYK`)F`z7b!a=c#Og!a*czXVm2R1!4;(d-TMg$7AwN846;OP%{N*R9xvKS^` z^*UMTQGLl-3;^|43Jh*<*AZ;mChX^a(to~~6J&v!B=Y4Dak^ro^_u{rXcEI(`=inG ze*4+cqsMU+gsG`Bl=1p)4rj<0B`$|;rf^g)qC6zl;*Pk7*J`5dCav(6_dhmeF7TA_3cF)$a1So`%|6X9P zyVzCZw@8d8FoENfB!>a5?0izS^iXSOx2J9*6T}z}xB7k6abZm(FotzXg!~5>g{V@L z9JP82wsy;1u`FXj|HG)h7fJe(Raru3;qml9vWy+wj`_G~VAm!`3ulrL;AQ(puQ&RG85Do_ExN1iB-PIm2kc0fp8fgngc^s<-$P*`QAL{b4#2D z2lUwfE56B=#v61>rfbnSV+aFsA4rb`zmvccKrjP1YgYiXBxwRFl zP`|^3P)r3X01$!K^+lR{bsERzNd~?st8?mqA#as_n-;clC*U$ zk!{d=`4gHaLc*pQOuB5gd8~HpX&9ss9#@SMtiekQ&IAn>VDea7V*b0lq*itLb0Ohd zB+R5oxtO%9b#Y5?d^TReBS8+jRSkN+jKrt!J;k<2(FSL zqh5L%Vp-;DP3=r`bYGeaYARQ!T{i{P&wd{Wu|bR9NQdS36Kg8Br_J$N9Z{L?BO`l) ziKcNJYD%~zB?6b2=`e5lYumVnSThQYieBVS4c)A^Ler2=ZsAzX5ucr=5J}MuN^49} z5I43~{TNS-9G$3zR%WT-VOIJQHh#{o^!hz6;w_FW$c6i<;7SntIh5de)CHcr;+8Nk zTo7em27(W-{(Dbyfrn_XAOm;PmEADIZq$yt*~!pmrXq{%jo#g7DBw>-;mTech3#YJ zBRuK&_SMClNSZ<)V)PS1s3=(a)nAH#U3LK&FF}?Ui=zoW6&o?jZ|*;H88gLJf8GJXZigDE+BLFA}Xj3S4*N_WWbpFYeg^M}ElG+4{uK0f5gkhUz_xrYs=e+bDr zc!_n?(_(3`@T1{aI5|qH&Gw7TGq(x}#qY3rjybvfWkfg&8zh(UX#rpFBR3u!=5)im zTXDNIr|P~=p?M8?T5?qH`(73Q0#7p5P@_aC=|FE2ymXfi4iLy^T){f{Eh9->dg!LC zyma4@vc_j~^f7&QN+WL@2QU4UvxPv!ps2Z~mqOcHr7Z~_b-2yBiqbGC6iMaw3uDAs zqTQ-Q2}=IG3UBpZ7+(DNsN3UQ$65vjcy{6OA;`syD1TG(nfTl+_=)c&yil-|f&%mm zFKW&1818!+sNCo#$f`ZQ^;rK(^y3o`7vx9B zFCe|zwM$QC$+Qa8COM%n-A_IQ|2l*jFL#tl`3I6)9iA6`Xw6Zp$7N=6EDB6bk<0o$ u7u~fd0(nfu2>stSOZvg3lmZDr!6g7*DE$bC$;!uev$r2|^NW!og;$aw;^{^~M5{6Ak z;-M18VHv^@h9$-!#u#IaZTyg5vM>gW!NwS4jPXO3WxaK!D_uP->-~ONmd}3wX|>d9 zb>Cti{glpTE1!4b z`dM82@|VXxr%jvon_1JQef!(W=Zyb0ZQ6hN=Co$N9^f!B2#_T_v z_KRn)nwEi2^oZHORq{X5K)U)rA;eWyqHNu~8NmHOUfHYjiX_&}+l$W+0yD!stNgXJ zh2`tgDga@EYTUEPD2l<}73HsIjGx!!{YX^4 zv2gq|?y13V#>-N*tkJ_P~w_ra|hMS!T?^;OYXyk3m-HOb!%^>v88PUZZ{rG632Ss>`X zF;uI+ugS^C1B8m&?a2SfkBGj|2V!)%S5P{XkB0qA#_z$s2h`t(c4R&X2qV1TAF4NxgGxhg%J2Pk0?aB-Q!W>!nE?fP+9>4j5`g=Oo@6K8T^a3IR2J!u^ z+TW_@4Y^s1fNDUPAcX6Nza39wPxj1)J=s42_5*=29Ki7rU{apd-z0LJHcf~`Kz?R6 z@NGc#GryC*4HqR?7ux-T*ugGy@_6 zI`RD~;HE_L0iQk{{(c$IYvT9K>I1qy2t0)}u8t=k_}w+YJAgR*9P=@XyL{y!~6~&ux!*dil z)qU^_ae1&q*5|GHuY`L(eYf7|`GHOIuMTXS-wX&dRBlWYp`*`CXq zwxVt0Z3$|V^j$bD^JSI>uJ_|v*XZ+rYu^M!I8Zz4V%dixbnZh@_4!^g*xfST4pQ4g zS1t{pP4=a*>EIc6>7QTqM*6P-w57}u*uGe_Hve_}T zdy!~6`EO#V_57q~4fl6J4k2+FZE;mb7e4%{woR=+U!i|~?e@&?03sSt{u=iGNOYCH zAubOnHb^=cfIW_)PeXZVJ@Z1iwC>hFA8q^@K)X>}KkT)gUlPrq{6h5CAC~20TClcaQ_M*Dw(U#G&&-UIlx+=7l@P(%IhW|(`5(x0<1Vl$_Ey1r4eGZ(w|!0%NQCKQHTm%VzCZx83r@*vj=7^I2T_ z>b#%e_$06bSXuh&+^2AS7~kK9^FPONy4`t+Hhtu0ZYjp7kmr*)4&$@HxxhJ&bPlW= zJ1XZRWv|XHM0uV?ITl3w9INlcv%iWw?!$2eh&1+P_WdZzaRk4=-Rk_ArH8RE8nfGq z<0v5WMaOXG>i6M~^Y-KWxn|F`;yT8?z7I5!yk%Z61{d*MmJ#>8ru?RiKAW7Ezc#NM z=`Xb+ulh8Q?lNEm(2l=FcTW0Ie;45#@)*UvE6OlNs?S5bpCOlLfQdZBe6GpAT8@av zc^fJ$C34YcofYfnjmWV}bqq7P z$5A}{C-Ia4W1lzRw@u??wv=!4@z?O*X@48*`Ri%Dcy8Fftx@?ZUZ1};?)-)+XDRug zO@AfI)=$hANAa8^MtL;5R`I_35JV(|<>n`;hlx zIj%}a8rLu1xM2ME>T^tw8|RM(Hp~w@mrQ!VIQ()NPp5Hu^{79m&stD9tKa*%Xsa(5 z6`$-Br5|k;C5P5w9^mgpSM?#ov0xgj4ZijFlb)eX)8u@uo-6v#7{fmiZmz)SJK{jY z>CMQ0nFxHAC-Yx>_JFuF&?UK|a)x-LJ->M34~iTj%ui^Z8N&J1`aG+jG5&uYz8?%A zwnP3#JyQB(=M>AKey5(7Z_LKr!#Rw-mx=0A?}(PFGji1uxUM|}59AkrMi)bID+E9VV}KV28A4f&#u-)fH|eHTT=rtGQdh0VkK z`}Fx%KUZ&_{~*n)sPir6=Tt_;KFT+LRWzP?V=Vt=^4QznFsTe$&gjpBd+w0WGk@0P z{9yj#X*Iw4Bj!(@KpBvpG31;PxKxhVq`E`Df^8l|yiJeHD~-{sb4WCoMe#s1cCY6Q z*{!@b#;eAo|1$PGiW5?w8|HjV`Z|5S)z8TPb2J|m9E1M6=B;}~C+1Qw4|a~vXK49A zb5JzjLHQ>x(HxLE@1VU;d)`s9UCLkoEVDe|dXAc3{jqv$#&gwMC+3&%d3>&k((fqR zAZ4v^K#8-`pDS}%ZE_Ba%F%T(i0qEdDN1`*>Mu;{NMAJ2QVhFQ=I7LTELoPZXB(WG z<{!U*GAQ#;WiY_DOwoAo0nvjwl+mFs`FzU15h%~Sm9Y*-^NgN1>SxTKEv})wX=39H&o%c@S?b@uQ*;&~4zG8@ z?~L;bWg;7(*gl#Uy)@9RltII#rceJb@~?Sr`1AYK{OXUjIT^E%-(kZ%M=BG2zvD}y z>Bu9Zw-#}LmwKo0h4M~ws-zPwmpY2KM3x!SNB#(5$BZz~SwQoHG~Zb>cAR`p-yyH^ zJL7XIe<<%;qV4p*i=pkMuW-YRreL&kaE~M(4FVGB@ctqyLQG zW#YaOK+cmYNBuc{jupt$?yrdEPybo;HylOXHZZ{<*hlT2Z$(Tqv?JqoeSVEThjwOu z0Eo~|JX0RE=X5OrVD6a8Ucc|VqT}43#HFsFxPrbx-CN&{kZxv4?aoZowx_lnm~l=xa!79<&37x$Ao*+0>2oa5{x+`j(|CSN z<8hd0pM%)sPMhZ2W0}VvMjpPZ6xiP=2kpECf?}FP?wuE9We&$WxT>}k|B^gc8umcmV347mJ}q-RM#rQl0EXC(+eD8=nTUB;W$6aw2 zT74<;K(r=`{`i<|IZ&L|w}IaQYMj_E0L2zg#L*@1d>5XZlJygK?oEJ|Yp&y!AMIt5wDA$i zciLYC@wPy`dA9m@{m9Fm@o+fS-{3j70u&Eybr}*(k79^pnhS}w?1rk?l_eD|MF*0xDyrx+qa)$YHMI*;_M zFyAlJ>o?M8q?H>cy{KhS@>;rRsmT{jfm5>l6a!!U{!60pwXeywN5$(hMRUQXalWf% z)*c%_`8O%21oBf7sl3|n5l4Qlj5m)ye%)~Y9E$(1*u6x?dNv2ojhA1_;NV(Oyz@TM z*L2QM=i2gjRvl2*Y9yAQztom7+&RjAkBp^H?0J&2wMYJ4mcO;GWK#JX;14MFRa;K8 z^O3$5=>rqY(-Yy!to;tL`fKBg*Vo0@m%;X%$_~l$Q@n5Kk*#taOGiU#ROQynBe3fS z;8+}M2qyA$L|evi=O}w&qUEQ&mTkRtyzEr|nltYi?m?w3r`dVKk>%3H63ACSej9Oq z9BUkAU@gH2?T3^IXkAM6`^zSkU%&prtgJ@Y+e>prCG0VgJmI$y*ZZOTnd&-^n2(Zc zN}X2xD%PFlWB)DaT?>kRr}%NBGKRZ0)ED? zdfLj|ABl_kuZiLAdNDHCE7vJ#%TMP$Sc{?GgDYIw={u5H#g?xrYceL6DVA%GhO>M6 z4(lTBrL_?efjp2uE~PT>yhAjdS}g`Us;B6c@;%Vq3=Sy!u&J`>rai#M_P&Z#cJ=$v zfghu+u&ZeDXME37k;)(3lJOvbwKm~FYfI{n{8kLKMCZ#d5BJG+H){Fm*oie=<7-&P z+InhPjgBp6UXr?wl(#V7KOeFDTTy<^`W&-!D*td-%@lnbV_AlJZ5 z#QdxG8XbE=AImj8W_gO@dNk#~FN$>Jx}4fKZx>w^yXBf6qx_m(Bc0PaGL;J*7b>N% zFuPy9KGNSJD$r+$E`JkitTgvW>f7j8f9MgciNTsAgS{7{xHe@ULA^h~8l5iyqj9fQqV-D1AMFEq0sBDq zU>`_YhhbC}?KRRpt%oBnkdM%Qr#)}Ue@Q7nJtuZV)d#{_sIsv&QR>>LxR0ch+Fgr8 zEB2ur)a^s5Ef<~B8mNBk6HhXrI#d5WeeMpvkNxS> z?O(#){=X1?bswQEsO$l%)wj}aYQdU5Wv#vX9bFG>`%2W$(v;&_v-0Y%W3AaNU}Su) zTG)L&v0f;F@8$YCtO;z-e*yb|2244jmYNU0=>{pON-~7}HN!4rC*Z z@82i7D|ewy(P=7+3!nT3<;PmN=;dC6dt-{j$Nl%jkbW$AiFhyV16#Xmp=dt-INB7S zP4NM3h3jH1|C8Z#ZS)=1!Cei6Vp|Uv%i6gp?uC9y7WMmX7afH!i%UJqdrVqS{T?!; zwUSY!u`_cJ_r*0Ai1me!n5;P*U+0*t@2RY{JFrIMojW9dVtDQRm5Sthu}es0Jq1`KIQ)9eGGf z?5BYYuEVo)Qz!#k8-0^LU&;QAJS+i1Nt6TWoZe$+N&RkxypWeK0FMJrfL%7xjkKQ! zW?7MEJJP^9?3utLKmjm$&3XKvv4%Z+IdHuldA2J}n~*Xg~?n*iDe^cpY7 z)D2~Ttp5^t5uiOY?b2GmTpxxifj&+%iuxs_ZZnF0?0CxKXXlkEHJk;kWjgyQq9 zl%HGEf()+#9tWIc>(TOw+6)_jbhpYsRr!X@Xg~2^1I<9R@^U{0#!>89sm z|L1#w5Ri=hrjz-ML6qrPfZK`&?E}aq4LAZMQzxl-Rz1qN#7#D7XI`-v>U7}Oz##35 z>LcW#td5O$w^Qe8+Ejkv10U&J&+mGa{Z>^TembJui-ATT>t5vo?Qj1$;FvW(cJmNr zeG;H@t1{r@YiS1{4_B=Nij^lQ-_^h-*1IY1OCX!Sh*hp`xF6-33B1F)H`TrB1F20A zaX(i#=v>Vs%5xoXoOK^j_bLb4A*-17wNhp6v?KP(zYZv*{qh+x$)F$da&_MT?>M3N z>l~+doiO5(K_}$q%2)&B`)Xhx>pd>LYwe{GGIZVC0rI?ob)T^ARUTA8maZ8qL|&g{ z-CL%6l>;XrQ^&_4B9C_fqpW|+^-nxl>$LX0Ha~dJ*n(a^t|)kEjyUt;Y>9KLZFHady>QQUB=+hVS$V?0rB!+bCa2 zxOOy>p6vJ@<@y3Z?_sx9uhFJYzWLnCb4As`--)8P{zc@!vItzbS^DgFI6%LlG%1a9 z>%JzsY9MC3qsR#KUU%YKJkN=?d=c)u%?=%hOB4BdEJB`=#tV8EJ=tjGJHM3gSS$Zz zhbTF?PMle{7`_=CAU_ZTPgQ?k0DoVeyHpJKTrkwT%7xyB)3Oe*vd)Q7w#UNh%Ifd% zzV@ptH_i_M!U-U`QyqM<;uER=%HwiGg7WqAMDgbDO5M{t7OPM08-FK# z$>B}n?4}>dwj25LO85$+d=odQt}lA!W>NUsUy1I}@vt_p=R#ob{irYI8K!OYJR7d< zvf9qg(nH>l*^vLZWJh`{K|j3e{pI8Or}xp9ezbW4hu;tdTbGV;0PnTdaezLP?x=lV zk@o=F_Qvn%)azXPx#{FfG9Q$m6v<`;&$WF#0ME!wQTYtzO1h&qTI0FB?ZRw;B?@z#&Wbx-wwW7%<2{SyZY z_bwM_R?QRnt7ePJxBgL#^qar4Sk-Sd$H1Ha6MYS|0a7cUg=V@-^g7D5D8*%)B-_f3 zN?Sd2V%;SDH&vbrtAFCa`L};B8c(gC@($W)^lWy|g%d9d@+-v46w2wjMD=X;dz9&! z6qaj>Ol95wN}6a1o|&Zo=3qfs{RckVBL=!ICgkspIM5yXL>Y$wFH zdOjeW0_v}oZog}i?#chRhKfz~Utjc*xIElvx$cP%qeIXzWUFYeE4D@NT3=AHdkMxG(^4&?hZ41Q{qLdk zyPTkRH4jwB7Gcb{sq~|0$H0<^4dE z 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 u7u~fd0(nfu2>stSOZ variables. +#include +Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin) +Q_IMPORT_PLUGIN(QDDSPlugin) +Q_IMPORT_PLUGIN(QICNSPlugin) +Q_IMPORT_PLUGIN(QICOPlugin) +Q_IMPORT_PLUGIN(QJp2Plugin) +Q_IMPORT_PLUGIN(QMngPlugin) +Q_IMPORT_PLUGIN(QTgaPlugin) +Q_IMPORT_PLUGIN(QTiffPlugin) +Q_IMPORT_PLUGIN(QWbmpPlugin) +Q_IMPORT_PLUGIN(QWebpPlugin) diff --git a/Telegram/metastyle_plugin_import.cpp b/Telegram/metastyle_plugin_import.cpp new file mode 100644 index 000000000..7c0d09542 --- /dev/null +++ b/Telegram/metastyle_plugin_import.cpp @@ -0,0 +1,13 @@ +// This file is autogenerated by qmake. It imports static plugin classes for +// static plugins specified using QTPLUGIN and QT_PLUGIN_CLASS. variables. +#include +Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin) +Q_IMPORT_PLUGIN(QDDSPlugin) +Q_IMPORT_PLUGIN(QICNSPlugin) +Q_IMPORT_PLUGIN(QICOPlugin) +Q_IMPORT_PLUGIN(QJp2Plugin) +Q_IMPORT_PLUGIN(QMngPlugin) +Q_IMPORT_PLUGIN(QTgaPlugin) +Q_IMPORT_PLUGIN(QTiffPlugin) +Q_IMPORT_PLUGIN(QWbmpPlugin) +Q_IMPORT_PLUGIN(QWebpPlugin) diff --git a/Telegram/telegram_plugin_import.cpp b/Telegram/telegram_plugin_import.cpp new file mode 100644 index 000000000..33b4b9aa5 --- /dev/null +++ b/Telegram/telegram_plugin_import.cpp @@ -0,0 +1,22 @@ +// This file is autogenerated by qmake. It imports static plugin classes for +// static plugins specified using QTPLUGIN and QT_PLUGIN_CLASS. variables. +#include +//Q_IMPORT_PLUGIN(AVFServicePlugin) +Q_IMPORT_PLUGIN(AVFMediaPlayerServicePlugin) +Q_IMPORT_PLUGIN(QT7ServicePlugin) +Q_IMPORT_PLUGIN(AudioCaptureServicePlugin) +Q_IMPORT_PLUGIN(CoreAudioPlugin) +Q_IMPORT_PLUGIN(QM3uPlaylistPlugin) +Q_IMPORT_PLUGIN(AccessibleFactory) +Q_IMPORT_PLUGIN(QCoreWlanEnginePlugin) +Q_IMPORT_PLUGIN(QGenericEnginePlugin) +Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin) +Q_IMPORT_PLUGIN(QDDSPlugin) +Q_IMPORT_PLUGIN(QICNSPlugin) +Q_IMPORT_PLUGIN(QICOPlugin) +Q_IMPORT_PLUGIN(QJp2Plugin) +Q_IMPORT_PLUGIN(QMngPlugin) +Q_IMPORT_PLUGIN(QTgaPlugin) +Q_IMPORT_PLUGIN(QTiffPlugin) +Q_IMPORT_PLUGIN(QWbmpPlugin) +Q_IMPORT_PLUGIN(QWebpPlugin)