Make music list a QTreeWidget instead for easier category searching, etc.

Temporarily allow music suffix until I let the client perform a fileExists check similar to how images are handled (.mp3? play mp3, if not mp3, play .ogg, etc. etc.)
This commit is contained in:
Crystalwarrior 2019-09-23 15:48:35 +03:00
parent 2c265ebc0b
commit 398f37794f
2 changed files with 50 additions and 27 deletions

View File

@ -32,6 +32,8 @@
#include <QLineEdit> #include <QLineEdit>
#include <QPlainTextEdit> #include <QPlainTextEdit>
#include <QListWidget> #include <QListWidget>
#include <QTreeWidget>
#include <QHeaderView>
#include <QCheckBox> #include <QCheckBox>
#include <QComboBox> #include <QComboBox>
#include <QSlider> #include <QSlider>
@ -444,7 +446,7 @@ private:
QListWidget *ui_mute_list; QListWidget *ui_mute_list;
QListWidget *ui_area_list; QListWidget *ui_area_list;
QListWidget *ui_music_list; QTreeWidget *ui_music_list;
ScrollText *ui_music_name; ScrollText *ui_music_name;
AOMovie *ui_music_display; AOMovie *ui_music_display;
@ -610,7 +612,7 @@ private slots:
void on_ooc_return_pressed(); void on_ooc_return_pressed();
void on_music_search_edited(QString p_text); void on_music_search_edited(QString p_text);
void on_music_list_double_clicked(QModelIndex p_model); void on_music_list_double_clicked(QTreeWidgetItem *p_item, int column);
void on_area_list_double_clicked(QModelIndex p_model); void on_area_list_double_clicked(QModelIndex p_model);
void select_emote(int p_id); void select_emote(int p_id);

View File

@ -123,7 +123,11 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
ui_area_list = new QListWidget(this); ui_area_list = new QListWidget(this);
ui_area_list->hide(); ui_area_list->hide();
ui_music_list = new QListWidget(this); ui_music_list = new QTreeWidget(this);
ui_music_list->setColumnCount(1);
ui_music_list->setHeaderHidden(true);
ui_music_list->header()->setStretchLastSection(false);
ui_music_list->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
ui_music_display = new AOMovie(this, ao_app); ui_music_display = new AOMovie(this, ao_app);
ui_music_display->set_play_once(false); ui_music_display->set_play_once(false);
@ -308,7 +312,7 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
connect(ui_ooc_chat_message, SIGNAL(returnPressed()), this, SLOT(on_ooc_return_pressed())); connect(ui_ooc_chat_message, SIGNAL(returnPressed()), this, SLOT(on_ooc_return_pressed()));
connect(ui_music_list, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(on_music_list_double_clicked(QModelIndex))); connect(ui_music_list, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), this, SLOT(on_music_list_double_clicked(QTreeWidgetItem*, int)));
connect(ui_area_list, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(on_area_list_double_clicked(QModelIndex))); connect(ui_area_list, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(on_area_list_double_clicked(QModelIndex)));
connect(ui_hold_it, SIGNAL(clicked()), this, SLOT(on_hold_it_clicked())); connect(ui_hold_it, SIGNAL(clicked()), this, SLOT(on_hold_it_clicked()));
@ -1001,13 +1005,13 @@ void Courtroom::set_background(QString p_background)
set_size_and_pos(ui_ic_chat_message, "ic_chat_message"); set_size_and_pos(ui_ic_chat_message, "ic_chat_message");
} }
ui_vp_speedlines->stop(); // ui_vp_speedlines->stop();
ui_vp_player_char->stop(); // ui_vp_player_char->stop();
ui_vp_sideplayer_char->stop(); // ui_vp_sideplayer_char->stop();
ui_vp_effect->stop(); // ui_vp_effect->stop();
ui_vp_message->hide(); // ui_vp_message->hide();
ui_vp_chatbox->hide(); // ui_vp_chatbox->hide();
set_scene(ao_app->get_char_side(current_char), QString::number(ao_app->get_desk_mod(current_char, current_emote))); // set_scene(ao_app->get_char_side(current_char), QString::number(ao_app->get_desk_mod(current_char, current_emote)));
} }
void Courtroom::update_character(int p_cid) void Courtroom::update_character(int p_cid)
@ -1142,26 +1146,43 @@ void Courtroom::list_music()
int n_listed_songs = 0; int n_listed_songs = 0;
QTreeWidgetItem *parent = nullptr;
for (int n_song = 0 ; n_song < music_list.size() ; ++n_song) for (int n_song = 0 ; n_song < music_list.size() ; ++n_song)
{ {
QString i_song = music_list.at(n_song); QString i_song = music_list.at(n_song);
QString i_song_listname = i_song; QString i_song_listname = i_song.left(i_song.lastIndexOf("."));
i_song_listname = i_song_listname.left(i_song_listname.lastIndexOf("."));
if (i_song.toLower().contains(ui_music_search->text().toLower())) QTreeWidgetItem *treeItem;
if (i_song_listname != i_song && parent != nullptr) //not a category, parent exists
treeItem = new QTreeWidgetItem(parent);
else
treeItem = new QTreeWidgetItem(ui_music_list);
treeItem->setText(0, i_song);
music_row_to_number.append(n_song);
QString song_path = ao_app->get_music_path(i_song);
if (file_exists(song_path))
treeItem->setBackground(0, found_brush);
else
treeItem->setBackground(0, missing_brush);
if (i_song_listname == i_song) //Not supposed to be a song to begin with - a category?
parent = treeItem;
++n_listed_songs;
if (ui_music_search->text() != "")
treeItem->setHidden(true);
}
if (ui_music_search->text() != "")
{
QList<QTreeWidgetItem*> clist = ui_music_list->findItems(ui_music_search->text(), Qt::MatchContains|Qt::MatchRecursive, 0);
foreach(QTreeWidgetItem* item, clist)
{ {
ui_music_list->addItem(i_song_listname); item->setHidden(false);
music_row_to_number.append(n_song);
QString song_path = ao_app->get_music_path(i_song);
if (file_exists(song_path))
ui_music_list->item(n_listed_songs)->setBackground(found_brush);
else
ui_music_list->item(n_listed_songs)->setBackground(missing_brush);
++n_listed_songs;
} }
ui_music_list->expandAll();
} }
} }
@ -3736,12 +3757,12 @@ void Courtroom::on_pair_list_clicked(QModelIndex p_index)
} }
} }
void Courtroom::on_music_list_double_clicked(QModelIndex p_model) void Courtroom::on_music_list_double_clicked(QTreeWidgetItem *p_item, int column)
{ {
if (is_muted) if (is_muted)
return; return;
QString p_song = music_list.at(music_row_to_number.at(p_model.row())); QString p_song = p_item->text(column);
if (!ui_ic_chat_name->text().isEmpty() && ao_app->cccc_ic_support_enabled) if (!ui_ic_chat_name->text().isEmpty() && ao_app->cccc_ic_support_enabled)
{ {