void PanelTabBar::layoutTabs() { for (int i = 0; i < count(); i++) { setTabText(i, squeeze(DISPLAY(((ListPanel*)tabData(i).toLongLong())->virtualPath()), i)); emit ((ListPanel*)tabData(i).toLongLong())->refreshPathLabel(); } }
void PlaylistTabBar::TabMoved() { QList<int> ids; for (int i = 0; i < count(); ++i) { ids << tabData(i).toInt(); } emit PlaylistOrderChanged(ids); }
void TabBar::mousePressEvent(QMouseEvent *event) { switch(event->button()) { case Qt::LeftButton: m_startDragPos = event->pos(); PlusTabBar::mousePressEvent(event); break; case Qt::MidButton: { int tab = tabAt(event->pos()); if(tab != -1) emit tabCloseRequested(tab); break; } case Qt::RightButton: { int tab = tabAt(event->pos()); if(tab == -1 || tabData(tab) == HOME_TAB) break; m_cur_menu_tab = tab; m_menu->exec(event->globalPos()); break; } default: PlusTabBar::mousePressEvent(event); break; } }
int PlaylistTabBar::id_of(int index) const { if (index < 0 || index >= count()) { qLog(Warning) << "Playlist tab index requested is out of bounds!"; return 0; } return tabData(index).toInt(); }
void TabBar::mouseMoveEvent(QMouseEvent *event) { if (event->buttons() == Qt::LeftButton) { #if QT_VERSION >= 0x040500 int diffX = event->pos().x() - m_dragStartPos.x(); int diffY = event->pos().y() - m_dragStartPos.y(); #endif if ((event->pos() - m_dragStartPos).manhattanLength() > QApplication::startDragDistance() #if QT_VERSION >= 0x040500 && diffX < 3 && diffX > -3 && diffY < -10 #endif ) { QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; QList<QUrl> urls; int index = tabAt(event->pos()); QUrl url = tabData(index).toUrl(); urls.append(url); mimeData->setUrls(urls); mimeData->setText(tabText(index)); mimeData->setData(QLatin1String("action"), "tab-reordering"); drag->setMimeData(mimeData); drag->exec(); } } QTabBar::mouseMoveEvent(event); }
int PlaylistTabBar::index_of(int id) const { for (int i = 0; i < count(); ++i) { if (tabData(i).toInt() == id) { return i; } } return -1; }
void PanelTabBar::updateTab(ListPanel *panel) { // find which is the correct tab for (int i = 0; i < count(); i++) { if ((ListPanel*)tabData(i).toLongLong() == panel) { setTabText(i, squeeze(DISPLAY(panel->virtualPath()), i)); break; } } }
void PlaylistTabBar::Rename() { if (menu_index_ == -1) return; QString name = tabText(menu_index_); name = QInputDialog::getText(this, tr("Rename playlist"), tr("Enter a new name for this playlist"), QLineEdit::Normal, name); if (name.isNull()) return; emit Rename(tabData(menu_index_).toInt(), name); }
void TabBar::mouseDoubleClickEvent(QMouseEvent *event) { if(event->button() != Qt::LeftButton) return PlusTabBar::mouseDoubleClickEvent(event); int tab = tabAt(event->pos()); if(tab == -1 || tabData(tab) == HOME_TAB) return PlusTabBar::mouseDoubleClickEvent(event); m_cur_menu_tab = tab; renameTab(); }
void YaTabBarBase::updateFading() { updateHiddenTabActions(); for (int i = 0; i < count(); i++) { if (tabData(i).toBool()) { startFading(); return; } } stopFading(); }
void TabBarWidget::setTabProperty(int index, const QString &key, const QVariant &value) { if (index < 0 || index >= count()) { return; } QObject *window = qvariant_cast<QObject*>(tabData(index)); if (window) { window->setProperty(key.toLatin1(), value); } }
void TabBarWidget::updateTabs(int index) { if (index < 0 && sender() && sender()->inherits(QStringLiteral("Otter::Window").toLatin1())) { for (int i = 0; i < count(); ++i) { if (sender() == qvariant_cast<QObject*>(tabData(i))) { index = i; break; } } } const int limit = ((index >= 0) ? (index + 1) : count()); for (int i = ((index >= 0) ? index : 0); i < limit; ++i) { const bool isLoading = getTabProperty(i, QLatin1String("isLoading"), false).toBool(); QLabel *label = qobject_cast<QLabel*>(tabButton(i, QTabBar::LeftSide)); if (label) { if (isLoading) { if (!label->movie()) { QMovie *movie = new QMovie(QLatin1String(":/icons/loading.gif"), QByteArray(), label); movie->start(); label->setMovie(movie); } } else { if (label->movie()) { label->movie()->deleteLater(); label->setMovie(NULL); } label->setPixmap(getTabProperty(i, QLatin1String("icon"), QIcon(getTabProperty(i, QLatin1String("isPrivate"), false).toBool() ? ":/icons/tab-private.png" : ":/icons/tab.png")).value<QIcon>().pixmap(16, 16)); } } } showPreview(tabAt(mapFromGlobal(QCursor::pos()))); }
void PlaylistTabBar::Close() { if (menu_index_ == -1) return; // Just hide the tab from the UI - don't delete it completely (it can still // be resurrected from the Playlists tab). emit Close(tabData(menu_index_).toInt()); // Select the nearest tab. if (menu_index_ > 1) { setCurrentIndex(menu_index_ - 1); } // Update playlist tab order/visibility TabMoved(); }
void pTabBar::dropEvent( QDropEvent* event ) { if ( !event->mimeData()->hasUrls() ) { // get drop tab int ni = tabAt( event->pos() ); // if get it if ( ni != -1 ) { // get original tab infos int oi = event->mimeData()->data( "x-tabindex" ).toInt(); QVariant otd = tabData( oi ); QIcon oti = tabIcon( oi ); QString ott = tabText( oi ); QColor ottc = tabTextColor( oi ); QString ottt = tabToolTip( oi ); QString otwt = tabWhatsThis( oi ); // remove original tab removeTab( oi ); // insert new one with correct infos int i = insertTab( ni, oti, ott ); setTabData( i, otd ); setTabTextColor( i, ottc ); setTabToolTip( i, ottt ); setTabWhatsThis( i, otwt ); //accept event->acceptProposedAction(); // emit signal emit tabDropped( oi, i ); // set new current index setCurrentIndex( i ); } } else emit urlsDropped( event->mimeData()->urls () ); // default event QTabBar::dropEvent( event ); }
void TabBar::mouseMoveEvent(QMouseEvent *event) { if (event->buttons() == Qt::LeftButton && (event->pos() - m_dragStartPos).manhattanLength() > QApplication::startDragDistance()) { QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; QList<QUrl> urls; int index = tabAt(event->pos()); QUrl url = tabData(index).toUrl(); urls.append(url); mimeData->setUrls(urls); mimeData->setText(tabText(index)); mimeData->setData(QLatin1String("action"), "tab-reordering"); drag->setMimeData(mimeData); drag->exec(); } QTabBar::mouseMoveEvent(event); }
QVariant TabBarWidget::getTabProperty(int index, const QString &key, const QVariant &defaultValue) const { if (index < 0 || index >= count()) { return defaultValue; } QObject *window = qvariant_cast<QObject*>(tabData(index)); if (window) { const QVariant value = window->property(key.toLatin1()); if (!value.isNull()) { return value; } } return defaultValue; }
void PlaylistTabBar::CurrentIndexChanged(int index) { if (!suppress_current_changed_) emit CurrentIdChanged(tabData(index).toInt()); }
ListPanel* PanelTabBar::getPanel(int tabIdx) { QVariant v = tabData(tabIdx); if (v.isNull()) return 0; return (ListPanel*)v.toLongLong(); }
void PanelTabBar::duplicateTab() { int id = currentIndex(); emit newTab(((ListPanel*)tabData(id).toLongLong())->virtualPath()); }
int PlaylistTabBar::current_id() const { if (currentIndex() == -1) return -1; return tabData(currentIndex()).toInt(); }
void PlaylistTabBar::Save() { if (menu_index_ == -1) return; emit Save(tabData(menu_index_).toInt()); }
void PlaylistTabBar::Close() { if (menu_index_ == -1) return; const int playlist_id = tabData(menu_index_).toInt(); const int active_id = manager_->active_id(); qLog(Debug) << "Close : active_id = " << active_id << " and playlist_id = " << playlist_id; QSettings s; s.beginGroup(kSettingsGroup); const bool ask_for_delete = s.value("warn_close_playlist", true).toBool(); bool check_delete = (ask_for_delete && !manager_->IsPlaylistFavorite(playlist_id) && !manager_->playlist(playlist_id)->GetAllSongs().empty()); bool check_active = (active_id == playlist_id && manager_->app()->player_locked_); qLog(Debug) << "Close : check_delete = " << check_delete << " and check_active = " << check_active; if (check_delete || check_active) { QMessageBox confirmation_box; confirmation_box.setWindowIcon(QIcon(":/icon.png")); confirmation_box.setWindowTitle(tr("Remove playlist")); confirmation_box.setIcon(QMessageBox::Question); confirmation_box.setText( tr("You are about to remove a playlist which is not part of your " "favorite playlists: " "the playlist will be deleted (this action cannot be undone). \n" "Are you sure you want to continue?")); confirmation_box.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel); QCheckBox dont_prompt_again(tr("Warn me when closing a playlist tab"), &confirmation_box); dont_prompt_again.setChecked(ask_for_delete); dont_prompt_again.blockSignals(true); dont_prompt_again.setToolTip( tr("This option can be changed in the \"Behavior\" preferences")); QGridLayout* grid = qobject_cast<QGridLayout*>(confirmation_box.layout()); QDialogButtonBox* buttons = confirmation_box.findChild<QDialogButtonBox*>(); if (grid && buttons) { const int index = grid->indexOf(buttons); int row, column, row_span, column_span = 0; grid->getItemPosition(index, &row, &column, &row_span, &column_span); QLayoutItem* buttonsItem = grid->takeAt(index); grid->addWidget(&dont_prompt_again, row, column, row_span, column_span, Qt::AlignLeft | Qt::AlignTop); grid->addItem(buttonsItem, ++row, column, row_span, column_span); } else { confirmation_box.addButton(&dont_prompt_again, QMessageBox::ActionRole); } if (confirmation_box.exec() != QMessageBox::Yes) { return; } // If user changed the pref, save the new one if (dont_prompt_again.isChecked() != ask_for_delete) { s.setValue("warn_close_playlist", dont_prompt_again.isChecked()); } } // Close the playlist. If the playlist is not a favorite playlist, it will be // deleted, as it will not be visible after being closed. Otherwise, the tab // is closed but the playlist still exists and can be resurrected from the // "Playlists" tab. emit Close(playlist_id); // Select the nearest tab. if (menu_index_ > 1) { setCurrentIndex(menu_index_ - 1); } // Update playlist tab order/visibility TabMoved(); }
void PlaylistTabBar::RenameInline() { emit Rename(tabData(menu_index_).toInt(), rename_editor_->text()); HideEditor(); }
void YaTabBarBase::drawTab(QPainter* painter, int index, const QRect& tabRect) { QStyleOptionTabV2 tab = getStyleOption(index); if (!(tab.state & QStyle::State_Enabled)) { tab.palette.setCurrentColorGroup(QPalette::Disabled); } // Don't bother drawing a tab if the entire tab is outside of the visible tab bar. if (tabRect.right() < 0 || tabRect.left() > width() || tabRect.bottom() < 0 || tabRect.top() > height() || tabRect.width() < 3) { return; } bool isCurrent = index == currentIndex(); bool isHovered = tabHovered(index); bool isHighlighted = tabData(index).toBool(); QColor backgroundColor = this->tabBackgroundColor(); if (isCurrent) { #ifndef WIDGET_PLUGIN backgroundColor = Ya::VisualUtil::editAreaColor(); #else backgroundColor = Qt::white; #endif } else if (isHovered) { #ifndef WIDGET_PLUGIN backgroundColor = Ya::VisualUtil::tabHighlightColor(); #else backgroundColor = Qt::gray; #endif } else if (isHighlighted) { backgroundColor = highlightColor(); } if (backgroundColor.isValid()) { painter->fillRect(tabRect, backgroundColor); } painter->save(); #ifndef WIDGET_PLUGIN painter->setPen(Ya::VisualUtil::rosterTabBorderColor()); #endif bool drawLeftLine = tabRect.left() != rect().left(); bool drawRightLine = true; // tabRect.right() != rect().right() || rect().width() < maximumWidth(); switch (shape()) { case YaTabBarBase::RoundedSouth: case YaTabBarBase::TriangularSouth: if (isMultiLine()) drawRightLine = tabRect.right() + 1 < maximumWidth(); if (!isCurrent || isMultiLine()) painter->drawLine(tabRect.topLeft(), tabRect.topRight()); if (isCurrent) { if (drawLeftLine && !isMultiLine()) painter->drawLine(tabRect.topLeft(), tabRect.bottomLeft()); if (drawRightLine) painter->drawLine(tabRect.topRight(), tabRect.bottomRight()); } else { if (isHovered || isMultiLine()) { if (currentIndex() != (index - 1) && !isMultiLine()) if (drawLeftLine) painter->drawLine(tabRect.topLeft(), tabRect.bottomLeft()); if (currentIndex() != (index + 1) || isMultiLine()) if (drawRightLine) painter->drawLine(tabRect.topRight(), tabRect.bottomRight()); } } break; default: Q_ASSERT(false); break; } painter->restore(); tabIcon(index).paint(painter, tabIconRect(index)); QRect textRect = tabTextRect(index); QString text = tabText(index); if (drawTabNumbers_ && index < 10) { int numberToDraw = index + 1; if (numberToDraw > 9) { numberToDraw = 0; } painter->save(); painter->setPen(Qt::gray); QString numberToDrawText = QString::number(numberToDraw) + " "; painter->drawText(textRect, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextSingleLine, numberToDrawText); textRect.adjust(fontMetrics().width(numberToDrawText), 0, 0, 0); painter->restore(); } painter->drawText(textRect, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextSingleLine, text); #ifndef WIDGET_PLUGIN if (textWidth(text) > textRect.width() && backgroundColor.isValid()) { Ya::VisualUtil::drawTextFadeOut(painter, textRect.adjusted(1, 0, 1, 0), backgroundColor, 15); } #endif if (isMultiLine()) { QPixmap shadow(tabShadow(isCurrent)); QRect r(tabRect); r.setHeight(shadow.height()); painter->drawTiledPixmap(r, shadow); } }
void TabBarWidget::updateTabs(int index) { if (index < 0 && sender() && sender()->inherits(QStringLiteral("Otter::Window").toLatin1())) { for (int i = 0; i < count(); ++i) { if (sender() == qvariant_cast<QObject*>(tabData(i))) { index = i; break; } } } const QSize size = tabSizeHint(count() - 1); const int limit = ((index >= 0) ? (index + 1) : count()); const bool canResize = (m_tabSize > 0); const bool isHorizontal = (shape() == QTabBar::RoundedNorth || shape() == QTabBar::RoundedSouth); const bool isNarrow = ((isHorizontal ? size.width() : size.height()) < 60); for (int i = ((index >= 0) ? index : 0); i < limit; ++i) { const bool isLoading = getTabProperty(i, QLatin1String("isLoading"), false).toBool(); QLabel *label = qobject_cast<QLabel*>(tabButton(i, QTabBar::LeftSide)); if (label) { if (isLoading) { if (!label->movie()) { QMovie *movie = new QMovie(QLatin1String(":/icons/loading.gif"), QByteArray(), label); movie->start(); label->setMovie(movie); } } else { if (label->movie()) { label->movie()->deleteLater(); label->setMovie(NULL); } label->setPixmap(getTabProperty(i, QLatin1String("icon"), QIcon(getTabProperty(i, QLatin1String("isPrivate"), false).toBool() ? ":/icons/tab-private.png" : ":/icons/tab.png")).value<QIcon>().pixmap(16, 16)); } } if (canResize) { QWidget *button = tabButton(i, QTabBar::RightSide); if (button) { button->setVisible((!isNarrow || (i == currentIndex())) && !getTabProperty(i, QLatin1String("isPinned"), false).toBool()); } } } showPreview(tabAt(mapFromGlobal(QCursor::pos()))); }