// 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 filePopup(Widget w, XEvent *event, String *params, Cardinal *num_params) { Window root, child, win; Widget button; FileWindowRec *fw; int x, y, x_win, y_win; unsigned int mask; int item; fw = findFileWidgetByForm(w); if (!fw || fw->scrolled == None) return; win = XtWindow(fw->icon_box); XQueryPointer(dpy, win, &root, &child, &x, &y, &x_win, &y_win, &mask); if (child != None) { button = XtWindowToWidget(dpy, child); item = findFileItem(fw, button); XtVaSetValues(fw->form, XmNuserData, (XtPointer) item, NULL); fileSelect(fw, item); if (S_ISDIR(fw->files[item]->stats.st_mode)) { XmMenuPosition(fw->dirPopup, (XButtonPressedEvent *) event); XtManageChild(fw->dirPopup); } else if (fw->files[item]->stats.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)) { XmMenuPosition(fw->execPopup, (XButtonPressedEvent *) event); XtManageChild(fw->execPopup); } else { XmMenuPosition(fw->filePopup, (XButtonPressedEvent *) event); XtManageChild(fw->filePopup); } } else { XmMenuPosition(fw->formPopup, (XButtonPressedEvent *) event); XtManageChild(fw->formPopup); } }
// Make as current selection an existing file item. qtractorFileListItem *qtractorFileListView::selectFileItem ( const QString& sPath, int iChannel ) { qtractorFileListItem *pFileItem = findFileItem(sPath); if (pFileItem == NULL) return NULL; // Shall we go deep further intto a channel item? if (iChannel > 0) { // Open file item... pFileItem->setOpen(true); // Select channel item... const int iChildCount = pFileItem->childCount(); for (int i = 0; i < iChildCount; ++i) { QTreeWidgetItem *pItem = pFileItem->child(i); if (pItem->type() == qtractorFileListView::ChannelItem) { qtractorFileChannelItem *pChannelItem = static_cast<qtractorFileChannelItem *> (pItem); if (pChannelItem && pChannelItem->channel() == iChannel) { QTreeWidget::setCurrentItem(pChannelItem); return pFileItem; } } } } // Open file group, if any... qtractorFileGroupItem *pGroupItem = pFileItem->groupItem(); if (pGroupItem) pGroupItem->setOpen(true); // Nothing else than select file item... QTreeWidget::setCurrentItem(pFileItem); return pFileItem; }