FilesystemWidget::FilesystemWidget(QWidget *parent) { setParent(parent); // Create the toolbar QToolBar *fsToolbar = new QToolBar(); fsToolbar->setMovable(false); goUpAction = new QAction(IconFactory::fromTheme("go-up"), tr("Go up"), this); connect(goUpAction, SIGNAL(triggered()), this, SLOT(goUp())); fsToolbar->addAction(goUpAction); goHomeAction = new QAction(IconFactory::fromTheme("go-home"), tr("Go to the home folder"), this); connect(goHomeAction, SIGNAL(triggered()), this, SLOT(goHome())); fsToolbar->addAction(goHomeAction); // TODO: use placeholderText in Qt 4.7. filterEdit = new QLineEdit(); QLabel* filterLabel = new QLabel(tr("Filter:")); filterLabel->setContentsMargins(5, 0, 5, 0); fsToolbar->addSeparator(); fsToolbar->addWidget(filterLabel); fsToolbar->addWidget(filterEdit); connect(filterEdit, SIGNAL(textChanged(QString)), this, SLOT(setNameFilter(QString))); // Create the filesystem view fsWidgetModel = new QFileSystemModel(); fsWidgetModel->setNameFilterDisables(false); fsWidgetModel->setFilter(QDir::AllDirs|QDir::Files|QDir::NoDotAndDotDot); fsListView = new QListView(); fsListView->setSelectionMode(QAbstractItemView::ExtendedSelection); fsListView->setDragEnabled(true); fsListView->setModel(fsWidgetModel); // We shall use this to filter available file extensions from Phonon //fsWidgetModel->setFilter(getPhononExtensions()); connect(fsWidgetModel, SIGNAL(rootPathChanged(QString)), this, SLOT(pathChanged())); connect(fsListView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(doubleClickAt(QModelIndex))); // Create a new horizontal box QVBoxLayout *vlayout = new QVBoxLayout(); vlayout->addWidget(fsToolbar); vlayout->addWidget(fsListView); goHome(); this->setLayout(vlayout); }
/// @brief Constructor CollectionTreeWidget::CollectionTreeWidget() { setColumnCount(1); header()->hide(); // hide headers setDragEnabled(true); setAcceptDrops(true); setSelectionMode(QAbstractItemView::ExtendedSelection); service = new CollectionService(); // Add songs that currently exist on database QSqlTableModel *artistModel = service->artistModel(); artistModel->select(); // TODO: verify if we can put fetchmore() inside the for loop. // TODO: put this task in background... URGENT while (artistModel->canFetchMore()) artistModel->fetchMore(); int total = artistModel->rowCount(); for (int i = 0; i < total; i++) { QString artist = artistModel->record(i).value(artistModel->fieldIndex("name")).toString(); unsigned int id = artistModel->record(i).value(artistModel->fieldIndex("id")).toInt(); addArtist(artist, id); } delete artistModel; /* * TODO: modify the slots in order to add only the artist, not the music. * The album and song must be shown only if the node is already expanded. */ connect(service, SIGNAL(songAdded(Music*)), this, SLOT(addMusic(Music*))); connect(service, SIGNAL(songRemoved(unsigned int)), this, SLOT(removeMusic(uint))); connect(this, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(doubleClickAt(QModelIndex))); connect(this, SIGNAL(expanded(QModelIndex)), this, SLOT(showChildrenOf(QModelIndex))); /* * We shall emit those signals to show or hide the widget that will * give the feedback that the collection is being scanned. */ connect(service, SIGNAL(scanning()), this, SIGNAL(scanning())); connect(service, SIGNAL(listUpdated()), this, SIGNAL(listUpdated())); // Start service to find new songs and remove the inexistent ones service->start(QThread::LowestPriority); }
/* void doubleClick (in nsISupports aNode, in long x, in long y, in long button); */ NS_IMETHODIMP nsNativeMouse::DoubleClick(nsISupports *aNode, PRInt32 x, PRInt32 y) { AccessibleDocumentWrapper doc(aNode); void* windowHandle = doc.getWindowHandle(); LOG(DEBUG) << "Have doubleClick window handle: " << windowHandle; if (!windowHandle) { LOG(WARN) << "No window handle!"; return NS_ERROR_NULL_POINTER; } LOG(DEBUG) << "Calling doubleClickAt: " << x << ", " << y; WD_RESULT res = doubleClickAt(windowHandle, x, y); LOG(DEBUG) << "Result was: " << (res == WD_SUCCESS ? "ok" : "fail"); return res == WD_SUCCESS ? NS_OK : NS_ERROR_FAILURE; }