Modified:
/trunk/quarkplayer-plugins/FileBrowser/FileBrowserWidget.cpp
/trunk/quarkplayer-plugins/MainWindow/IMainWindow.h
/trunk/quarkplayer-plugins/MainWindow/MainWindow.cpp
/trunk/quarkplayer-plugins/MainWindow/MainWindow.h
/trunk/quarkplayer-plugins/MainWindow/MockMainWindow.cpp
/trunk/quarkplayer-plugins/MainWindow/MockMainWindow.h
/trunk/quarkplayer-plugins/Playlist/PlaylistWidget.cpp
/trunk/quarkplayer-plugins/VideoWidget/VideoWidgetPlugin.cpp
=======================================
--- /trunk/quarkplayer-plugins/FileBrowser/FileBrowserWidget.cpp Wed Feb 23
10:23:21 2011
+++ /trunk/quarkplayer-plugins/FileBrowser/FileBrowserWidget.cpp Fri Feb 25
10:11:17 2011
@@ -124,7 +124,6 @@
FileBrowserWidget::~FileBrowserWidget() {
_mainWindow->removeDockWidget(_dockWidget);
- _mainWindow->resetBrowserDockWidget();
}
void FileBrowserWidget::createToolBar() {
=======================================
--- /trunk/quarkplayer-plugins/MainWindow/IMainWindow.h Sun Feb 20 17:34:30
2011
+++ /trunk/quarkplayer-plugins/MainWindow/IMainWindow.h Fri Feb 25 10:11:17
2011
@@ -53,13 +53,17 @@
virtual QMenu * menuHelp() const = 0;
virtual void addBrowserDockWidget(QDockWidget * dockWidget) = 0;
- virtual void resetBrowserDockWidget() = 0;
virtual void addVideoDockWidget(QDockWidget * dockWidget) = 0;
- virtual void resetVideoDockWidget() = 0;
virtual void addPlaylistDockWidget(QDockWidget * dockWidget) = 0;
- virtual void resetPlaylistDockWidget() = 0;
+
+ /** HACK */
+ virtual QPair<QTabBar *, int> findDockWidgetTab(QDockWidget * dockWidget)
{
+ Q_UNUSED(dockWidget);
+ QPair<QTabBar *, int> result;
+ return result;
+ }
signals:
=======================================
--- /trunk/quarkplayer-plugins/MainWindow/MainWindow.cpp Thu Feb 24
18:17:38 2011
+++ /trunk/quarkplayer-plugins/MainWindow/MainWindow.cpp Fri Feb 25
10:11:17 2011
@@ -440,38 +440,101 @@
if (lastDockWidget) {
tabifyDockWidget(lastDockWidget, dockWidget);
}
+
+ //Others use a QTimer otherwise not all tabs inside QTabBar are detected
+ //I prefer to run processEvents()
+ //See
http://developer.qt.nokia.com/faq/answer/how_can_i_check_which_tab_is_the_current_one_in_a_tabbed_qdockwidget
+ //See
http://ariya.blogspot.com/2007/04/tab-bar-with-roundednorth-for-tabbed.html
+ QApplication::instance()->processEvents();
+ hackDockWidgetTabBar();
}
}
+
+void MainWindow::hackDockWidgetTabBar() {
+ QList<QTabBar *> tabBars = findChildren<QTabBar *>();
+ foreach (QTabBar * tabBar, tabBars) {
+
+ //Check the QTabBar is for a QDockWidget: the parent should be the main
window
+ //This test is definitely not enough :/
+ if (tabBar->parentWidget() == this) {
+
+ //Do this first otherwise tabBar->count() is fucked
+ tabBar->setTabsClosable(true);
+
+ disconnect(tabBar, SIGNAL(tabCloseRequested(int)), this,
SLOT(tabCloseRequested(int)));
+ connect(tabBar, SIGNAL(tabCloseRequested(int)),
SLOT(tabCloseRequested(int)));
+ }
+ }
+}
+
+QDockWidget * MainWindow::findDockWidget(QTabBar * tabBar, int index) {
+ Q_ASSERT(tabBar);
+
+ //Internal Qt implementation already use tabData with QVariant being
+ //a quintptr which is in fact a QWidget pointer!
+ //See
http://qt.gitorious.org/qt/qt/blobs/4.7/src/gui/widgets/qdockarealayout.cpp
+ //This is just perfect for us!
+ //Assuming qulonglong (QVariant::toULongLong()) and quintptr are
equivalent
+ QVariant tmp = tabBar->tabData(index);
+ QDockWidget * dockWidget = reinterpret_cast<QDockWidget
*>(tmp.toULongLong());
+ Q_ASSERT(dockWidget);
+ ///
+
+ return dockWidget;
+}
+
+QPair<QTabBar *, int> MainWindow::findDockWidgetTab(QDockWidget *
dockWidget) {
+ QPair<QTabBar *, int> result;
+
+ QList<QTabBar *> tabBars = findChildren<QTabBar *>();
+ foreach (QTabBar * tabBar, tabBars) {
+
+ //Check the QTabBar is for a QDockWidget: the parent should be the main
window
+ //This test is definitely not enough :/
+ if (tabBar->parentWidget() == this) {
+ for (int i = 0; i < tabBar->count(); i++) {
+ QDockWidget * tmp = findDockWidget(tabBar, i);
+ if (dockWidget == tmp) {
+
+ //Found the right QDockWidget
+ result.first = tabBar;
+ result.second = i;
+ return result;
+ }
+ }
+ }
+ }
+
+ //Cannot be in this state
+ Q_ASSERT(false);
+
+ return result;
+}
+
+void MainWindow::tabCloseRequested(int index) {
+ QTabBar * tabBar = qobject_cast<QTabBar *>(sender());
+ QDockWidget * dockWidget = findDockWidget(tabBar, index);
+ removeDockWidget(dockWidget);
+ //FIXME needed? dockWidget->close();
+}
void MainWindow::addBrowserDockWidget(QDockWidget * dockWidget) {
static QDockWidget * lastDockWidget = NULL;
addDockWidget(Qt::LeftDockWidgetArea, lastDockWidget, dockWidget);
lastDockWidget = dockWidget;
}
-
-void MainWindow::resetBrowserDockWidget() {
- addBrowserDockWidget(NULL);
-}
void MainWindow::addVideoDockWidget(QDockWidget * dockWidget) {
static QDockWidget * lastDockWidget = NULL;
addDockWidget(Qt::RightDockWidgetArea, lastDockWidget, dockWidget);
lastDockWidget = dockWidget;
}
-
-void MainWindow::resetVideoDockWidget() {
- addVideoDockWidget(NULL);
-}
void MainWindow::addPlaylistDockWidget(QDockWidget * dockWidget) {
static QDockWidget * lastDockWidget = NULL;
addDockWidget(Qt::RightDockWidgetArea, lastDockWidget, dockWidget);
lastDockWidget = dockWidget;
}
-
-void MainWindow::resetPlaylistDockWidget() {
- addPlaylistDockWidget(NULL);
-}
void MainWindow::currentMediaObjectChanged(Phonon::MediaObject *
mediaObject) {
foreach (Phonon::MediaObject * tmp, quarkPlayer().mediaObjectList()) {
=======================================
--- /trunk/quarkplayer-plugins/MainWindow/MainWindow.h Thu Feb 24 10:33:59
2011
+++ /trunk/quarkplayer-plugins/MainWindow/MainWindow.h Fri Feb 25 10:11:17
2011
@@ -65,13 +65,14 @@
QMenu * menuHelp() const;
void addBrowserDockWidget(QDockWidget * dockWidget);
- void resetBrowserDockWidget();
void addVideoDockWidget(QDockWidget * dockWidget);
- void resetVideoDockWidget();
void addPlaylistDockWidget(QDockWidget * dockWidget);
- void resetPlaylistDockWidget();
+
+
+ /** HACK */
+ QPair<QTabBar *, int> findDockWidgetTab(QDockWidget * dockWidget);
signals:
@@ -122,6 +123,9 @@
void mutedToggled(bool muted);
+ /** HACK */
+ void tabCloseRequested(int index);
+
private:
void populateActionCollection();
@@ -140,6 +144,12 @@
/** Internal factorization code. */
void addDockWidget(Qt::DockWidgetArea area, QDockWidget * lastDockWidget,
QDockWidget * dockWidget);
+ /** HACK get all QTabBar of the QDockWidgets and modify them. */
+ void hackDockWidgetTabBar();
+
+ /** HACK */
+ QDockWidget * findDockWidget(QTabBar * tabBar, int index);
+
void dragEnterEvent(QDragEnterEvent * event);
void dropEvent(QDropEvent * event);
=======================================
--- /trunk/quarkplayer-plugins/MainWindow/MockMainWindow.cpp Wed Feb 23
18:38:25 2011
+++ /trunk/quarkplayer-plugins/MainWindow/MockMainWindow.cpp Fri Feb 25
10:11:17 2011
@@ -188,30 +188,18 @@
addDockWidget(Qt::LeftDockWidgetArea, lastDockWidget, dockWidget);
lastDockWidget = dockWidget;
}
-
-void MockMainWindow::resetBrowserDockWidget() {
- addBrowserDockWidget(NULL);
-}
void MockMainWindow::addVideoDockWidget(QDockWidget * dockWidget) {
static QDockWidget * lastDockWidget = NULL;
addDockWidget(Qt::RightDockWidgetArea, lastDockWidget, dockWidget);
lastDockWidget = dockWidget;
}
-
-void MockMainWindow::resetVideoDockWidget() {
- addVideoDockWidget(NULL);
-}
void MockMainWindow::addPlaylistDockWidget(QDockWidget * dockWidget) {
static QDockWidget * lastDockWidget = NULL;
addDockWidget(Qt::RightDockWidgetArea, lastDockWidget, dockWidget);
lastDockWidget = dockWidget;
}
-
-void MockMainWindow::resetPlaylistDockWidget() {
- addPlaylistDockWidget(NULL);
-}
void MockMainWindow::currentMediaObjectChanged(Phonon::MediaObject *
mediaObject) {
foreach (Phonon::MediaObject * tmp, quarkPlayer().mediaObjectList()) {
=======================================
--- /trunk/quarkplayer-plugins/MainWindow/MockMainWindow.h Wed Feb 23
10:23:21 2011
+++ /trunk/quarkplayer-plugins/MainWindow/MockMainWindow.h Fri Feb 25
10:11:17 2011
@@ -60,13 +60,10 @@
QMenu * menuHelp() const;
void addBrowserDockWidget(QDockWidget * dockWidget);
- void resetBrowserDockWidget();
void addVideoDockWidget(QDockWidget * dockWidget);
- void resetVideoDockWidget();
-
+\
void addPlaylistDockWidget(QDockWidget * dockWidget);
- void resetPlaylistDockWidget();
signals:
=======================================
--- /trunk/quarkplayer-plugins/Playlist/PlaylistWidget.cpp Thu Feb 24
18:17:38 2011
+++ /trunk/quarkplayer-plugins/Playlist/PlaylistWidget.cpp Fri Feb 25
10:11:17 2011
@@ -148,7 +148,6 @@
PlaylistWidget::~PlaylistWidget() {
_mainWindow->removeDockWidget(_dockWidget);
- _mainWindow->resetPlaylistDockWidget();
}
PlaylistModel * PlaylistWidget::playlistModel() const {
@@ -355,12 +354,12 @@
void PlaylistWidget::playlistLoaded(PlaylistParser::Error, int
timeElapsed) {
PlaylistDebug() << "Load time (seconds):" << timeElapsed / 1000;
- updateWindowTitle("");
+ updateWindowTitle();
}
void PlaylistWidget::playlistSaved(PlaylistParser::Error, int timeElapsed)
{
PlaylistDebug() << "Save time (seconds):" << timeElapsed / 1000;
- updateWindowTitle("");
+ updateWindowTitle();
}
void PlaylistWidget::updateWindowTitle(const QString & statusMessage) {
@@ -526,21 +525,9 @@
disconnectFromMediaObjectList();
connectToMediaObject(quarkPlayer().currentMediaObject());
-
- QString title = _dockWidget->windowTitle();
- if (!title.startsWith("> ")) {
- _dockWidget->setWindowTitle("> " + title);
- }
} else {
//This playlist is not the active one
disconnectFromMediaObjectList();
-
- //updateWindowTitle();
- QString title = _dockWidget->windowTitle();
- if (title.startsWith("> ")) {
- title.remove(0, 2);
- _dockWidget->setWindowTitle(title);
- }
}
}
=======================================
--- /trunk/quarkplayer-plugins/VideoWidget/VideoWidgetPlugin.cpp Sun Feb 20
13:15:39 2011
+++ /trunk/quarkplayer-plugins/VideoWidget/VideoWidgetPlugin.cpp Fri Feb 25
10:11:17 2011
@@ -77,7 +77,6 @@
VideoContainer * container = it.value();
_mainWindow->removeDockWidget(container->videoDockWidget);
}
- _mainWindow->resetVideoDockWidget();
}
void VideoWidgetPlugin::stateChanged(Phonon::State newState, Phonon::State
oldState) {