QTreeWidgetItem *StudioPaletteTreeViewer::createItem(const TFilePath path) { StudioPalette *studioPalette = StudioPalette::instance(); QString itemName = toQString(TFilePath(path.getWideName())); QTreeWidgetItem *item = new QTreeWidgetItem((QTreeWidget *)0, QStringList(itemName)); if (studioPalette->isPalette(path)) { if (studioPalette->hasGlobalName(path)) item->setIcon(0, m_studioPaletteIcon); else item->setIcon(0, m_levelPaletteIcon); } else if (studioPalette->isFolder(path)) item->setIcon(0, m_folderIcon); item->setData(1, Qt::UserRole, toQString(path)); item->setFlags(item->flags() | Qt::ItemIsEditable); return item; }
void StudioPaletteTreeViewer::deleteItem(QTreeWidgetItem *item) { QTreeWidgetItem *parent = item->parent(); if (!parent) return; if (item->childCount() > 0) { QString question; question = tr("This folder is not empty. Delete anyway?"); int ret = DVGui::MsgBox(question, QObject::tr("Yes"), QObject::tr("No")); if (ret == 0 || ret == 2) return; } TFilePath path = getItemPath(item); StudioPalette *studioPalette = StudioPalette::instance(); if (studioPalette->isFolder(path)) { try { StudioPaletteCmd::deleteFolder(path); } catch (TException &e) { error("Can't delete folder: " + QString(::to_string(e.getMessage()).c_str())); } catch (...) { error("Can't delete folder"); } } else { assert(studioPalette->isPalette(path)); try { StudioPaletteCmd::deletePalette(path); } catch (TException &e) { error("Can't delete palette: " + QString(::to_string(e.getMessage()).c_str())); } catch (...) { error("Can't delete palette"); } } refreshItem(parent); }
void StudioPaletteTreeViewer::contextMenuEvent(QContextMenuEvent *event) { TFilePath path = getCurrentFolderPath(); StudioPalette *studioPalette = StudioPalette::instance(); // Menu' per la selezione singola QList<QTreeWidgetItem *> items = selectedItems(); int count = items.size(); if (count == 1) { // Verify if click position is in a row containing an item. QRect rect = visualItemRect(currentItem()); if (!QRect(0, rect.y(), width(), rect.height()).contains(event->pos())) return; bool isFolder = (studioPalette->isFolder(path)); QMenu menu(this); if (isFolder) { createMenuAction(menu, "", tr("New Palette"), "addNewPalette()"); createMenuAction(menu, "", tr("New Folder"), "addNewFolder()"); } if (studioPalette->isFolder(path) && studioPalette->getLevelPalettesRoot() != path && studioPalette->getProjectPalettesRoot() != path) { menu.addSeparator(); createMenuAction(menu, "", tr("Delete Folder"), "deleteItems()"); } else if (studioPalette->isPalette(path)) { if (m_studioPaletteHandle->getPalette()) { createMenuAction(menu, "MI_LoadIntoCurrentPalette", tr("Load into Current Palette"), "loadInCurrentPalette()"); createMenuAction(menu, "MI_AdjustCurrentLevelToPalette", tr("Adjust Current Level to This Palette"), "loadInCurrentPaletteAndAdaptLevel()"); createMenuAction(menu, "MI_MergeToCurrentPalette", tr("Merge to Current Palette"), "mergeToCurrentPalette()"); if (!m_studioPaletteHandle->getPalette()->isLocked()) { createMenuAction(menu, "MI_ReplaceWithCurrentPalette", tr("Replace with Current Palette"), "replaceCurrentPalette()"); menu.addSeparator(); createMenuAction(menu, "MI_DeletePalette", tr("Delete Palette"), "deleteItems()"); } } if (!studioPalette->hasGlobalName(path)) { menu.addSeparator(); createMenuAction(menu, "", tr("Convert to Studio Palette and Overwrite"), "convertToStudioPalette()"); } } if (isFolder) { menu.addSeparator(); createMenuAction(menu, "", tr("Search for Palettes"), "searchForPalette()"); } menu.exec(event->globalPos()); return; } // Menu' per la selezione multipla // Verify if click position is in a row containing an item. bool areAllPalette = true; bool isClickInSelection = false; int i; for (i = 0; i < count; i++) { QTreeWidgetItem *item = items[i]; QRect rect = visualItemRect(item); if (QRect(0, rect.y(), width(), rect.height()).contains(event->pos())) isClickInSelection = true; TFilePath path = getItemPath(item); if (studioPalette->isFolder(path)) areAllPalette = false; } if (!isClickInSelection) return; QMenu menu(this); if (areAllPalette) { createMenuAction(menu, "", tr("Load into Current Palette"), "loadInCurrentPalette()"); createMenuAction(menu, "", tr("Merge to Current Palette"), "mergeToCurrentPalette()"); createMenuAction(menu, "", tr("Replace with Current Palette"), "replaceCurrentPalette()"); menu.addSeparator(); } createMenuAction(menu, "", tr("Delete"), "deleteItems()"); menu.exec(event->globalPos()); }