diff options
| -rw-r--r-- | src/plugins/Ui/skinned/listwidget.cpp | 20 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/listwidget.h | 1 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/playlistheader.cpp | 50 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/playlistheader.h | 11 | ||||
| -rw-r--r-- | src/qmmpui/playlistheadermodel.cpp | 17 | ||||
| -rw-r--r-- | src/qmmpui/playlistheadermodel.h | 2 |
6 files changed, 64 insertions, 37 deletions
diff --git a/src/plugins/Ui/skinned/listwidget.cpp b/src/plugins/Ui/skinned/listwidget.cpp index 3c92355b7..7f549bf3d 100644 --- a/src/plugins/Ui/skinned/listwidget.cpp +++ b/src/plugins/Ui/skinned/listwidget.cpp @@ -56,7 +56,6 @@ ListWidget::ListWidget(QWidget *parent) m_header = new PlayListHeader(this); m_update = false; - m_resize = false; m_drop_index = INVALID_INDEX; m_scroll_direction = NONE; m_prev_y = 0; @@ -73,7 +72,7 @@ ListWidget::ListWidget(QWidget *parent) connect(m_skin, SIGNAL(skinChanged()), SLOT(updateSkin())); connect(m_ui_settings, SIGNAL(repeatableTrackChanged(bool)), SLOT(updateRepeatIndicator())); connect(m_timer, SIGNAL(timeout()), SLOT(autoscroll())); - //connect(headerModel, SIGNAL(headerChanged()), SLOT(updateColumns())); + connect(m_header, SIGNAL(resizeColumnRequest()), SLOT(updateColumns())); SET_ACTION(ActionManager::PL_SHOW_HEADER, this, SLOT(readSettings())); } @@ -248,9 +247,7 @@ void ListWidget::mousePressEvent(QMouseEvent *e) void ListWidget::resizeEvent(QResizeEvent *e) { - m_resize = true; m_header->setGeometry(0,0,width(), m_header->requiredHeight()); - m_resize = false; m_row_count = (e->size().height() - (m_header->isVisibleTo(this) ? m_header->height() : 0)) / m_drawer.rowHeight(); m_row_count = qMax(m_row_count, 0); updateList(PlayListModel::STRUCTURE); @@ -321,9 +318,7 @@ void ListWidget::updateList(int flags) //song numbers width m_drawer.calculateNumberWidth(m_model->trackCount()); - m_resize = true; m_header->setNumberWidth(m_drawer.numberWidth()); - m_resize = false; items = m_model->mid(m_first, m_row_count); @@ -391,18 +386,7 @@ void ListWidget::updateList(int flags) void ListWidget::updateColumns() { - if(m_resize) //do no update while resize event - return; - - m_header->updateColumns(); - m_header->hideSortIndicator(); - QList<PlayListItem *> items = m_model->mid(m_first, m_row_count); - for(int i = 0; i < items.count(); ++i) - { - m_rows[i]->titles = items[i]->formattedTitles(); - m_drawer.prepareRow(m_rows[i]); //elide titles - } - update(); + updateList(PlayListModel::METADATA); } void ListWidget::autoscroll() diff --git a/src/plugins/Ui/skinned/listwidget.h b/src/plugins/Ui/skinned/listwidget.h index 023d318b3..b5f9f6324 100644 --- a/src/plugins/Ui/skinned/listwidget.h +++ b/src/plugins/Ui/skinned/listwidget.h @@ -115,7 +115,6 @@ private: PlayListModel *m_model; int m_row_count, m_first; Skin *m_skin; - bool m_resize; int m_anchor_index; /*! * Scroll direction that is preforming in current moment. diff --git a/src/plugins/Ui/skinned/playlistheader.cpp b/src/plugins/Ui/skinned/playlistheader.cpp index d02561299..36cfbbe85 100644 --- a/src/plugins/Ui/skinned/playlistheader.cpp +++ b/src/plugins/Ui/skinned/playlistheader.cpp @@ -83,6 +83,10 @@ PlayListHeader::PlayListHeader(QWidget *parent) : m_menu->addAction(QIcon::fromTheme("list-remove"), tr("Remove Column"), this, SLOT(removeColumn())); connect(m_skin, SIGNAL(skinChanged()), this, SLOT(updateSkin())); + connect(m_model, SIGNAL(columnAdded(int)), SLOT(onColumnAdded(int))); + connect(m_model, SIGNAL(columnRemoved(int)), SLOT(onColumnRemoved(int))); + connect(m_model, SIGNAL(columnMoved(int,int)), SLOT(onColumnMoved(int,int))); + connect(m_model, SIGNAL(columnChanged(int)), SLOT(updateColumns())); loadColors(); readSettings(); } @@ -246,16 +250,16 @@ void PlayListHeader::updateSkin() void PlayListHeader::addColumn() { - /*int column = findColumn(m_pressed_pos); - if(column < 0 && m_pressed_pos.x() > m_rects.last().right()) + int column = findColumn(m_pressed_pos); + if(column < 0 && m_pressed_pos.x() > m_columns.last()->rect.right()) column = m_model->count(); - else if(column < 0 && m_pressed_pos.x() < m_rects.first().x()) + else if(column < 0 && m_pressed_pos.x() < m_columns.first()->rect.x()) column = 0; if(column < 0) return; - m_model->execInsert(column);*/ + m_model->execInsert(column); } void PlayListHeader::editColumn() @@ -295,6 +299,25 @@ void PlayListHeader::restoreSize() m_columns[m_pressed_column]->size = 150; updateColumns(); + resizeColumnRequest(); +} + +void PlayListHeader::onColumnAdded(int index) +{ + m_columns.insert(index, new Column()); + updateColumns(); +} + +void PlayListHeader::onColumnRemoved(int index) +{ + delete m_columns.takeAt(index); + updateColumns(); +} + +void PlayListHeader::onColumnMoved(int from, int to) +{ + m_columns.move(from, to); + updateColumns(); } void PlayListHeader::mousePressEvent(QMouseEvent *e) @@ -368,6 +391,9 @@ void PlayListHeader::mouseMoveEvent(QMouseEvent *e) m_columns[m_pressed_column]->size = m_old_size - e->pos().x() + m_pressed_pos.x(); else m_columns[m_pressed_column]->size = m_old_size + e->pos().x() - m_pressed_pos.x(); + m_columns[m_pressed_column]->size = qMax(m_columns[m_pressed_column]->size, m_columns[m_pressed_column]->minSize); + updateColumns(); + emit resizeColumnRequest(); } else if(m_task == MOVE) { @@ -437,12 +463,20 @@ void PlayListHeader::resizeEvent(QResizeEvent *e) return; } - /*int delta = e->size().width() - e->oldSize().width(); - int index = m_model->autoResizeColumn(); + int delta = e->size().width() - e->oldSize().width(); + int index = -1; + for(int i = 0; i < m_columns.count(); ++i) + { + if(m_columns.at(i)->autoResize) + { + index = i; + break; + } + } if(index >= 0 && e->oldSize().width() > 10) { - m_model->resize(index, m_model->size(index) + delta); + m_columns[index]->size = qMax(m_columns[index]->minSize, m_columns[index]->size + delta); updateColumns(); return; } @@ -451,7 +485,7 @@ void PlayListHeader::resizeEvent(QResizeEvent *e) { updateColumns(); return; - }*/ + } } void PlayListHeader::contextMenuEvent(QContextMenuEvent *e) diff --git a/src/plugins/Ui/skinned/playlistheader.h b/src/plugins/Ui/skinned/playlistheader.h index 0468fab3f..b4f4827c4 100644 --- a/src/plugins/Ui/skinned/playlistheader.h +++ b/src/plugins/Ui/skinned/playlistheader.h @@ -46,11 +46,14 @@ public: void readSettings(); void setNumberWidth(int width); - void updateColumns(); int requiredHeight() const; QList<int> sizes() const; +signals: + void resizeColumnRequest(); + public slots: + void updateColumns(); void showSortIndicator(int column, bool reverted); void hideSortIndicator(); @@ -61,6 +64,9 @@ private slots: void removeColumn(); void setAutoResize(bool yes); void restoreSize(); + void onColumnAdded(int index); + void onColumnRemoved(int index); + void onColumnMoved(int from, int to); private: void mousePressEvent(QMouseEvent *e); @@ -93,14 +99,11 @@ private: QMenu *m_menu; QFont m_font; QColor m_normal, m_normal_bg, m_current; - //QList <QRect> m_rects; - //QStringList m_names; QPoint m_pressed_pos; QPoint m_mouse_pos; PlayListHeaderModel *m_model; QAction *m_autoResize; QPixmap m_arrow_up, m_arrow_down; - //QList<int> m_sizes, m_minimal_sizes; QList<Column*> m_columns; bool m_reverted; int m_number_width; diff --git a/src/qmmpui/playlistheadermodel.cpp b/src/qmmpui/playlistheadermodel.cpp index 80943979a..279aa501e 100644 --- a/src/qmmpui/playlistheadermodel.cpp +++ b/src/qmmpui/playlistheadermodel.cpp @@ -19,7 +19,9 @@ ***************************************************************************/ #include <QApplication> +#include <QMetaObject> #include <qmmp/qmmp.h> +#include <qmmpui/playlistmanager.h> #include "columneditor_p.h" #include "metadatahelper_p.h" #include "playlistheadermodel.h" @@ -98,9 +100,9 @@ void PlayListHeaderModel::insert(int index, const QString &name, const QString & col.name = name; col.pattern = pattern; m_columns.insert(index, col); - rebuildFormatters(); emit columnAdded(index); emit headerChanged(); + updatePlayLists(); } void PlayListHeaderModel::remove(int index) @@ -114,9 +116,9 @@ void PlayListHeaderModel::remove(int index) if(m_columns.count() == 1) return; - rebuildFormatters(); emit columnRemoved(index); emit headerChanged(); + updatePlayLists(); } void PlayListHeaderModel::move(int from, int to) @@ -134,9 +136,9 @@ void PlayListHeaderModel::move(int from, int to) } m_columns.move(from, to); - rebuildFormatters(); emit columnMoved(from, to); emit headerChanged(); + updatePlayLists(); } void PlayListHeaderModel::execEdit(int index, QWidget *parent) @@ -155,9 +157,9 @@ void PlayListHeaderModel::execEdit(int index, QWidget *parent) { m_columns[index].name = editor.name(); m_columns[index].pattern = editor.pattern(); - rebuildFormatters(); emit columnChanged(index); emit headerChanged(); + updatePlayLists(); } } @@ -202,10 +204,15 @@ const QString PlayListHeaderModel::pattern(int index) const return m_columns[index].pattern; } -void PlayListHeaderModel::rebuildFormatters() +void PlayListHeaderModel::updatePlayLists() { QStringList patterns; for(int i = 0; i < m_columns.count(); ++i) patterns.append(m_columns[i].pattern); m_helper->setTitleFormats(patterns); + + foreach(PlayListModel *model, PlayListManager::instance()->playLists()) + { + QMetaObject::invokeMethod(model, "listChanged", Q_ARG(int, PlayListModel::METADATA)); + } } diff --git a/src/qmmpui/playlistheadermodel.h b/src/qmmpui/playlistheadermodel.h index 6ce4e8c71..a055fcf9f 100644 --- a/src/qmmpui/playlistheadermodel.h +++ b/src/qmmpui/playlistheadermodel.h @@ -63,7 +63,7 @@ signals: void headerChanged(); private: - void rebuildFormatters(); + void updatePlayLists(); struct ColumnHeader { |
