mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-10-19 09:01:18 +02:00
2021-01-19 Fred Gleason <fredg@paravelsystems.com>
* Added 'RDLibraryModel::isCut() and 'RDLibraryModel::cutRow() methods. * Refactored 'RDCutDialog' to use the model-based API. Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// A widget to select a Rivendell Cut.
|
||||
//
|
||||
// (C) Copyright 2002-2020 Fred Gleason <fredg@paravelsystems.com>
|
||||
// (C) Copyright 2002-2021 Fred Gleason <fredg@paravelsystems.com>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License version 2 as
|
||||
@@ -21,272 +21,193 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <qpushbutton.h>
|
||||
#include <qapplication.h>
|
||||
#include <QApplication>
|
||||
#include <QFileDialog>
|
||||
#include <QMessageBox>
|
||||
|
||||
#include "rdadd_cart.h"
|
||||
#include "rdapplication.h"
|
||||
#include "rdcart_search_text.h"
|
||||
#include "rdconf.h"
|
||||
#include "rdaudioimport.h"
|
||||
#include "rdcut_dialog.h"
|
||||
#include "rdconf.h"
|
||||
#include "rddb.h"
|
||||
#include "rdescape_string.h"
|
||||
#include "rdgroup.h"
|
||||
#include "rdprofile.h"
|
||||
#include "rdtextvalidator.h"
|
||||
#include "rdsettings.h"
|
||||
#include "rdwavefile.h"
|
||||
|
||||
//
|
||||
// Icons
|
||||
//
|
||||
#include "../icons/play.xpm"
|
||||
#include "../icons/rml5.xpm"
|
||||
|
||||
|
||||
RDCutDialog::RDCutDialog(QString *cutname,const QString &caption,
|
||||
QString *filter,QString *group,
|
||||
QString *schedcode,bool show_clear,bool allow_add,
|
||||
bool exclude_tracks,QWidget *parent)
|
||||
RDCutDialog::RDCutDialog(QString *filter,QString *group,QString *schedcode,
|
||||
bool show_clear,bool allow_add,bool exclude_tracks,
|
||||
const QString &caption,bool user_is_admin,
|
||||
QWidget *parent)
|
||||
: RDDialog(parent)
|
||||
{
|
||||
cut_cutname=cutname;
|
||||
cut_caption=caption;
|
||||
cut_exclude_tracks=exclude_tracks;
|
||||
cut_group=group;
|
||||
cut_schedcode=schedcode;
|
||||
cut_allow_clear=show_clear;
|
||||
cart_caption=caption;
|
||||
cart_allow_add=allow_add;
|
||||
|
||||
cart_cutname=NULL;
|
||||
cart_filter_mode=rda->station()->filterMode();
|
||||
if(filter==NULL) {
|
||||
cut_filter=new QString();
|
||||
cart_filter=new QString();
|
||||
local_filter=true;
|
||||
}
|
||||
else {
|
||||
cut_filter=filter;
|
||||
cart_filter=filter;
|
||||
local_filter=false;
|
||||
}
|
||||
cart_import_path=RDGetHomeDir();
|
||||
cart_import_file_filter=RD_AUDIO_FILE_FILTER;
|
||||
|
||||
setWindowTitle(caption+" - "+tr("Select Cut"));
|
||||
|
||||
//
|
||||
// Create Icons
|
||||
//
|
||||
cut_playout_map=new QPixmap(play_xpm);
|
||||
cut_macro_map=new QPixmap(rml5_xpm);
|
||||
|
||||
//
|
||||
// Fix the Window Size
|
||||
//
|
||||
setMinimumWidth(sizeHint().width());
|
||||
setMaximumWidth(sizeHint().width());
|
||||
setMinimumHeight(sizeHint().height());
|
||||
setMaximumHeight(sizeHint().height());
|
||||
|
||||
//
|
||||
// Progress Dialog
|
||||
//
|
||||
cut_progress_dialog=
|
||||
new QProgressDialog(tr("Please Wait..."),"Cancel",0,10,this,
|
||||
cart_progress_dialog=
|
||||
new QProgressDialog(tr("Please Wait..."),tr("Cancel"),0,10,this,
|
||||
Qt::WStyle_Customize|Qt::WStyle_NormalBorder);
|
||||
cut_progress_dialog->setCaption(" ");
|
||||
QLabel *label=new QLabel(tr("Please Wait..."),cut_progress_dialog);
|
||||
cart_progress_dialog->setCaption(" ");
|
||||
QLabel *label=new QLabel(tr("Please Wait..."),cart_progress_dialog);
|
||||
label->setAlignment(Qt::AlignCenter);
|
||||
label->setFont(progressFont());
|
||||
cut_progress_dialog->setLabel(label);
|
||||
cut_progress_dialog->setCancelButton(NULL);
|
||||
cut_progress_dialog->setMinimumDuration(2000);
|
||||
cart_progress_dialog->setLabel(label);
|
||||
cart_progress_dialog->setCancelButton(NULL);
|
||||
cart_progress_dialog->setMinimumDuration(2000);
|
||||
|
||||
cart_busy_dialog=new RDBusyDialog(this);
|
||||
|
||||
//
|
||||
// Filter Selector
|
||||
// Cart Filter
|
||||
//
|
||||
cut_filter_edit=new QLineEdit(this);
|
||||
label=new QLabel(cut_filter_edit,tr("Cart Filter:"),this);
|
||||
label->setGeometry(10,10,85,20);
|
||||
label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
|
||||
label->setFont(labelFont());
|
||||
connect(cut_filter_edit,SIGNAL(textChanged(const QString &)),
|
||||
this,SLOT(filterChangedData(const QString &)));
|
||||
|
||||
//
|
||||
// Filter Search Button
|
||||
//
|
||||
cut_search_button=new QPushButton(this);
|
||||
cut_search_button->setGeometry(sizeHint().width()-140,8,60,24);
|
||||
cut_search_button->setText(tr("&Search"));
|
||||
cut_search_button->setFont(buttonFont());
|
||||
connect(cut_search_button,SIGNAL(clicked()),this,SLOT(searchButtonData()));
|
||||
|
||||
//
|
||||
// Filter Clear Button
|
||||
//
|
||||
cut_clear_button=new QPushButton(this);
|
||||
cut_clear_button->setGeometry(sizeHint().width()-70,8,60,24);
|
||||
cut_clear_button->setFont(buttonFont());
|
||||
cut_clear_button->setText(tr("C&lear"));
|
||||
connect(cut_clear_button,SIGNAL(clicked()),this,SLOT(clearData()));
|
||||
|
||||
//
|
||||
// Group Selector
|
||||
//
|
||||
cut_group_box=new QComboBox(this);
|
||||
cut_group_box->setGeometry(100,40,140,20);
|
||||
label=new QLabel(cut_filter_edit,tr("Group:"),this);
|
||||
label->setGeometry(10,40,85,20);
|
||||
label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
|
||||
label->setFont(labelFont());
|
||||
connect(cut_group_box,SIGNAL(activated(const QString &)),
|
||||
this,SLOT(groupActivatedData(const QString &)));
|
||||
|
||||
//
|
||||
// Scheduler Code Selector
|
||||
//
|
||||
cut_schedcode_box=new QComboBox(this);
|
||||
cut_schedcode_box->setGeometry(380,40,sizeHint().width()-390,20);
|
||||
cut_schedcode_label=new QLabel(cut_schedcode_box,tr("Scheduler Code:"),this);
|
||||
cut_schedcode_label->setGeometry(260,40,115,20);
|
||||
cut_schedcode_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
|
||||
cut_schedcode_label->setFont(labelFont());
|
||||
connect(cut_schedcode_box,SIGNAL(activated(const QString &)),
|
||||
this,SLOT(groupActivatedData(const QString &)));
|
||||
|
||||
//
|
||||
// Search Limit Checkbox
|
||||
//
|
||||
cart_limit_box=new QCheckBox(this);
|
||||
cart_limit_box->setGeometry(100,72,15,15);
|
||||
cart_limit_box->setChecked(true);
|
||||
label=new QLabel(cart_limit_box,tr("Show Only First")+
|
||||
QString().sprintf(" %d ",
|
||||
RD_LIMITED_CART_SEARCH_QUANTITY)+tr("Matches"),this);
|
||||
label->setGeometry(120,70,300,20);
|
||||
label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter);
|
||||
label->setFont(labelFont());
|
||||
connect(cart_limit_box,SIGNAL(stateChanged(int)),
|
||||
this,SLOT(limitChangedData(int)));
|
||||
cart_cart_filter=new RDCartFilter(false,this);
|
||||
cart_cart_filter->setUserIsAdmin(user_is_admin);
|
||||
cart_cart_filter->setShowCartType(RDCart::Audio);
|
||||
cart_cart_filter->setShowTrackCarts(!exclude_tracks);
|
||||
connect(rda,SIGNAL(userChanged()),cart_cart_filter,SLOT(changeUser()));
|
||||
|
||||
//
|
||||
// Cart List
|
||||
//
|
||||
cut_cart_list=new RDListView(this);
|
||||
cut_cart_list->setGeometry(10,120,300,200);
|
||||
cut_cart_list->setAllColumnsShowFocus(true);
|
||||
cut_cart_list->setItemMargin(5);
|
||||
connect(cut_cart_list,SIGNAL(selectionChanged()),
|
||||
this,SLOT(selectionChangedData()));
|
||||
connect(cut_cart_list,SIGNAL(clicked(Q3ListViewItem *)),
|
||||
this,SLOT(cartClickedData(Q3ListViewItem *)));
|
||||
label=new QLabel(cut_cart_list,tr("Carts"),this);
|
||||
label->setGeometry(15,100,100,20);
|
||||
label->setFont(labelFont());
|
||||
cut_cart_list->addColumn("");
|
||||
cut_cart_list->setColumnAlignment(0,Qt::AlignHCenter);
|
||||
cut_cart_list->addColumn(tr("Number"));
|
||||
|
||||
cut_cart_list->setColumnAlignment(1,Qt::AlignHCenter);
|
||||
cut_cart_list->addColumn(tr("Title"));
|
||||
cut_cart_list->setColumnAlignment(2,Qt::AlignLeft);
|
||||
|
||||
cut_cart_list->addColumn(tr("Group"));
|
||||
cut_cart_list->setColumnAlignment(3,Qt::AlignCenter);
|
||||
|
||||
//
|
||||
// Cut List
|
||||
//
|
||||
cut_cut_list=new Q3ListView(this);
|
||||
cut_cut_list->setGeometry(320,120,sizeHint().width()-330,200);
|
||||
cut_cut_list->setAllColumnsShowFocus(true);
|
||||
cut_cut_list->setItemMargin(5);
|
||||
label=new QLabel(cut_cut_list,tr("Cuts"),this);
|
||||
label->setGeometry(325,100,100,20);
|
||||
label->setFont(labelFont());
|
||||
cut_cut_list->addColumn(tr("Description"));
|
||||
cut_cut_list->setColumnAlignment(0,Qt::AlignLeft);
|
||||
|
||||
cut_cut_list->addColumn(tr("Number"));
|
||||
cut_cut_list->setColumnAlignment(1,Qt::AlignLeft);
|
||||
|
||||
|
||||
QPushButton *button=NULL;
|
||||
cart_cart_view=new QTreeView(this);
|
||||
cart_cart_view->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||
cart_cart_view->setSelectionMode(QAbstractItemView::SingleSelection);
|
||||
cart_cart_view->setSortingEnabled(false);
|
||||
cart_cart_view->setWordWrap(false);
|
||||
cart_cart_model=new RDLibraryModel(this);
|
||||
cart_cart_model->setFont(font());
|
||||
cart_cart_model->setPalette(palette());
|
||||
cart_cart_view->setModel(cart_cart_model);
|
||||
cart_cart_filter->setModel(cart_cart_model);
|
||||
connect(cart_cart_model,SIGNAL(modelReset()),this,SLOT(modelResetData()));
|
||||
connect(cart_cart_view,SIGNAL(doubleClicked(const QModelIndex &)),
|
||||
this,SLOT(cartDoubleClickedData(const QModelIndex &)));
|
||||
connect(cart_cart_view->selectionModel(),
|
||||
SIGNAL(selectionChanged(const QItemSelection &,const QItemSelection &)),
|
||||
this,
|
||||
SLOT(selectionChangedData(const QItemSelection &,
|
||||
const QItemSelection &)));
|
||||
|
||||
//
|
||||
// Add Button
|
||||
//
|
||||
button=new QPushButton(tr("&Add New\nCart"),this);
|
||||
button->setGeometry(10,sizeHint().height()-60,80,50);
|
||||
button->setFont(buttonFont());
|
||||
connect(button,SIGNAL(clicked()),this,SLOT(addButtonData()));
|
||||
cart_add_button=new QPushButton(tr("&Add New\nCart"),this);
|
||||
cart_add_button->setGeometry(10,sizeHint().height()-60,80,50);
|
||||
cart_add_button->setFont(buttonFont());
|
||||
connect(cart_add_button,SIGNAL(clicked()),this,SLOT(addButtonData()));
|
||||
if(!allow_add) {
|
||||
button->hide();
|
||||
cart_add_button->hide();
|
||||
}
|
||||
|
||||
//
|
||||
// Clear Button
|
||||
//
|
||||
button=new QPushButton(tr("&Clear"),this);
|
||||
button->setFont(buttonFont());
|
||||
connect(button,SIGNAL(clicked()),this,SLOT(clearButtonData()));
|
||||
cart_clear_button=new QPushButton(tr("&Clear"),this);
|
||||
cart_clear_button->setFont(buttonFont());
|
||||
connect(cart_clear_button,SIGNAL(clicked()),
|
||||
cart_cart_view,SLOT(clearSelection()));
|
||||
if(!show_clear) {
|
||||
button->hide();
|
||||
}
|
||||
if(allow_add) {
|
||||
button->setGeometry(100,sizeHint().height()-60,80,50);
|
||||
}
|
||||
else {
|
||||
button->setGeometry(10,sizeHint().height()-60,80,50);
|
||||
cart_clear_button->hide();
|
||||
}
|
||||
|
||||
//
|
||||
// OK Button
|
||||
//
|
||||
cut_ok_button=new QPushButton(tr("&OK"),this);
|
||||
cut_ok_button->
|
||||
setGeometry(sizeHint().width()-180,sizeHint().height()-60,80,50);
|
||||
cut_ok_button->setFont(buttonFont());
|
||||
cut_ok_button->setDefault(true);
|
||||
connect(cut_ok_button,SIGNAL(clicked()),this,SLOT(okData()));
|
||||
cart_ok_button=new QPushButton(tr("&OK"),this);
|
||||
cart_ok_button->setFont(buttonFont());
|
||||
connect(cart_ok_button,SIGNAL(clicked()),this,SLOT(okData()));
|
||||
cart_ok_button->setDisabled(true);
|
||||
|
||||
//
|
||||
// Cancel Button
|
||||
//
|
||||
cut_cancel_button=new QPushButton(tr("&Cancel"),this);
|
||||
cut_cancel_button->
|
||||
setGeometry(sizeHint().width()-90,sizeHint().height()-60,80,50);
|
||||
cut_cancel_button->setFont(buttonFont());
|
||||
connect(cut_cancel_button,SIGNAL(clicked()),this,SLOT(cancelData()));
|
||||
cart_cancel_button=new QPushButton(tr("&Cancel"),this);
|
||||
cart_cancel_button->setFont(buttonFont());
|
||||
connect(cart_cancel_button,SIGNAL(clicked()),this,SLOT(cancelData()));
|
||||
|
||||
cart_cart_model->setFilterSql(cart_cart_filter->filterSql());
|
||||
|
||||
//
|
||||
// Populate Data
|
||||
// Fix the Window Size
|
||||
//
|
||||
if(cut_cutname->isEmpty()) {
|
||||
cut_ok_button->setDisabled(true);
|
||||
}
|
||||
switch(rda->station()->filterMode()) {
|
||||
case RDStation::FilterAsynchronous:
|
||||
cut_search_button->setDefault(true);
|
||||
cut_filter_edit->setGeometry(100,10,sizeHint().width()-250,20);
|
||||
break;
|
||||
setMinimumWidth(sizeHint().width());
|
||||
setMinimumHeight(sizeHint().height());
|
||||
|
||||
case RDStation::FilterSynchronous:
|
||||
cut_ok_button->setDefault(true);
|
||||
cut_search_button->hide();
|
||||
cut_filter_edit->setGeometry(100,10,sizeHint().width()-180,20);
|
||||
}
|
||||
BuildGroupList();
|
||||
cut_filter_edit->setText(*cut_filter);
|
||||
RefreshCarts();
|
||||
RefreshCuts();
|
||||
SelectCut(*cut_cutname);
|
||||
cart_cart_filter->changeUser();
|
||||
}
|
||||
|
||||
|
||||
RDCutDialog::~RDCutDialog()
|
||||
{
|
||||
if(local_filter) {
|
||||
delete cut_filter;
|
||||
}
|
||||
delete cart_cart_filter;
|
||||
delete cart_cart_model;
|
||||
delete cart_cart_view;
|
||||
}
|
||||
|
||||
|
||||
QSize RDCutDialog::sizeHint() const
|
||||
{
|
||||
return QSize(550,400);
|
||||
return QSize(cart_cart_filter->sizeHint().width(),400);
|
||||
}
|
||||
|
||||
|
||||
int RDCutDialog::exec(QString *cutname)
|
||||
{
|
||||
LoadState();
|
||||
cart_cart_filter->setShowCartType(RDCart::Audio);
|
||||
cart_cutname=cutname;
|
||||
cart_ok_button->setEnabled(false);
|
||||
|
||||
if(cart_cutname!=NULL) {
|
||||
QModelIndex index=cart_cart_model->cartRow(RDCut::cartNumber(*cutname));
|
||||
if(index.isValid()) {
|
||||
cart_cart_view->setExpanded(index,true);
|
||||
index=cart_cart_model->cutRow(*cart_cutname);
|
||||
if(index.isValid()) {
|
||||
cart_cart_view->selectionModel()->select(index,
|
||||
QItemSelectionModel::ClearAndSelect|QItemSelectionModel::Rows);
|
||||
cart_cart_view->scrollTo(index,QAbstractItemView::PositionAtCenter);
|
||||
cart_ok_button->setEnabled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return QDialog::exec();
|
||||
}
|
||||
|
||||
|
||||
void RDCutDialog::modelResetData()
|
||||
{
|
||||
for(int i=0;i<cart_cart_model->columnCount();i++) {
|
||||
cart_cart_view->resizeColumnToContents(i);
|
||||
}
|
||||
|
||||
/*
|
||||
if(cart_cutname!=NULL) {
|
||||
QModelIndex index=cart_cart_model->cutRow(*cart_cutname);
|
||||
cart_cart_view->selectRow(index.row());
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
@@ -296,87 +217,24 @@ QSizePolicy RDCutDialog::sizePolicy() const
|
||||
}
|
||||
|
||||
|
||||
int RDCutDialog::exec()
|
||||
void RDCutDialog::cartDoubleClickedData(const QModelIndex &index)
|
||||
{
|
||||
LoadState();
|
||||
return QDialog::exec();
|
||||
okData();
|
||||
}
|
||||
|
||||
|
||||
void RDCutDialog::filterChangedData(const QString &str)
|
||||
void RDCutDialog::selectionChangedData(const QItemSelection &before,
|
||||
const QItemSelection &after)
|
||||
{
|
||||
cut_search_button->setEnabled(true);
|
||||
switch(rda->station()->filterMode()) {
|
||||
case RDStation::FilterSynchronous:
|
||||
searchButtonData();
|
||||
break;
|
||||
QModelIndexList rows=cart_cart_view->selectionModel()->selectedRows();
|
||||
|
||||
case RDStation::FilterAsynchronous:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void RDCutDialog::clearData()
|
||||
{
|
||||
cut_filter_edit->clear();
|
||||
filterChangedData("");
|
||||
}
|
||||
|
||||
|
||||
void RDCutDialog::groupActivatedData(const QString &str)
|
||||
{
|
||||
filterChangedData("");
|
||||
}
|
||||
|
||||
|
||||
void RDCutDialog::limitChangedData(int state)
|
||||
{
|
||||
filterChangedData("");
|
||||
}
|
||||
|
||||
|
||||
void RDCutDialog::cartClickedData(Q3ListViewItem *)
|
||||
{
|
||||
cut_ok_button->setEnabled(true);
|
||||
}
|
||||
|
||||
|
||||
void RDCutDialog::selectionChangedData()
|
||||
{
|
||||
RefreshCuts();
|
||||
if(cut_cut_list->firstChild()!=NULL) {
|
||||
cut_cut_list->setSelected(cut_cut_list->firstChild(),true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void RDCutDialog::searchButtonData()
|
||||
{
|
||||
if(cut_filter_edit->text().isEmpty()) {
|
||||
cut_clear_button->setDisabled(true);
|
||||
}
|
||||
else {
|
||||
cut_clear_button->setEnabled(true);
|
||||
}
|
||||
RefreshCarts();
|
||||
RefreshCuts();
|
||||
}
|
||||
|
||||
|
||||
void RDCutDialog::clearButtonData()
|
||||
{
|
||||
RDListViewItem *item=(RDListViewItem *)cut_cart_list->selectedItem();
|
||||
if(item!=NULL) {
|
||||
cut_cart_list->setSelected(item,false);
|
||||
}
|
||||
cut_cut_list->clear();
|
||||
cart_ok_button->setEnabled((rows.size()==1)&&(cart_cart_model->isCut(rows.first())));
|
||||
}
|
||||
|
||||
|
||||
void RDCutDialog::addButtonData()
|
||||
{
|
||||
QString cart_group=cut_group_box->currentText();
|
||||
QString cart_group=cart_cart_filter->selectedGroup();
|
||||
RDCart::Type cart_type=RDCart::Audio;
|
||||
QString cart_title;
|
||||
QString sql;
|
||||
@@ -384,27 +242,33 @@ void RDCutDialog::addButtonData()
|
||||
int cart_num=-1;
|
||||
|
||||
RDAddCart *add_cart=new RDAddCart(&cart_group,&cart_type,&cart_title,
|
||||
rda->user()->name(),cut_caption,
|
||||
rda->user()->name(),cart_caption,
|
||||
rda->system(),this);
|
||||
if((cart_num=add_cart->exec())<0) {
|
||||
delete add_cart;
|
||||
return;
|
||||
}
|
||||
sql=QString().sprintf("insert into CART set \
|
||||
NUMBER=%d,TYPE=%d,GROUP_NAME=\"%s\",TITLE=\"%s\"",
|
||||
cart_num,cart_type,
|
||||
(const char *)cart_group,
|
||||
(const char *)cart_title);
|
||||
sql=QString("insert into CART set ")+
|
||||
QString().sprintf("NUMBER=%d,",cart_num)+
|
||||
QString().sprintf("TYPE=%d,",cart_type)+
|
||||
"GROUP_NAME=\""+RDEscapeString(cart_group)+"\","+
|
||||
"TITLE=\""+RDEscapeString(cart_title)+"\"";
|
||||
q=new RDSqlQuery(sql);
|
||||
delete q;
|
||||
RDCut::create(cart_num,1);
|
||||
RDListViewItem *item=new RDListViewItem(cut_cart_list);
|
||||
item->setPixmap(0,*cut_playout_map);
|
||||
item->setText(1,QString().sprintf("%06d",cart_num));
|
||||
item->setText(2,cart_title);
|
||||
cut_cart_list->setSelected(item,true);
|
||||
cut_cart_list->ensureItemVisible(item);
|
||||
cut_ok_button->setEnabled(true);
|
||||
cart_cart_model->addCart(cart_num);
|
||||
QModelIndex row=cart_cart_model->cutRow(RDCut::cutName(cart_num,1));
|
||||
cart_cart_view->selectionModel()->
|
||||
select(row,QItemSelectionModel::ClearAndSelect|QItemSelectionModel::Rows);
|
||||
cart_cart_view->scrollTo(row,QAbstractItemView::PositionAtCenter);
|
||||
|
||||
RDNotification *notify=
|
||||
new RDNotification(RDNotification::CartType,RDNotification::AddAction,
|
||||
QVariant(cart_num));
|
||||
rda->ripc()->sendNotification(*notify);
|
||||
delete notify;
|
||||
|
||||
cart_ok_button->setEnabled(true);
|
||||
|
||||
delete add_cart;
|
||||
}
|
||||
@@ -412,42 +276,50 @@ void RDCutDialog::addButtonData()
|
||||
|
||||
void RDCutDialog::okData()
|
||||
{
|
||||
RDListViewItem *cart_item=(RDListViewItem *)cut_cart_list->selectedItem();
|
||||
Q3ListViewItem *cut_item=cut_cut_list->selectedItem();
|
||||
if((cart_item==NULL)||(cut_item==NULL)) {
|
||||
if(cut_allow_clear) {
|
||||
*cut_cutname="";
|
||||
if(!local_filter) {
|
||||
*cut_filter=cut_filter_edit->text();
|
||||
}
|
||||
if(cut_group!=NULL) {
|
||||
*cut_group=cut_group_box->currentText();
|
||||
}
|
||||
if(cut_schedcode!=NULL) {
|
||||
*cut_schedcode=cut_schedcode_box->currentText();
|
||||
}
|
||||
SaveState();
|
||||
done(0);
|
||||
QModelIndexList rows=cart_cart_view->selectionModel()->selectedRows();
|
||||
|
||||
if((rows.size()==1)&&(cart_cart_model->isCut(rows.first()))) {
|
||||
SaveState();
|
||||
if(cart_filter!=NULL) {
|
||||
*cart_filter=cart_cart_filter->filterText();
|
||||
}
|
||||
*cart_cutname=cart_cart_model->cutName(rows.first());
|
||||
if(cart_temp_allowed!=NULL) {
|
||||
*cart_temp_allowed=false;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
*cut_cutname=cart_item->text(1)+QString("_")+cut_item->text(1);
|
||||
if(!local_filter) {
|
||||
*cut_filter=cut_filter_edit->text();
|
||||
}
|
||||
if(cut_group!=NULL) {
|
||||
*cut_group=cut_group_box->currentText();
|
||||
}
|
||||
SaveState();
|
||||
done(0);
|
||||
done(true);
|
||||
}
|
||||
|
||||
|
||||
void RDCutDialog::cancelData()
|
||||
{
|
||||
SaveState();
|
||||
done(1);
|
||||
done(false);
|
||||
}
|
||||
|
||||
|
||||
void RDCutDialog::resizeEvent(QResizeEvent *e)
|
||||
{
|
||||
int w=size().width();
|
||||
int h=size().height();
|
||||
|
||||
cart_cart_filter->setGeometry(0,0,w,cart_cart_filter->sizeHint().height());
|
||||
|
||||
cart_cart_view->setGeometry(10,cart_cart_filter->sizeHint().height(),
|
||||
w-20,h-cart_cart_filter->sizeHint().height()-70);
|
||||
|
||||
cart_add_button->setGeometry(10,size().height()-60,80,50);
|
||||
if(cart_allow_add) {
|
||||
cart_clear_button->setGeometry(100,size().height()-60,80,50);
|
||||
}
|
||||
else {
|
||||
cart_clear_button->setGeometry(10,size().height()-60,80,50);
|
||||
}
|
||||
|
||||
cart_ok_button->setGeometry(w-180,h-60,80,50);
|
||||
cart_cancel_button->setGeometry(w-90,h-60,80,50);
|
||||
}
|
||||
|
||||
|
||||
@@ -457,193 +329,29 @@ void RDCutDialog::closeEvent(QCloseEvent *e)
|
||||
}
|
||||
|
||||
|
||||
void RDCutDialog::RefreshCarts()
|
||||
{
|
||||
QString sql;
|
||||
RDSqlQuery *q;
|
||||
RDListViewItem *l;
|
||||
QString group=cut_group_box->currentText();
|
||||
|
||||
if(!cut_cutname->isEmpty()) {
|
||||
}
|
||||
cut_cart_list->clear();
|
||||
if(group==QString(tr("ALL"))) {
|
||||
group="";
|
||||
}
|
||||
QString schedcode="";
|
||||
if(cut_schedcode_box->currentText()!=tr("ALL")) {
|
||||
schedcode=cut_schedcode_box->currentText();
|
||||
}
|
||||
sql=QString().sprintf("select CART.NUMBER,CART.TITLE,CART.GROUP_NAME,\
|
||||
GROUPS.COLOR,CART.TYPE from CART left join GROUPS \
|
||||
on CART.GROUP_NAME=GROUPS.NAME \
|
||||
%s&&(CART.TYPE=%u)",
|
||||
(const char *)RDCartSearchText(cut_filter_edit->text(),
|
||||
group,schedcode.utf8(),
|
||||
false),
|
||||
RDCart::Audio);
|
||||
if(cut_exclude_tracks) {
|
||||
sql+="&&(CART.OWNER is null)";
|
||||
}
|
||||
if(cart_limit_box->isChecked()) {
|
||||
sql+=QString().sprintf(" limit %d",RD_LIMITED_CART_SEARCH_QUANTITY);
|
||||
}
|
||||
q=new RDSqlQuery(sql);
|
||||
int step=0;
|
||||
int count=0;
|
||||
cut_progress_dialog->setMaximum(q->size()/RDCUT_DIALOG_STEP_SIZE);
|
||||
cut_progress_dialog->setValue(0);
|
||||
while(q->next()) {
|
||||
l=new RDListViewItem(cut_cart_list);
|
||||
switch((RDCart::Type)q->value(4).toUInt()) {
|
||||
case RDCart::Audio:
|
||||
l->setPixmap(0,*cut_playout_map);
|
||||
break;
|
||||
|
||||
case RDCart::All:
|
||||
case RDCart::Macro:
|
||||
break;
|
||||
}
|
||||
l->setText(1,QString().sprintf("%06u",q->value(0).toUInt())); // Number
|
||||
|
||||
l->setText(2,q->value(1).toString()); // Title
|
||||
l->setText(3,q->value(2).toString()); // Group
|
||||
l->setTextColor(3,q->value(3).toString(),QFont::Bold);
|
||||
if(count++>RDCUT_DIALOG_STEP_SIZE) {
|
||||
cut_progress_dialog->setValue(++step);
|
||||
count=0;
|
||||
qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
|
||||
}
|
||||
}
|
||||
cut_progress_dialog->reset();
|
||||
delete q;
|
||||
cut_search_button->setDisabled(true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void RDCutDialog::RefreshCuts()
|
||||
|
||||
{
|
||||
QString sql;
|
||||
RDSqlQuery *q;
|
||||
Q3ListViewItem *l;
|
||||
Q3ListViewItem *cart_item=cut_cart_list->selectedItem();
|
||||
|
||||
cut_cut_list->clear();
|
||||
if(cart_item==NULL) {
|
||||
return;
|
||||
}
|
||||
sql=QString().sprintf("select DESCRIPTION,CUT_NAME from CUTS where \
|
||||
CART_NUMBER=%s",(const char *)cart_item->text(1));
|
||||
q=new RDSqlQuery(sql);
|
||||
while(q->next()) {
|
||||
l=new Q3ListViewItem(cut_cut_list);
|
||||
l->setText(0,q->value(0).toString()); // Description
|
||||
l->setText(1,QString().sprintf("%03u", // Cut Number
|
||||
q->value(1).toString().right(3).toUInt()));
|
||||
}
|
||||
delete q;
|
||||
}
|
||||
|
||||
|
||||
void RDCutDialog::SelectCut(QString cutname)
|
||||
{
|
||||
QString cart=cutname.left(6);
|
||||
QString cut=cutname.right(3);
|
||||
Q3ListViewItem *item=cut_cart_list->findItem(cart,1);
|
||||
if(item!=NULL) {
|
||||
cut_cart_list->setSelected(item,true);
|
||||
cut_cart_list->ensureItemVisible(item);
|
||||
}
|
||||
RefreshCuts();
|
||||
item=cut_cut_list->findItem(cut,1);
|
||||
if(item!=NULL) {
|
||||
cut_cut_list->setSelected(item,true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void RDCutDialog::BuildGroupList()
|
||||
{
|
||||
QString sql;
|
||||
RDSqlQuery *q;
|
||||
|
||||
cut_group_box->clear();
|
||||
cut_group_box->insertItem(tr("ALL"));
|
||||
if(rda->user()->name().isEmpty()) {
|
||||
sql="select NAME from GROUPS order by NAME desc";
|
||||
}
|
||||
else {
|
||||
sql=QString("select GROUP_NAME from USER_PERMS where ")+
|
||||
"USER_NAME=\""+RDEscapeString(rda->user()->name())+"\" "+
|
||||
"order by GROUP_NAME desc";
|
||||
}
|
||||
q=new RDSqlQuery(sql);
|
||||
while(q->next()) {
|
||||
cut_group_box->insertItem(q->value(0).toString(),true);
|
||||
}
|
||||
delete q;
|
||||
|
||||
//
|
||||
// Preselect Group
|
||||
//
|
||||
if(cut_group!=NULL) {
|
||||
for(int i=0;i<cut_group_box->count();i++) {
|
||||
if(*cut_group==cut_group_box->text(i)) {
|
||||
cut_group_box->setCurrentItem(i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Scheduler Codes
|
||||
//
|
||||
cut_schedcode_box->clear();
|
||||
cut_schedcode_box->insertItem(tr("ALL"));
|
||||
sql="select CODE from SCHED_CODES";
|
||||
q=new RDSqlQuery(sql);
|
||||
while(q->next()) {
|
||||
cut_schedcode_box->insertItem(q->value(0).toString());
|
||||
}
|
||||
delete q;
|
||||
|
||||
//
|
||||
// Preselect Scheduler Code
|
||||
//
|
||||
if(cut_schedcode!=NULL) {
|
||||
for(int i=0;i<cut_schedcode_box->count();i++) {
|
||||
if(*cut_schedcode==cut_schedcode_box->text(i)) {
|
||||
cut_schedcode_box->setCurrentItem(i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QString RDCutDialog::StateFile() {
|
||||
bool home_found = false;
|
||||
QString home = RDGetHomeDir(&home_found);
|
||||
if(home_found) {
|
||||
return QString().sprintf("%s/.rdcartdialog",(const char *)home);
|
||||
if (home_found) {
|
||||
return home+"/.rdcartdialog";
|
||||
}
|
||||
else {
|
||||
return NULL;
|
||||
}
|
||||
return QString();
|
||||
}
|
||||
|
||||
void RDCutDialog::LoadState()
|
||||
{
|
||||
QString state_file = StateFile();
|
||||
if(state_file.isEmpty()) {
|
||||
QString state_file=StateFile();
|
||||
if (state_file.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
RDProfile *p=new RDProfile();
|
||||
p->setSource(state_file);
|
||||
|
||||
bool value_read = false;
|
||||
cart_limit_box->setChecked(p->boolValue("RDCartDialog", "LimitSearch", true, &value_read));
|
||||
|
||||
cart_cart_filter->
|
||||
setLimitSearch(p->boolValue("RDCutDialog","LimitSearch",true));
|
||||
delete p;
|
||||
}
|
||||
|
||||
@@ -652,16 +360,16 @@ void RDCutDialog::SaveState()
|
||||
{
|
||||
FILE *f=NULL;
|
||||
|
||||
QString state_file = StateFile();
|
||||
if(state_file.isEmpty()) {
|
||||
QString state_file=StateFile();
|
||||
if (state_file.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if((f=fopen(state_file,"w"))==NULL) {
|
||||
return;
|
||||
}
|
||||
fprintf(f,"[RDCartDialog]\n");
|
||||
if(cart_limit_box->isChecked()) {
|
||||
fprintf(f,"[RDCutDialog]\n");
|
||||
if(cart_cart_filter->limitSearch()) {
|
||||
fprintf(f,"LimitSearch=Yes\n");
|
||||
}
|
||||
else {
|
||||
|
Reference in New Issue
Block a user