diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2016-01-15 05:42:59 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2016-01-15 05:42:59 +0000 |
| commit | 05afcf9e9702b1a7d1d7cbcb8849e36092cc1a92 (patch) | |
| tree | e005a2593f24faa3df3da840efe91536bd1cecd6 /src/plugins/Ui | |
| parent | fe44a676f2fc7b71990ef7d9495b8279c058e7af (diff) | |
| download | qmmp-05afcf9e9702b1a7d1d7cbcb8849e36092cc1a92.tar.gz qmmp-05afcf9e9702b1a7d1d7cbcb8849e36092cc1a92.tar.bz2 qmmp-05afcf9e9702b1a7d1d7cbcb8849e36092cc1a92.zip | |
qsui: added column alignment
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@6026 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Ui')
| -rw-r--r-- | src/plugins/Ui/qsui/listwidget.cpp | 3 | ||||
| -rw-r--r-- | src/plugins/Ui/qsui/listwidget.h | 2 | ||||
| -rw-r--r-- | src/plugins/Ui/qsui/listwidgetdrawer.cpp | 14 | ||||
| -rw-r--r-- | src/plugins/Ui/qsui/listwidgetdrawer.h | 10 | ||||
| -rw-r--r-- | src/plugins/Ui/qsui/playlistheader.cpp | 58 | ||||
| -rw-r--r-- | src/plugins/Ui/qsui/playlistheader.h | 9 |
6 files changed, 86 insertions, 10 deletions
diff --git a/src/plugins/Ui/qsui/listwidget.cpp b/src/plugins/Ui/qsui/listwidget.cpp index 8f2c9bf97..6ea2b7336 100644 --- a/src/plugins/Ui/qsui/listwidget.cpp +++ b/src/plugins/Ui/qsui/listwidget.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2015 by Ilya Kotov * + * Copyright (C) 2006-2016 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -419,6 +419,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/qsui/listwidget.h b/src/plugins/Ui/qsui/listwidget.h index 2e8986764..b31b83d8e 100644 --- a/src/plugins/Ui/qsui/listwidget.h +++ b/src/plugins/Ui/qsui/listwidget.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2015 by Ilya Kotov * + * Copyright (C) 2006-2016 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * diff --git a/src/plugins/Ui/qsui/listwidgetdrawer.cpp b/src/plugins/Ui/qsui/listwidgetdrawer.cpp index 701cae5cf..ecae258df 100644 --- a/src/plugins/Ui/qsui/listwidgetdrawer.cpp +++ b/src/plugins/Ui/qsui/listwidgetdrawer.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2015 by Ilya Kotov * + * Copyright (C) 2015-2016 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -400,7 +400,17 @@ void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl { for(int i = 0; i < row->sizes.count(); i++) { - 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/qsui/listwidgetdrawer.h b/src/plugins/Ui/qsui/listwidgetdrawer.h index 72c987427..23aa5072c 100644 --- a/src/plugins/Ui/qsui/listwidgetdrawer.h +++ b/src/plugins/Ui/qsui/listwidgetdrawer.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2015 by Ilya Kotov * + * Copyright (C) 2015-2016 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -43,6 +43,7 @@ struct ListWidgetRow } QStringList titles; QList<int> sizes; + QList<int> alignment; QString length; QString extraString; int number; @@ -58,6 +59,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/qsui/playlistheader.cpp b/src/plugins/Ui/qsui/playlistheader.cpp index a2bd5a1e5..2b60fb526 100644 --- a/src/plugins/Ui/qsui/playlistheader.cpp +++ b/src/plugins/Ui/qsui/playlistheader.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2015 by Ilya Kotov * + * Copyright (C) 2015-2016 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -31,11 +31,13 @@ #include <QInputDialog> #include <QIcon> #include <QStyleOptionHeader> +#include <QActionGroup> #include <qmmp/qmmp.h> #include <qmmpui/playlistmanager.h> #include <qmmpui/playlistheadermodel.h> #include <qmmpui/playlistmanager.h> #include "playlistheader.h" +#include "listwidgetdrawer.h" #define INITAL_SIZE 150 #define MIN_SIZE 30 @@ -57,6 +59,8 @@ PlayListHeader::PlayListHeader(QWidget *parent) : m_task = NO_TASK; m_model = PlayListManager::instance()->headerModel(); + + //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())); @@ -64,6 +68,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", "alignment"))->setData(ListWidgetRow::ALIGN_LEFT); + m_alignmentMenu->addAction(tr("Right", "alignment"))->setData(ListWidgetRow::ALIGN_RIGHT); + m_alignmentMenu->addAction(tr("Center", "alignment"))->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())); @@ -113,14 +130,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); @@ -223,6 +245,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) @@ -359,9 +389,21 @@ void PlayListHeader::showTrackState(bool yes) 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 && isVisible()) { adjustColumn(autoResizeColumn()); @@ -586,6 +628,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()) { @@ -723,18 +775,20 @@ void PlayListHeader::writeSettings() QSettings settings(Qmmp::configFile(), QSettings::IniFormat); settings.beginGroup("Simple"); 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/qsui/playlistheader.h b/src/plugins/Ui/qsui/playlistheader.h index d9836e7d8..6a047fc5b 100644 --- a/src/plugins/Ui/qsui/playlistheader.h +++ b/src/plugins/Ui/qsui/playlistheader.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2015 by Ilya Kotov * + * Copyright (C) 2015-2016 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -48,6 +48,7 @@ public: void setScrollBarWidth(int width); int requiredHeight() const; QList<int> sizes() const; + QList<int> alignment() const; int trackStateColumn() const; int maxScrollValue() const; int offset() const; @@ -65,6 +66,7 @@ private slots: void removeColumn(); void setAutoResize(bool on); void showTrackState(bool yes); + 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 }; QSize m_size_hint; QFontMetrics *m_metrics; - QMenu *m_menu; + QMenu *m_menu, *m_alignmentMenu; QPoint m_pressed_pos; QPoint m_mouse_pos; PlayListHeaderModel *m_model; |
