예제 #1
0
void KTBrushEditor::paintEvent(QPaintEvent *e)
{
	QFrame::paintEvent(e);
	if ( m_editor->editing )
	{
		QImage *editArea = displayDevice();
		QPainter painter( editArea ) ;
		painter.setRenderHint(QPainter::Antialiasing);
		painter.setPen(Qt::black);
		
		editArea->fill(qRgb(255, 255, 255));
		
		painter.save();
		drawEditor(&painter);
		painter.restore();
		
		painter.end();
	
		painter.begin(this);
		painter.translate(QPoint(width()/2-50, (height() - editArea->height())/2 ));
	
		painter.drawImage(QPoint(0, 0), *editArea);
	
		painter.drawRect(editArea->rect());
	}
	else
	{
		DDisplayPath::paintEvent(e);
	}
}
예제 #2
0
int main(int argc, wchar_t* argv[])
{
    bool all = false;
    bool systemDriveSource = false;
    DWORD flags = 0;
    std::wstring sourcePath;
    std::wstring targetPath;
    argc--; argv++; //Remove program name
    
    while(argc)
    {
        //Accept if it's a switch -- that is, it begins with - or /
        if (wcslen(argv[0]) > 1 && (argv[0][0] == L'-' || argv[0][0] == L'/'))
        {
            //Loop through specified switches.
            for (wchar_t * strIt = argv[0] + 1; strIt != argv[0] + wcslen(argv[0]); strIt++)
            {
                switch (*strIt)
                {
                case L'A':
                case L'a':
                    all = true;
                    break;
                case L'S':
                case L's':
                    systemDriveSource = true;
                    break;
                case L'R':
                case L'r':
                    flags |= DDD_RAW_TARGET_PATH;
                    break;
                case L'D':
                case L'd':
                    flags |= DDD_REMOVE_DEFINITION;
                    break;
                case L'E':
                case L'e':
                    flags |= DDD_EXACT_MATCH_ON_REMOVE;
                    break;
                case L'N':
                case L'n':
                    flags |= DDD_NO_BROADCAST_SYSTEM;
                default:
                    throw std::runtime_error("Unrecognised option to DOSDEV!");
                }
            }
        } else //NOT a switch
        {
            sourcePath = argv[0];
            if (argc > 1)
            {
                targetPath = argv[1];
            }
            break; //Commandline processing finished, break out of the FOR
        }
        argc--; argv++;
    }
    if (systemDriveSource)
    {
        wchar_t systemDrive[4];
        targetPath = sourcePath;
        if (!ExpandEnvironmentStrings(L"%SYSTEMDRIVE%", systemDrive, 3))
            throw std::runtime_error("Systemdrive could not be enumerated.");
        sourcePath.assign(systemDrive);
    }
    if (sourcePath.length()) //We are defining a device
    {
        DefineDosDevice(flags, sourcePath.c_str(), targetPath.empty() ? NULL : targetPath.c_str());
    }
    //Print device list
    std::vector<std::wstring> driveStrings;
    wchar_t *drivesBuffer = NULL;
    DWORD error = 0;
    DWORD currentSize = 0;
    const DWORD incrementSize = 2048;
    do {
        delete [] drivesBuffer;
        currentSize += incrementSize;
        drivesBuffer = new wchar_t[currentSize];
        error = QueryDosDevice(NULL, drivesBuffer, currentSize);
    } while (error == 0 && GetLastError() == ERROR_INSUFFICIENT_BUFFER);
    if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
        return -1;
    for(wchar_t *bufferWalker = drivesBuffer; *bufferWalker; bufferWalker += wcslen(bufferWalker) + 1)
    {
        driveStrings.push_back(bufferWalker);
    }
    delete [] drivesBuffer;
    if (driveStrings.empty()) return 0;
    std::sort(driveStrings.begin(), driveStrings.end(), deviceSorter);
    std::vector<std::wstring>::const_iterator stringsWalker = driveStrings.begin();
    for (; stringsWalker != driveStrings.end() && StringIsDriveLetter(*stringsWalker); stringsWalker++)
    {
        displayDevice(*stringsWalker);
    }
    if (all && stringsWalker != driveStrings.end())
    {
        logger << L"\r\n";
        for (; stringsWalker != driveStrings.end(); stringsWalker++)
        {
            displayDevice(*stringsWalker);
        }
    }
#ifndef NDEBUG
    system("pause");
#endif
    return 0;
}
예제 #3
0
QPoint KTBrushEditor::mapToEditor(const QPoint &p)
{
	return p - QPoint( width()/2 - displayDevice()->width()/2, height()/2 - displayDevice()->height()/2);
}