void LibraryTreeWidget::importToLibrary() { QTreeWidgetItem* root = invisibleRootItem(); if (selectedItems().empty() == false) root = selectedItems().front(); QString path = QFileInfo(projectFileName_).path(); QDir dir(path); QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Import to Library"), path, tr("All Files (*.*)")); QStringList::Iterator it = fileNames.begin(); while(it != fileNames.end()) { QString fileName = dir.relativeFilePath(*it); if (isFileAlreadyImported(fileName)) { QMessageBox::information(this, tr("Gideros"), tr("The file '%1' cannot be added to the library because it is already a member of the library.").arg(fileName)); } else { QTreeWidgetItem *item = createFileItem(fileName); if (root == invisibleRootItem()) root->addChild(item); else root->insertChild(0, item); root->setExpanded(true); } ++it; } checkModification(); }
// Custom file list loaders. bool qtractorFileListView::loadListElement ( qtractorDocument *pDocument, QDomElement *pElement, QTreeWidgetItem *pItem ) { if (pItem && pItem->type() != GroupItem) return false; qtractorFileGroupItem *pParentItem = static_cast<qtractorFileGroupItem *> (pItem); qtractorSession *pSession = qtractorSession::getInstance(); if (pSession == NULL) return false; // Make it all relative to session directory... const QDir dir(pSession->sessionDir()); // Load children... for (QDomNode nChild = pElement->firstChild(); !nChild.isNull(); nChild = nChild.nextSibling()) { // Convert node to element... QDomElement eChild = nChild.toElement(); if (eChild.isNull()) continue; // Now it depends on item tag/type... if (eChild.tagName() == "group") { qtractorFileGroupItem *pGroupItem = new qtractorFileGroupItem(eChild.attribute("name")); if (pParentItem) pParentItem->addChild(pGroupItem); else addTopLevelItem(pGroupItem); if (!loadListElement(pDocument, &eChild, pGroupItem)) return false; pGroupItem->setOpen( qtractorDocument::boolFromText(eChild.attribute("open"))); } else if (eChild.tagName() == "file") { qtractorFileListItem *pFileItem = createFileItem( QDir::cleanPath(dir.absoluteFilePath(eChild.text()))); if (pFileItem) { pFileItem->setText(0, eChild.attribute("name")); if (pParentItem) pParentItem->addChild(pFileItem); else QTreeWidget::addTopLevelItem(pFileItem); if (pSession) pSession->files()->addFileItem(m_iFileType, pFileItem); } } } return true; }
// Add a new file item, optionally under a given group. qtractorFileListItem *qtractorFileListView::addFileItem ( const QString& sPath, qtractorFileGroupItem *pParentItem ) { qtractorSession *pSession = qtractorSession::getInstance(); if (pSession == NULL) return NULL; qtractorFileListItem *pFileItem = findFileItem(sPath); if (pFileItem == NULL) { pFileItem = createFileItem(sPath); if (pFileItem) { // Add to file/path registry... pSession->files()->addFileItem(m_iFileType, pFileItem); // Insert the new file item in place... if (pParentItem) { if (pParentItem->type() == GroupItem) { pParentItem->insertChild(0, pFileItem); } else { // It must be a group item... QTreeWidgetItem *pItem = static_cast<QTreeWidgetItem *> (pParentItem); pParentItem = groupItem(pParentItem); if (pParentItem) { const int iItem = pParentItem->indexOfChild(pItem); if (iItem >= 0) pParentItem->insertChild(iItem + 1, pFileItem); else pItem->addChild(pFileItem); } else { const int iItem = QTreeWidget::indexOfTopLevelItem(pItem); if (iItem >= 0) QTreeWidget::insertTopLevelItem(iItem + 1, pFileItem); else QTreeWidget::addTopLevelItem(pFileItem); } } } else QTreeWidget::addTopLevelItem(pFileItem); } } #if 0 if (pFileItem) QTreeWidget::setCurrentItem(pFileItem); #endif return pFileItem; }
void LibraryTreeWidget::addNewFile() { QDir dir = QFileInfo(projectFileName_).dir(); AddNewFileDialog addNewFile(dir.path(), this); while (1) { if (addNewFile.exec() == QDialog::Accepted) { QDir newdir = dir; if (newdir.cd(addNewFile.location()) == false) { QMessageBox::critical(this, tr("Gideros"), tr("Directory %1 does not exist.").arg(addNewFile.location())); continue; } QString filename = newdir.absoluteFilePath(addNewFile.fileName()); QFile file(filename); // check if it is exists or not if (file.exists() == true) { QMessageBox::critical(this, tr("Gideros"), tr("A file with the name %1 already exists on disk.").arg(filename)); continue; } // TODO: check if this file is already on the project. bunu bi dusun. library'deki ismimi yoksa diskteki ismimi onemlidir //QString relfilename = dir.relativeFilePath(filename); //if (isFileAlreadyImported(relfilename)) //{ // QMessageBox::information(this, tr("Gideros"), tr("The file '%1' cannot be added to the library because it is already a member of the library.").arg(filename)); // continue; //} // try to create an empty file if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { QMessageBox::critical(this, tr("Gideros"), tr("The file %1 could not be created.").arg(filename)); continue; } file.close(); // add file to the project QTreeWidgetItem* root = invisibleRootItem(); if (selectedItems().empty() == false) root = selectedItems().front(); QTreeWidgetItem *item = createFileItem(dir.relativeFilePath(filename)); if (root == invisibleRootItem()) root->addChild(item); else root->insertChild(0, item); root->setExpanded(true); break; } else { break; } } }
void LibraryTreeWidget::loadXml(const QString& projectFileName, const QDomDocument& doc) { dependencyGraph_.clear(); std::vector<std::pair<QString, QString> > dependencies; QTreeWidget::clear(); QDomElement root = doc.documentElement(); // read properties { properties_.clear(); QDomElement properties = root.firstChildElement("properties"); // graphics options if (!properties.attribute("scaleMode").isEmpty()) properties_.scaleMode = properties.attribute("scaleMode").toInt(); if (!properties.attribute("logicalWidth").isEmpty()) properties_.logicalWidth = properties.attribute("logicalWidth").toInt(); if (!properties.attribute("logicalHeight").isEmpty()) properties_.logicalHeight = properties.attribute("logicalHeight").toInt(); if (!properties.attribute("windowWidth").isEmpty()) properties_.windowWidth = properties.attribute("windowWidth").toInt(); if (!properties.attribute("windowHeight").isEmpty()) properties_.windowHeight = properties.attribute("windowHeight").toInt(); QDomElement imageScales = properties.firstChildElement("imageScales"); for(QDomNode n = imageScales.firstChild(); !n.isNull(); n = n.nextSibling()) { QDomElement scale = n.toElement(); if(!scale.isNull()) properties_.imageScales.push_back(std::make_pair(scale.attribute("suffix"), scale.attribute("scale").toDouble())); } if (!properties.attribute("orientation").isEmpty()) properties_.orientation = properties.attribute("orientation").toInt(); if (!properties.attribute("fps").isEmpty()) properties_.fps = properties.attribute("fps").toInt(); // iOS options if (!properties.attribute("retinaDisplay").isEmpty()) properties_.retinaDisplay = properties.attribute("retinaDisplay").toInt(); if (!properties.attribute("autorotation").isEmpty()) properties_.autorotation = properties.attribute("autorotation").toInt(); if (!properties.attribute("version").isEmpty()) properties_.version = properties.attribute("version"); if (!properties.attribute("version_code").isEmpty()) properties_.version_code = properties.attribute("version_code").toInt(); // input options if (!properties.attribute("mouseToTouch").isEmpty()) properties_.mouseToTouch = properties.attribute("mouseToTouch").toInt() != 0; if (!properties.attribute("touchToMouse").isEmpty()) properties_.touchToMouse = properties.attribute("touchToMouse").toInt() != 0; if (!properties.attribute("mouseTouchOrder").isEmpty()) properties_.mouseTouchOrder = properties.attribute("mouseTouchOrder").toInt(); // export options if (!properties.attribute("architecture").isEmpty()) properties_.architecture = properties.attribute("architecture").toInt(); if (!properties.attribute("android_template").isEmpty()) properties_.android_template = properties.attribute("android_template").toInt(); if (!properties.attribute("assetsOnly").isEmpty()) properties_.assetsOnly = properties.attribute("assetsOnly").toInt() != 0; if (!properties.attribute("iosDevice").isEmpty()) properties_.iosDevice = properties.attribute("iosDevice").toInt(); if (!properties.attribute("ios_bundle").isEmpty()) properties_.ios_bundle = properties.attribute("ios_bundle"); if (!properties.attribute("packageName").isEmpty()) properties_.packageName = properties.attribute("packageName"); if (!properties.attribute("osx_org").isEmpty()) properties_.osx_org = properties.attribute("osx_org"); if (!properties.attribute("osx_domain").isEmpty()) properties_.osx_domain = properties.attribute("osx_domain"); if (!properties.attribute("osx_bundle").isEmpty()) properties_.osx_bundle = properties.attribute("osx_bundle"); if (!properties.attribute("osx_category").isEmpty()) properties_.osx_category = properties.attribute("osx_category").toInt(); if (!properties.attribute("win_org").isEmpty()) properties_.win_org = properties.attribute("win_org"); if (!properties.attribute("win_domain").isEmpty()) properties_.win_domain = properties.attribute("win_domain"); if (!properties.attribute("winrt_org").isEmpty()) properties_.winrt_org = properties.attribute("winrt_org"); if (!properties.attribute("winrt_package").isEmpty()) properties_.winrt_package = properties.attribute("winrt_package"); if (!properties.attribute("html5_host").isEmpty()) properties_.html5_host = properties.attribute("html5_host"); if (!properties.attribute("encryptCode").isEmpty()) properties_.encryptCode = properties.attribute("encryptCode").toInt() != 0; if (!properties.attribute("encryptAssets").isEmpty()) properties_.encryptAssets = properties.attribute("encryptAssets").toInt() != 0; } QTreeWidgetItem* rootitem = createProjectItem(QFileInfo(projectFileName).completeBaseName()); addTopLevelItem(rootitem); std::deque<std::pair<QTreeWidgetItem*, QDomNode> > stack; stack.push_back(std::make_pair(static_cast<QTreeWidgetItem*>(0), doc.documentElement())); while (stack.empty() == false) { QTreeWidgetItem* parent = stack.front().first; QDomNode n = stack.front().second; stack.pop_front(); QTreeWidgetItem* item = 0; if (parent == 0) { item = rootitem;//invisibleRootItem(); } else { QDomElement e = n.toElement(); QString type = e.tagName(); if (type == "file") { QString file = e.hasAttribute("source") ? e.attribute("source") : e.attribute("file"); bool downsizing = e.hasAttribute("downsizing") && e.attribute("downsizing").toInt(); bool excludeFromExecution = e.hasAttribute("excludeFromExecution") && e.attribute("excludeFromExecution").toInt(); item = createFileItem(file, downsizing, excludeFromExecution); } else if (type == "folder") { QString name = e.attribute("name"); item = createFolderItem(name); } else if (type == "dependency") { QString from = e.attribute("from"); QString to = e.attribute("to"); dependencies.push_back(std::make_pair(from, to)); } if (item) parent->addChild(item); } QDomNodeList childNodes = n.childNodes(); for (int i = 0; i < childNodes.size(); ++i) stack.push_back(std::make_pair(item, childNodes.item(i))); } rootitem->setExpanded(true); for (std::size_t i = 0; i < dependencies.size(); ++i) dependencyGraph_.addDependency(dependencies[i].first, dependencies[i].second); projectFileName_ = projectFileName; xmlString_ = toXml().toString(); bool changed = isModifed_ == true; isModifed_ = false; if (changed) emit modificationChanged(isModifed_); }