#include "stdafx.h" #include "Common.h" #ifdef USE_OPENSSL #include #endif #ifndef WIN32 // vswprintf #include #include int vswprintf_l(wchar_t * _String, size_t _Count, const wchar_t * _Format, va_list _Ap) { wchar_t _Format_l[1025]; ASSERT(wcslen(_Format) < 1024); wcscpy(_Format_l, _Format); for(int i=0; igenerate64(); #endif return Rand64; } QString GetRand64Str(bool forUrl) { quint64 Rand64 = GetRand64(); QString sRand64 = QByteArray((char*)&Rand64,sizeof(quint64)).toBase64(); if(forUrl) sRand64.replace("+","-").replace("/","_"); return sRand64.replace("=",""); } int GetRandomInt(int iMin, int iMax) { return QRandomGenerator::system()->bounded(iMin, iMax); } StrPair Split2(const QString& String, QString Separator, bool Back) { int Sep = Back ? String.lastIndexOf(Separator) : String.indexOf(Separator); if(Sep != -1) return qMakePair(String.left(Sep).trimmed(), String.mid(Sep+Separator.length()).trimmed()); return qMakePair(String.trimmed(), QString()); } QStringList SplitStr(const QString& String, QString Separator) { QStringList List = String.split(Separator); for(int i=0; i < List.count(); i++) { List[i] = List[i].trimmed(); if(List[i].isEmpty()) List.removeAt(i--); } return List; } QString FormatSize(quint64 Size, int Precision) { double Div; if(Size > (quint64)(Div = 1.0*1024*1024*1024*1024*1024*1024)) return QString::number(double(Size)/Div, 'f', Precision) + " EB"; if(Size > (quint64)(Div = 1.0*1024*1024*1024*1024*1024)) return QString::number(double(Size)/Div, 'f', Precision) + " PB"; if(Size > (quint64)(Div = 1.0*1024*1024*1024*1024)) return QString::number(double(Size)/Div, 'f', Precision) + " TB"; if(Size > (quint64)(Div = 1.0*1024*1024*1024)) return QString::number(double(Size)/Div, 'f', Precision) + " GB"; if(Size > (quint64)(Div = 1.0*1024*1024)) return QString::number(double(Size)/Div, 'f', Precision) + " MB"; if(Size > (quint64)(Div = 1.0*1024)) return QString::number(double(Size)/Div, 'f', Precision) + " KB"; return QString::number(double(Size)) + "B"; } QString FormatRate(quint64 Size, int Precision) { return FormatSize(Size, Precision) + "/s"; } QString FormatUnit(quint64 Size, int Precision) { double Div; if(Size > (quint64)(Div = 1.0*1000*1000*1000*1024*1000*1000)) return QString::number(double(Size)/Div, 'f', Precision) + " E"; if(Size > (quint64)(Div = 1.0*1000*1000*1000*1000*1000)) return QString::number(double(Size)/Div, 'f', Precision) + " P"; if(Size > (quint64)(Div = 1.0*1000*1000*1000*1000)) return QString::number(double(Size)/Div, 'f', Precision) + " T"; if(Size > (quint64)(Div = 1.0*1000*1000*1000)) return QString::number(double(Size)/Div, 'f', Precision) + " G"; if(Size > (quint64)(Div = 1.0*1000*1000)) return QString::number(double(Size)/Div, 'f', Precision) + " M"; if(Size > (quint64)(Div = 1.0*1000)) return QString::number(double(Size)/Div, 'f', Precision) + " K"; return QString::number(double(Size)); } QString FormatTime(quint64 Time, bool ms) { int miliseconds = 0; if (ms) { miliseconds = Time % 1000; Time /= 1000; } int seconds = Time % 60; Time /= 60; int minutes = Time % 60; Time /= 60; int hours = Time % 24; int days = Time / 24; if(ms && (minutes == 0) && (hours == 0) && (days == 0)) return QString().sprintf("%02d.%04d", seconds, miliseconds); if((hours == 0) && (days == 0)) return QString().sprintf("%02d:%02d", minutes, seconds); if (days == 0) return QString().sprintf("%02d:%02d:%02d", hours, minutes, seconds); return QString().sprintf("%dd%02d:%02d:%02d", days, hours, minutes, seconds); } QString FormatNumber(quint64 Number) { QString String = QString::number(Number); for (int i = String.length() - 3; i > 0; i -= 3) String.insert(i, QString::fromWCharArray(L"\u202F")); // L"\u2009" return String; } QString FormatAddress(quint64 Address, int length) { return "0x" + QString::number(Address, 16).rightJustified(length, '0'); } bool ReadFromDevice(QIODevice* dev, char* data, int len, int timeout) { while (dev->bytesAvailable() < len) { if (!dev->waitForReadyRead(timeout)) return false; } return dev->read(data, len) == len; } void GrayScale (QImage& Image) { if (Image.depth () == 32) { uchar* r = (Image.bits ()); uchar* g = (Image.bits () + 1); uchar* b = (Image.bits () + 2); uchar* end = (Image.bits() + Image.byteCount ()); while (r != end) { *r = *g = *b = (((*r + *g) >> 1) + *b) >> 1; // (r + b + g) / 3 r += 4; g += 4; b += 4; } } else { for (int i = 0; i < Image.colorCount (); i++) { uint r = qRed (Image.color (i)); uint g = qGreen (Image.color (i)); uint b = qBlue (Image.color (i)); uint gray = (((r + g) >> 1) + b) >> 1; Image.setColor (i, qRgba (gray, gray, gray, qAlpha (Image.color (i)))); } } } QIcon MakeNormalAndGrayIcon(QIcon Icon) { QImage Image = Icon.pixmap(Icon.availableSizes().first()).toImage(); Icon.addPixmap(QPixmap::fromImage(Image), QIcon::Normal); GrayScale(Image); Icon.addPixmap(QPixmap::fromImage(Image), QIcon::Disabled); return Icon; } QIcon MakeActionIcon(const QString& IconFile) { QImage Image(IconFile); QIcon Icon; Icon.addPixmap(QPixmap::fromImage(Image), QIcon::Normal); GrayScale(Image); Icon.addPixmap(QPixmap::fromImage(Image), QIcon::Disabled); return Icon; } QAction* MakeAction(QToolBar* pParent, const QString& IconFile, const QString& Text) { QAction* pAction = new QAction(Text, pParent); pAction->setIcon(MakeActionIcon(IconFile)); pParent->addAction(pAction); return pAction; } QMenu* MakeMenu(QMenu* pParent, const QString& Text, const QString& IconFile) { if(!IconFile.isEmpty()) { QImage Image(IconFile); QIcon Icon; Icon.addPixmap(QPixmap::fromImage(Image), QIcon::Normal); GrayScale(Image); Icon.addPixmap(QPixmap::fromImage(Image), QIcon::Disabled); return pParent->addMenu(Icon, Text); } return pParent->addMenu(Text); } QAction* MakeAction(QMenu* pParent, const QString& Text, const QString& IconFile) { QAction* pAction = new QAction(Text, pParent); if(!IconFile.isEmpty()) { QImage Image(IconFile); QIcon Icon; Icon.addPixmap(QPixmap::fromImage(Image), QIcon::Normal); GrayScale(Image); Icon.addPixmap(QPixmap::fromImage(Image), QIcon::Disabled); pAction->setIcon(Icon); } pParent->addAction(pAction); return pAction; } QAction* MakeAction(QActionGroup* pGroup, QMenu* pParent, const QString& Text, const QVariant& Data) { QAction* pAction = new QAction(Text, pParent); pAction->setCheckable(true); pAction->setData(Data); pAction->setActionGroup(pGroup); pParent->addAction(pAction); return pAction; } ////////////////////////////////////////////////////////////////////////////////////////// // // #ifdef WIN32 #include #include #include bool InitConsole(bool bCreateIfNeeded) { if (AttachConsole(ATTACH_PARENT_PROCESS) == FALSE) { if (!bCreateIfNeeded) return false; AllocConsole(); } freopen("CONOUT$", "w", stdout); printf("\r\n"); return true; } #endif