aboutsummaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/Ui/skinned/listwidget.cpp1
-rw-r--r--src/plugins/Ui/skinned/listwidgetdrawer.cpp12
-rw-r--r--src/plugins/Ui/skinned/listwidgetdrawer.h8
-rw-r--r--src/plugins/Ui/skinned/playlistheader.cpp55
-rw-r--r--src/plugins/Ui/skinned/playlistheader.h7
5 files changed, 79 insertions, 4 deletions
diff --git a/src/plugins/Ui/skinned/listwidget.cpp b/src/plugins/Ui/skinned/listwidget.cpp
index 893431fe9..814eba1d3 100644
--- a/src/plugins/Ui/skinned/listwidget.cpp
+++ b/src/plugins/Ui/skinned/listwidget.cpp
@@ -378,6 +378,7 @@ void ListWidget::updateList(int flags)
}
row->titles = items[i]->formattedTitles();
row->sizes = m_header->sizes();
+ row->alignment = m_header->alignment();
(m_first + i) == m_model->currentIndex() ? row->flags |= ListWidgetRow::CURRENT :
row->flags &= ~ListWidgetRow::CURRENT;
diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.cpp b/src/plugins/Ui/skinned/listwidgetdrawer.cpp
index bffaeff2c..2e6a66807 100644
--- a/src/plugins/Ui/skinned/listwidgetdrawer.cpp
+++ b/src/plugins/Ui/skinned/listwidgetdrawer.cpp
@@ -341,7 +341,17 @@ void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl
for(int i = 0; i < row->sizes.count(); i++)
{
painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal);
- painter->drawText(sx + m_padding, sy, row->titles[i]);
+ if(row->alignment[i] == ListWidgetRow::ALIGN_LEFT)
+ painter->drawText(sx + m_padding, sy, row->titles[i]);
+ else if(row->alignment[i] == ListWidgetRow::ALIGN_RIGHT)
+ painter->drawText(sx + row->sizes[i] - m_padding - m_metrics->width(row->titles[i]), sy, row->titles[i]);
+ else
+ painter->drawText(sx + row->sizes[i] / 2 - m_metrics->width(row->titles[i]) / 2, sy, row->titles[i]);
+
+
+ //painter->drawText(sx + m_padding, sy, row->titles[i]);
+ //painter->drawText(sx + row->sizes[i] - m_padding - m_metrics->width(row->titles[i]), sy, row->titles[i]);
+ //painter->drawText(sx + row->sizes[i] / 2 - m_metrics->width(row->titles[i]) / 2, sy, row->titles[i]);
sx += row->sizes[i];
if(i == row->trackStateColumn && !row->extraString.isEmpty())
diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.h b/src/plugins/Ui/skinned/listwidgetdrawer.h
index 228b97513..0d8363f6b 100644
--- a/src/plugins/Ui/skinned/listwidgetdrawer.h
+++ b/src/plugins/Ui/skinned/listwidgetdrawer.h
@@ -45,6 +45,7 @@ struct ListWidgetRow
}
QStringList titles;
QList<int> sizes;
+ QList<int> alignment;
QString length;
QString extraString;
int number;
@@ -60,6 +61,13 @@ struct ListWidgetRow
ANCHOR = 0x08
};
+ enum
+ {
+ ALIGN_LEFT = 0,
+ ALIGN_CENTER,
+ ALIGN_RIGHT,
+ };
+
int flags;
QRect rect; //geometry
bool autoResize;
diff --git a/src/plugins/Ui/skinned/playlistheader.cpp b/src/plugins/Ui/skinned/playlistheader.cpp
index b5a9f9d32..f4282b50f 100644
--- a/src/plugins/Ui/skinned/playlistheader.cpp
+++ b/src/plugins/Ui/skinned/playlistheader.cpp
@@ -31,11 +31,13 @@
#include <QInputDialog>
#include <QIcon>
#include <QHash>
+#include <QActionGroup>
#include <qmmp/qmmp.h>
#include <qmmpui/playlistmanager.h>
#include <qmmpui/playlistheadermodel.h>
#include "skin.h"
#include "playlistheader.h"
+#include "listwidgetdrawer.h"
#define INITAL_SIZE 150
#define MAX_COLUMNS 7
@@ -78,6 +80,8 @@ PlayListHeader::PlayListHeader(QWidget *parent) :
m_task = NO_TASK;
m_model = PlayListManager::instance()->headerModel();
m_skin = Skin::instance();
+
+ //menus
m_menu = new QMenu(this);
m_menu->addAction(QIcon::fromTheme("list-add"), tr("Add Column"), this, SLOT(addColumn()));
m_menu->addAction(QIcon::fromTheme("configure"), tr("Edit Column"), this, SLOT(editColumn()));
@@ -85,6 +89,19 @@ PlayListHeader::PlayListHeader(QWidget *parent) :
m_trackStateAction->setCheckable(true);
m_autoResizeAction = m_menu->addAction(tr("Auto-resize"), this, SLOT(setAutoResize(bool)));
m_autoResizeAction->setCheckable(true);
+
+ m_alignmentMenu = m_menu->addMenu(tr("Alignment"));
+ m_alignmentMenu->addAction(tr("Left"))->setData(ListWidgetRow::ALIGN_LEFT);
+ m_alignmentMenu->addAction(tr("Right"))->setData(ListWidgetRow::ALIGN_RIGHT);
+ m_alignmentMenu->addAction(tr("Center"))->setData(ListWidgetRow::ALIGN_CENTER);
+ connect(m_alignmentMenu, SIGNAL(triggered(QAction*)), SLOT(setAlignment(QAction*)));
+ QActionGroup *alignmentGroup = new QActionGroup(this);
+ foreach (QAction *a, m_alignmentMenu->actions())
+ {
+ a->setCheckable(true);
+ alignmentGroup->addAction(a);
+ }
+
m_menu->addSeparator();
m_menu->addAction(QIcon::fromTheme("list-remove"), tr("Remove Column"), this, SLOT(removeColumn()));
@@ -128,14 +145,19 @@ void PlayListHeader::readSettings()
{
m_model->restoreSettings(&settings);
QList<QVariant> sizes = settings.value("pl_column_sizes").toList();
+ QList<QVariant> alignment = settings.value("pl_column_alignment").toList();
int autoResizeColumn = settings.value("pl_autoresize_column", -1).toInt();
int trackStateColumn = settings.value("pl_track_state_column", -1).toInt();
for(int i = 0; i < m_model->count(); ++i)
{
m_model->setData(i, SIZE, INITAL_SIZE);
+ m_model->setData(i, ALIGNMENT, (layoutDirection() == Qt::RightToLeft) ?
+ ListWidgetRow::ALIGN_LEFT : ListWidgetRow::ALIGN_LEFT);
if(i < sizes.count())
m_model->setData(i, SIZE, sizes.at(i).toInt());
+ if(i < alignment.count())
+ m_model->setData(i, ALIGNMENT, alignment.at(i).toInt());
if(i == autoResizeColumn)
{
m_model->setData(i, AUTO_RESIZE, true);
@@ -224,6 +246,14 @@ QList<int> PlayListHeader::sizes() const
return sizeList;
}
+QList<int> PlayListHeader::alignment() const
+{
+ QList<int> alignmentList;
+ for(int i = 0; i < m_model->count(); ++i)
+ alignmentList.append(m_model->data(i, ALIGNMENT).toInt());
+ return alignmentList;
+}
+
int PlayListHeader::trackStateColumn() const
{
for(int i = 0; i < m_model->count(); ++i)
@@ -366,9 +396,20 @@ void PlayListHeader::showTrackState(bool on)
PlayListManager::instance()->selectedPlayList()->updateMetaData();
}
+void PlayListHeader::setAlignment(QAction *action)
+{
+ if(m_pressed_column < 0)
+ return;
+
+ m_model->setData(m_pressed_column, ALIGNMENT, action->data().toInt());
+ PlayListManager::instance()->selectedPlayList()->updateMetaData();
+}
+
void PlayListHeader::onColumnAdded(int index)
{
m_model->setData(index, SIZE, INITAL_SIZE);
+ m_model->setData(index, ALIGNMENT, (layoutDirection() == Qt::RightToLeft) ?
+ ListWidgetRow::ALIGN_RIGHT : ListWidgetRow::ALIGN_LEFT);
if(m_auto_resize)
{
adjustColumn(autoResizeColumn());
@@ -591,6 +632,16 @@ void PlayListHeader::contextMenuEvent(QContextMenuEvent *e)
m_trackStateAction->setChecked(m_model->data(m_pressed_column, TRACK_STATE).toBool());
m_autoResizeAction->setChecked(m_model->data(m_pressed_column, AUTO_RESIZE).toBool());
+ int alignment = m_model->data(m_pressed_column, ALIGNMENT).toInt();
+ foreach (QAction *action, m_alignmentMenu->actions())
+ {
+ if(action->data().toInt() == alignment)
+ {
+ action->setChecked(true);
+ break;
+ }
+ }
+
//hide unused actions
foreach (QAction *action, m_menu->actions())
{
@@ -823,18 +874,20 @@ void PlayListHeader::writeSettings()
QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
settings.beginGroup("Skinned");
m_model->saveSettings(&settings);
- QList<QVariant> sizes;
+ QList<QVariant> sizes, alignment;
int autoResizeColumn = -1;
int trackStateColumn = -1;
for(int i = 0; i < m_model->count(); ++i)
{
sizes << m_model->data(i, SIZE).toInt();
+ alignment << m_model->data(i, ALIGNMENT).toInt();
if(m_model->data(i, AUTO_RESIZE).toBool())
autoResizeColumn = i;
if(m_model->data(i, TRACK_STATE).toBool())
trackStateColumn = i;
}
settings.setValue("pl_column_sizes", sizes);
+ settings.setValue("pl_column_alignment", alignment);
settings.setValue("pl_autoresize_column", autoResizeColumn);
settings.setValue("pl_track_state_column", trackStateColumn);
settings.endGroup();
diff --git a/src/plugins/Ui/skinned/playlistheader.h b/src/plugins/Ui/skinned/playlistheader.h
index a94040069..193ba9473 100644
--- a/src/plugins/Ui/skinned/playlistheader.h
+++ b/src/plugins/Ui/skinned/playlistheader.h
@@ -48,6 +48,7 @@ public:
void setNumberWidth(int width);
int requiredHeight() const;
QList<int> sizes() const;
+ QList<int> alignment() const;
int trackStateColumn() const;
int maxScrollValue() const;
int offset() const;
@@ -66,6 +67,7 @@ private slots:
void removeColumn();
void setAutoResize(bool on);
void showTrackState(bool on);
+ void setAlignment(QAction *action);
void onColumnAdded(int index);
void onColumnRemoved();
@@ -92,12 +94,13 @@ private:
SIZE,
RECT, //geometry
AUTO_RESIZE,
- TRACK_STATE
+ TRACK_STATE,
+ ALIGNMENT
};
Skin *m_skin;
QFontMetrics *m_metrics;
- QMenu *m_menu;
+ QMenu *m_menu, *m_alignmentMenu;
QFont m_font;
QColor m_normal, m_normal_bg, m_current;
QPoint m_pressed_pos;