void ApplicationManager::setFileSystem(const char *fileSystem) { std::vector<std::string> result; pystring::split(fileSystem, result, "|"); // gvfs_setZipFiles(result[0].c_str(), result[1].c_str(), result[2].c_str()); for (size_t i = 3; i < result.size(); i += 4) { gvfs_addFile(result[i].c_str(), atoi(result[i + 1].c_str()), atoi(result[i + 2].c_str()), atoi(result[i + 3].c_str())); glog_v("%s %d %d %d", result[i].c_str(), atoi(result[i + 1].c_str()), atoi(result[i + 2].c_str()), atoi(result[i + 3].c_str())); } setDocumentsDirectory(internalDir_.c_str()); setTemporaryDirectory(cacheDir_.c_str()); }
void g_setProperty(const char* what, const char* arg) { QString argGet = QString::fromUtf8(arg); int arg1 = 0; int arg2 = 0; int arg3 = 0; QString argString = ""; if ( g_checkStringProperty(true,what)) { argString = argGet; argString.replace("\\","\\\\"); } else { QStringList arrayArg = argGet.split("|",QString::KeepEmptyParts); arg1 = arrayArg.at(0).toInt(); arg2 = arrayArg.at(1).toInt(); arg3 = arrayArg.at(2).toInt(); } /*------------------------------------------------------------------*/ if (strcmp(what, "cursor") == 0) { QStringList acceptedValue; acceptedValue << "arrow" << "upArrow" << "cross" << "wait" << "IBeam"; acceptedValue << "sizeVer" << "sizeHor" << "sizeBDiag" << "sizeFDiag" << "sizeAll"; acceptedValue << "blank" << "splitV" << "splitH" << "pointingHand" << "forbidden"; acceptedValue << "whatsThis" << "busy" << "openHand" << "closedHand" << "dragCopy"; acceptedValue << "dragMove" << "dragLink"; // value of cursor also taken from index of the text, do not change the list if (acceptedValue.contains(argString)) { arg1 = acceptedValue.indexOf(argString); MainWindow::getInstance()->setCursor((Qt::CursorShape) arg1); } else { QString info = "Accepted value for "; info.append(what); info.append(" :"); MainWindow::getInstance()->printToOutput(info.toStdString().c_str()); for( int i=0; i<acceptedValue.size(); ++i ) { MainWindow::getInstance()->printToOutput( QString("- ").append(acceptedValue.at(i)).toStdString().c_str() ); } } /*------------------------------------------------------------------*/ } else if (strcmp(what, "windowPosition") == 0) { MainWindow::getInstance()->move(arg1,arg2); /*------------------------------------------------------------------*/ } else if (strcmp(what, "windowSize") == 0) { MainWindow::getInstance()->resizeWindow(arg1,arg2); /*------------------------------------------------------------------*/ } else if (strcmp(what, "minimumSize") == 0) { MainWindow::getInstance()->setMinimumSize(QSize(arg1,arg2)); /*------------------------------------------------------------------*/ } else if (strcmp(what, "maximumSize") == 0) { MainWindow::getInstance()->setMaximumSize(QSize(arg1,arg2)); /*------------------------------------------------------------------*/ } else if (strcmp(what, "windowColor") == 0) { if (arg1 > 255) { arg1 = 255; } else if(arg1 < 0) { arg1 = 255; } if (arg2 > 255) { arg2 = 255; } else if(arg2 < 0) { arg2 = 255; } if (arg3 > 255) { arg3 = 255; } else if(arg3 < 0) { arg3 = 255; } QPalette palette; QColor backgroundColor = QColor(arg1, arg2, arg3); palette.setColor(QPalette::Window, backgroundColor); MainWindow::getInstance()->setPalette(palette); /*------------------------------------------------------------------*/ } else if (strcmp(what, "windowTitle") == 0) { MainWindow::getInstance()->setWindowTitle(argString); /*------------------------------------------------------------------*/ } else if (strcmp(what, "windowModel") == 0) { QStringList acceptedValue; acceptedValue << "reset" << "stayOnTop" << "stayOnBottom" << "frameless" << "noTitleBar"; acceptedValue << "noButton" << "onlyMinimize" << "onlyMaximize" << "onlyClose" << "noMinimize"; acceptedValue << "noMaximize" << "noClose" << "helpButton"; if (acceptedValue.contains(argString)) { Qt::WindowFlags flags = MainWindow::getInstance()->windowFlags(); if (argString == "reset") { flags = Qt::Window; } else if (argString == "stayOnTop") { flags |= Qt::WindowStaysOnTopHint; } else if (argString == "stayOnBottom") { flags |= Qt::WindowStaysOnBottomHint; } else if (argString == "frameless") { flags |= Qt::FramelessWindowHint; } else if (argString == "noTitleBar") { flags = Qt::Window; flags |= Qt::CustomizeWindowHint; } else if (argString == "noButton") { flags = Qt::Window; flags |= Qt::WindowTitleHint; } else if (argString == "noClose") { flags = Qt::Window; flags |= Qt::WindowMinimizeButtonHint; } else if (argString == "onlyMaximize") { flags = Qt::Window; flags |= Qt::WindowMaximizeButtonHint; } else if (argString == "onlyClose") { flags = Qt::Window; flags |= Qt::WindowCloseButtonHint; } else if (argString == "noMinimize") { flags = Qt::Window; flags |= Qt::WindowMaximizeButtonHint; flags |= Qt::WindowCloseButtonHint; } else if (argString == "noMaximize") { flags = Qt::Window; flags |= Qt::WindowMinimizeButtonHint; flags |= Qt::WindowCloseButtonHint; } else if (argString == "noClose") { flags = Qt::Window; flags |= Qt::WindowMinimizeButtonHint; flags |= Qt::WindowMaximizeButtonHint; } else if (argString == "helpButton") { flags = Qt::Window; flags |= Qt::WindowContextHelpButtonHint; flags |= Qt::WindowCloseButtonHint; } MainWindow::getInstance()->setWindowFlags(flags); if (MainWindow::getInstance()->fullScreen()) { MainWindow::getInstance()->showFullScreen(); } else { MainWindow::getInstance()->showNormal(); } } else { QString info = "Accepted value for "; info.append(what); info.append(" :"); MainWindow::getInstance()->printToOutput(info.toStdString().c_str()); for( int i=0; i<acceptedValue.size(); ++i ) { MainWindow::getInstance()->printToOutput( QString("- ").append(acceptedValue.at(i)).toStdString().c_str() ); } } /*------------------------------------------------------------------*/ } else if (strcmp(what, "cursorPosition") == 0) { QCursor::setPos(arg1,arg2); /*------------------------------------------------------------------*/ } else if (strcmp(what, "clipboard") == 0) { QClipboard *clipboard = QApplication::clipboard(); clipboard->setText(argString); /*------------------------------------------------------------------*/ } else if (strcmp(what, "mkDir") == 0) { QStringList argSplit = argString.split("|",QString::KeepEmptyParts); if(argSplit.size() == 1) { MainWindow::getInstance()->printToOutput("[[Usage Example]]"); MainWindow::getInstance()->printToOutput("application:set(\"mkDir\",application:get(\"directory\",\"executable\")..\"|dirName\")"); } else { QDir dirPath = QDir::temp(); dirPath.setPath(argSplit.at(0)); dirPath.mkdir(argSplit.at(1)); } /*------------------------------------------------------------------*/ } else if (strcmp(what, "documentDirectory") == 0) { setDocumentsDirectory(argString.toStdString().c_str()); /*------------------------------------------------------------------*/ } else if (strcmp(what, "temporaryDirectory") == 0) { setTemporaryDirectory(argString.toStdString().c_str()); } else { // feel free to change this list QStringList acceptedWhat; acceptedWhat << "windowPosition(x,y)"; acceptedWhat << "windowSize(w,h)"; acceptedWhat << "minimumSize(w,h)"; acceptedWhat << "maximumSize(w,h)"; acceptedWhat << "windowColor(r,g,b)"; acceptedWhat << "windowTitle(text)"; acceptedWhat << "windowModel(type//help)"; acceptedWhat << "cursor(type//help)"; acceptedWhat << "cursorPosition(x,y)"; acceptedWhat << "clipboard(text)"; acceptedWhat << "mkdir(path|dirName//help)"; acceptedWhat << "documentDirectory(path)"; acceptedWhat << "temporaryDirectory(path)"; MainWindow::getInstance()->printToOutput("Accepted value for Desktop's application:set()"); for( int i=0; i<acceptedWhat.size(); ++i ) { MainWindow::getInstance()->printToOutput( QString("- ").append(acceptedWhat.at(i)).toStdString().c_str() ); } } }
void ApplicationManager::play(const char *gapp) { FILE *fd=fopen(gapp,"rb"); if (!fd) return; //No file/not openable fseek(fd,0,SEEK_END); long pksz=ftell(fd); if (pksz < 16) return; //Invalid file size struct { uint32_t flistOffset; uint32_t version; char signature[8]; } PACKED tlr; fseek(fd,pksz - 16,SEEK_SET); fread(&tlr,1,16,fd); tlr.version = BIGENDIAN4(tlr.version); tlr.flistOffset = BIGENDIAN4(tlr.flistOffset); if ((!strncmp(tlr.signature, "GiDeRoS", 7)) && (tlr.version == 0)) { glog_v("GAPP-ARCH: %s", gapp); gvfs_setZipFile(gapp); char *buffer = (char *) malloc(pksz - tlr.flistOffset); fseek(fd,tlr.flistOffset,SEEK_SET); fread(buffer, 1,pksz - tlr.flistOffset,fd); int offset = 0; while (offset < (pksz - tlr.flistOffset)) { int plen = strlen(buffer + offset); if (!plen) break; //End of list uint32_t foffset=PBULONG(buffer + offset + plen + 1); uint32_t fsize=PBULONG(buffer + offset + plen + 1+sizeof(uint32_t)); const char *norm = gpath_normalizeArchivePath(buffer + offset); gvfs_addFile(norm, 0, foffset, fsize); //glog_d("GAPP-FILE: %s,%d,%d", norm, foffset, fsize); offset += (plen + 1 + 2 * sizeof(uint32_t)); } free(buffer); } else glog_w("GAPP: Invalid signature/version"); fclose(fd); if (running_ == true) { Event event(Event::APPLICATION_EXIT); GStatus status; application_->broadcastEvent(&event, &status); running_ = false; } std::string gappfile=gapp; std::string projectName=gappfile.substr(0,gappfile.find_last_of('.')-1); const char* documentsDirectory; const char* temporaryDirectory; std::string dir = "/"; std::string documents = dir + "documents"+appPath; std::string temporary = dir + "temporary"; _mkdir(documents.c_str()); _mkdir(temporary.c_str()); glog_v("documents: %s", documents.c_str()); glog_v("temporary: %s", temporary.c_str()); mkdir(documents.c_str(), 0755); mkdir(temporary.c_str(), 0755); setDocumentsDirectory(documents.c_str()); setTemporaryDirectory(temporary.c_str()); setResourceDirectory(""); loadProperties(); loadLuaFiles(); }