aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Ui/qsui/qsuitabwidget.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-08-11 09:08:12 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-08-11 09:08:12 +0000
commit017d2d27bfbcd97ada407212e925b280ff3482b5 (patch)
tree2a832873a52ee7c8546b6262be58f41d1bdd480e /src/plugins/Ui/qsui/qsuitabwidget.cpp
parent22cf3c55368be9361b43eb002e7a2fb7f2868ac2 (diff)
downloadqmmp-017d2d27bfbcd97ada407212e925b280ff3482b5.tar.gz
qmmp-017d2d27bfbcd97ada407212e925b280ff3482b5.tar.bz2
qmmp-017d2d27bfbcd97ada407212e925b280ff3482b5.zip
added qsui plugin
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@5367 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Ui/qsui/qsuitabwidget.cpp')
-rw-r--r--src/plugins/Ui/qsui/qsuitabwidget.cpp148
1 files changed, 148 insertions, 0 deletions
diff --git a/src/plugins/Ui/qsui/qsuitabwidget.cpp b/src/plugins/Ui/qsui/qsuitabwidget.cpp
new file mode 100644
index 000000000..6dfad0433
--- /dev/null
+++ b/src/plugins/Ui/qsui/qsuitabwidget.cpp
@@ -0,0 +1,148 @@
+/***************************************************************************
+ * Copyright (C) 2012-2015 by Ilya Kotov *
+ * forkotov02@hotmail.ru *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include <QMouseEvent>
+#include <QTabBar>
+#include <QSettings>
+#include <QApplication>
+#include <qmmp/qmmp.h>
+#include "qsuitabbar.h"
+#include "qsuitabwidget.h"
+
+QSUiTabWidget::QSUiTabWidget(QWidget *parent) : QTabWidget(parent)
+{
+ setTabBar(new QSUiTabBar(this));
+ setMovable(true);
+ m_menu = new QMenu(this);
+ m_group = new QActionGroup(this);
+ m_group->setExclusive(true);
+ connect(tabBar(), SIGNAL(tabMoved(int,int)), SIGNAL(tabMoved(int,int)));
+ connect(tabBar(), SIGNAL(tabMoved(int,int)), SLOT(updateActions()));
+ connect(tabBar(), SIGNAL(tabCloseRequested(int)), SLOT(onTabCloseRequest(int)));
+ connect(this, SIGNAL(currentChanged(int)), SLOT(onCurrentChanged(int)));
+ connect(m_menu, SIGNAL(triggered(QAction*)), SLOT(onActionTriggered(QAction*)));
+ readSettings();
+}
+
+QMenu *QSUiTabWidget::menu()
+{
+ return m_menu;
+}
+
+void QSUiTabWidget::onTabCloseRequest(int i)
+{
+ if(!tabsClosable())
+ emit tabCloseRequested(i);
+}
+
+void QSUiTabWidget::onCurrentChanged(int index)
+{
+ if(index >= m_menu->actions().count())
+ return;
+ m_menu->actions().at(index)->setChecked(true);
+}
+
+void QSUiTabWidget::onActionTriggered(QAction *action)
+{
+ setCurrentIndex(m_menu->actions().indexOf(action));
+}
+
+void QSUiTabWidget::updateActions()
+{
+ for(int i = 0; i < m_menu->actions().size(); ++i)
+ {
+ m_menu->actions().at(i)->setText(tabText(i));
+ }
+ m_menu->actions().at(currentIndex())->setChecked(true);
+}
+
+void QSUiTabWidget::tabInserted(int index)
+{
+ QAction *action = new QAction(m_menu);
+ action->setCheckable(true);
+ action->setActionGroup(m_group);
+ action->setText(tabText(index));
+
+ if(m_menu->actions().isEmpty() || index == m_menu->actions().count())
+ {
+ m_menu->addAction(action);
+ }
+ else
+ {
+ QAction *before = m_menu->actions().at(index);
+ m_menu->insertAction(before, action);
+ }
+ if(currentIndex() == index)
+ action->setChecked(true);
+ QTabWidget::tabInserted(index);
+}
+
+void QSUiTabWidget::tabRemoved(int index)
+{
+ QAction *a = m_menu->actions().at(index);
+ m_menu->removeAction(a);
+ delete a;
+ QTabWidget::tabRemoved(index);
+}
+
+void QSUiTabWidget::setTabText(int index, const QString &text)
+{
+ QTabWidget::setTabText(index, text);
+ m_menu->actions().at(index)->setText(text);
+}
+
+void QSUiTabWidget::readSettings()
+{
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ settings.beginGroup("Simple");
+ QFont tab_font = qApp->font(tabBar());
+ if(!settings.value("use_system_fonts", true).toBool())
+ {
+ tab_font.fromString(settings.value("pl_tabs_font", tab_font.toString()).toString());
+ }
+ tabBar()->setFont(tab_font);
+}
+
+void QSUiTabWidget::setTabsVisible(bool visible)
+{
+ tabBar()->setVisible(visible);
+}
+
+void QSUiTabWidget::mousePressEvent(QMouseEvent *e)
+{
+ if((e->button() == Qt::MidButton) &&
+ (childAt(e->pos()) == 0))
+ {
+ e->accept();
+ emit createPlayListRequested();
+ }
+ QTabWidget::mousePressEvent(e);
+}
+
+void QSUiTabWidget::mouseDoubleClickEvent(QMouseEvent *e)
+{
+ if((e->button() == Qt::LeftButton) &&
+ (childAt(e->pos()) == 0))
+ {
+ e->accept();
+ emit createPlayListRequested();
+ }
+ QTabWidget::mouseDoubleClickEvent(e);
+}