diff --git a/ChangeLog b/ChangeLog index dacfff51..2cc27d70 100644 --- a/ChangeLog +++ b/ChangeLog @@ -21009,3 +21009,7 @@ 2021-02-05 Fred Gleason * Refactored the CD track ripper in rdlibrary(1) to use the model-based API. +2021-02-05 Fred Gleason + * Added 'RDMacroCartModel' + * Refactored the macro cart editor dialog in rdlibrary(1) to use the + model-based API. diff --git a/lib/Makefile.am b/lib/Makefile.am index d5390a95..c1f28610 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -187,6 +187,7 @@ dist_librd_la_SOURCES = dbversion.h\ rdlogplay.cpp rdlogplay.h\ rdmacro.cpp rdmacro.h\ rdmacro_event.cpp rdmacro_event.h\ + rdmacrocartmodel.cpp rdmacrocartmodel.h\ rdmarker_bar.cpp rdmarker_bar.h\ rdmarker_button.cpp rdmarker_button.h\ rdmarker_edit.cpp rdmarker_edit.h\ @@ -361,6 +362,7 @@ nodist_librd_la_SOURCES = moc_rd3emptycart.cpp\ moc_rdlogmodel.cpp\ moc_rdlogplay.cpp\ moc_rdmacro_event.cpp\ + moc_rdmacrocartmodel.cpp\ moc_rdmarker_bar.cpp\ moc_rdmarker_edit.cpp\ moc_rdmatrixlistmodel.cpp\ diff --git a/lib/lib.pro b/lib/lib.pro index a3d5733a..1b47c31c 100644 --- a/lib/lib.pro +++ b/lib/lib.pro @@ -141,6 +141,7 @@ SOURCES += rdlogmodel.cpp SOURCES += rdlogplay.cpp SOURCES += rdmacro.cpp SOURCES += rdmacro_event.cpp +SOURCES += rdmacrocartmodel.cpp SOURCES += rdmarker_button.cpp SOURCES += rdmarker_edit.cpp SOURCES += rdmatrix.cpp @@ -316,6 +317,7 @@ HEADERS += rdlogmodel.h HEADERS += rdlogplay.h HEADERS += rdmacro.h HEADERS += rdmacro_event.h +HEADERS += rdmacrocartmodel.h HEADERS += rdmarker_button.h HEADERS += rdmarker_edit.h HEADERS += rdmatrix.h diff --git a/lib/librd_cs.ts b/lib/librd_cs.ts index a355a49b..112576b1 100644 --- a/lib/librd_cs.ts +++ b/lib/librd_cs.ts @@ -3406,6 +3406,21 @@ Bitte Kofiguration prüfen und erneut versuchen. + + RDMacroCartModel + + Line + + + + Command + + + + --- End of Cart --- + + + RDMatrixListModel diff --git a/lib/librd_de.ts b/lib/librd_de.ts index 87f0257c..0b3b58dc 100644 --- a/lib/librd_de.ts +++ b/lib/librd_de.ts @@ -3395,6 +3395,21 @@ Bitte Kofiguration prüfen und erneut versuchen. + + RDMacroCartModel + + Line + + + + Command + + + + --- End of Cart --- + + + RDMatrixListModel diff --git a/lib/librd_es.ts b/lib/librd_es.ts index 60b295ac..6b6dfe67 100644 --- a/lib/librd_es.ts +++ b/lib/librd_es.ts @@ -3382,6 +3382,21 @@ Do you still want to proceed? + + RDMacroCartModel + + Line + + + + Command + + + + --- End of Cart --- + + + RDMatrixListModel diff --git a/lib/librd_fr.ts b/lib/librd_fr.ts index 697aded3..0846541e 100644 --- a/lib/librd_fr.ts +++ b/lib/librd_fr.ts @@ -2810,6 +2810,21 @@ Do you want to overwrite it? + + RDMacroCartModel + + Line + + + + Command + + + + --- End of Cart --- + + + RDMatrixListModel diff --git a/lib/librd_nb.ts b/lib/librd_nb.ts index 9eb57a7a..763b6576 100644 --- a/lib/librd_nb.ts +++ b/lib/librd_nb.ts @@ -3349,6 +3349,21 @@ Sjekk eksportoppsettet ditt og prøv att. + + RDMacroCartModel + + Line + + + + Command + + + + --- End of Cart --- + + + RDMatrixListModel diff --git a/lib/librd_nn.ts b/lib/librd_nn.ts index 9eb57a7a..763b6576 100644 --- a/lib/librd_nn.ts +++ b/lib/librd_nn.ts @@ -3349,6 +3349,21 @@ Sjekk eksportoppsettet ditt og prøv att. + + RDMacroCartModel + + Line + + + + Command + + + + --- End of Cart --- + + + RDMatrixListModel diff --git a/lib/librd_pt_BR.ts b/lib/librd_pt_BR.ts index d12af722..4cabf6bc 100644 --- a/lib/librd_pt_BR.ts +++ b/lib/librd_pt_BR.ts @@ -3384,6 +3384,21 @@ Por Favor, cheque suas configurações e tenbte outra vez. + + RDMacroCartModel + + Line + + + + Command + + + + --- End of Cart --- + + + RDMatrixListModel diff --git a/lib/rdmacrocartmodel.cpp b/lib/rdmacrocartmodel.cpp index e69de29b..4bf21331 100644 --- a/lib/rdmacrocartmodel.cpp +++ b/lib/rdmacrocartmodel.cpp @@ -0,0 +1,249 @@ +// rdmacrocartmodel.cpp +// +// Data model for Rivendell services +// +// (C) Copyright 2021 Fred Gleason +// +// 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 +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public +// License along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// + +#include "rdapplication.h" +#include "rdescape_string.h" +#include "rdmacrocartmodel.h" + +RDMacroCartModel::RDMacroCartModel(unsigned cartnum,QObject *parent) + : QAbstractTableModel(parent) +{ + d_cart_number=cartnum; + + // + // Column Attributes + // + unsigned left=Qt::AlignLeft|Qt::AlignVCenter; + // unsigned center=Qt::AlignCenter; + unsigned right=Qt::AlignRight|Qt::AlignVCenter; + + d_headers.push_back(tr("Line")); + d_alignments.push_back(right); + + d_headers.push_back(tr("Command")); + d_alignments.push_back(left); + + updateModel(); +} + + +RDMacroCartModel::~RDMacroCartModel() +{ +} + + +QPalette RDMacroCartModel::palette() +{ + return d_palette; +} + + +void RDMacroCartModel::setPalette(const QPalette &pal) +{ + d_palette=pal; +} + + +void RDMacroCartModel::setFont(const QFont &font) +{ + d_font=font; + d_bold_font=font; + d_bold_font.setWeight(QFont::Bold); +} + + +int RDMacroCartModel::columnCount(const QModelIndex &parent) const +{ + return d_headers.size(); +} + + +int RDMacroCartModel::rowCount(const QModelIndex &parent) const +{ + return d_texts.size(); +} + + +QVariant RDMacroCartModel::headerData(int section,Qt::Orientation orient, + int role) const +{ + if((orient==Qt::Horizontal)&&(role==Qt::DisplayRole)) { + return d_headers.at(section); + } + return QVariant(); +} + + +QVariant RDMacroCartModel::data(const QModelIndex &index,int role) const +{ + QString str; + int col=index.column(); + int row=index.row(); + + if(row list; + for(int i=0;i texts; + for(int i=0;ifirst()) { + QStringList f0=q->value(0).toString().split("!",QString::SkipEmptyParts); + for(int i=0;i +// +// 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 +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public +// License along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// + +#ifndef RDMACROCARTMODEL_H +#define RDMACROCARTMODEL_H + +#include +#include +#include +#include + +#include +#include + +class RDMacroCartModel : public QAbstractTableModel +{ + Q_OBJECT + public: + RDMacroCartModel(unsigned cartnum,QObject *parent=0); + ~RDMacroCartModel(); + QPalette palette(); + void setPalette(const QPalette &pal); + void setFont(const QFont &font); + int columnCount(const QModelIndex &parent=QModelIndex()) const; + int rowCount(const QModelIndex &parent=QModelIndex()) const; + QVariant headerData(int section,Qt::Orientation orient, + int role=Qt::DisplayRole) const; + QVariant data(const QModelIndex &index,int role=Qt::DisplayRole) const; + unsigned cartNumber() const; + int lineCount() const; + bool isEndHandle(const QModelIndex &row) const; + QString code(const QModelIndex &row) const; + QString allCode() const; + QModelIndex addLine(const QModelIndex &row,const QString &rml); + void removeLine(const QModelIndex &row); + void refresh(const QModelIndex &row,const QString &rml); + void save() const; + + protected: + void updateModel(); + + + private: + QPalette d_palette; + QFont d_font; + QFont d_bold_font; + QList d_headers; + QList d_alignments; + QList > d_texts; + unsigned d_cart_number; +}; + + +#endif // RDMACROCARTMODEL_H diff --git a/rdlibrary/edit_macro.cpp b/rdlibrary/edit_macro.cpp index f4eb8e5e..40e29de4 100644 --- a/rdlibrary/edit_macro.cpp +++ b/rdlibrary/edit_macro.cpp @@ -2,7 +2,7 @@ // // Edit a Rivendell Macro // -// (C) Copyright 2002-2019 Fred Gleason +// (C) Copyright 2002-2021 Fred Gleason // // 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 @@ -18,26 +18,23 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -#include +#include #include "edit_macro.h" -EditMacro::EditMacro(RDMacro *cmd,bool highlight,QWidget *parent) +EditMacro::EditMacro(QWidget *parent) : RDDialog(parent) { - setModal(true); - // // Fix the Window Size // setMinimumSize(sizeHint()); - setMaximumSize(sizeHint()); + setMaximumHeight(sizeHint().height()); + setWindowTitle("RDLibrary - Edit Macro"); // // Macro // - edit_macro=cmd; - edit_macro_edit=new QLineEdit(this); edit_macro_edit->setMaxLength(RD_RML_MAX_LENGTH-1); @@ -57,11 +54,6 @@ EditMacro::EditMacro(RDMacro *cmd,bool highlight,QWidget *parent) edit_cancel_button->setFont(buttonFont()); edit_cancel_button->setText(tr("&Cancel")); connect(edit_cancel_button,SIGNAL(clicked()),this,SLOT(cancelData())); - - edit_macro_edit->setText(edit_macro->toString()); - if(highlight) { - edit_macro_edit->selectAll(); - } } @@ -77,16 +69,29 @@ QSizePolicy EditMacro::sizePolicy() const } +int EditMacro::exec(QString *code,bool highlight) +{ + edit_code=code; + + edit_macro_edit->setText(*code); + if(highlight) { + edit_macro_edit->selectAll(); + } + + return QDialog::exec(); +} + + void EditMacro::okData() { - *edit_macro=RDMacro::fromString(edit_macro_edit->text()); - done(0); + *edit_code=edit_macro_edit->text(); + done(true); } void EditMacro::cancelData() { - done(-1); + done(false); } @@ -99,6 +104,7 @@ void EditMacro::closeEvent(QCloseEvent *e) void EditMacro::resizeEvent(QResizeEvent *e) { edit_macro_edit->setGeometry(10,11,size().width()-20,19); + edit_ok_button->setGeometry(size().width()-180,size().height()-60,80,50); edit_cancel_button->setGeometry(size().width()-90,size().height()-60,80,50); } diff --git a/rdlibrary/edit_macro.h b/rdlibrary/edit_macro.h index 18c099e8..9891a3a9 100644 --- a/rdlibrary/edit_macro.h +++ b/rdlibrary/edit_macro.h @@ -2,7 +2,7 @@ // // Edit a Rivendell Macro // -// (C) Copyright 2002-2019 Fred Gleason +// (C) Copyright 2002-2021 Fred Gleason // // 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,7 +21,7 @@ #ifndef EDIT_MACRO_H #define EDIT_MACRO_H -#include +#include #include #include @@ -30,10 +30,13 @@ class EditMacro : public RDDialog { Q_OBJECT public: - EditMacro(RDMacro *cmd,bool highlight,QWidget *parent=0); + EditMacro(QWidget *parent=0); QSize sizeHint() const; QSizePolicy sizePolicy() const; + public slots: + int exec(QString *code,bool highlight); + private slots: void okData(); void cancelData(); @@ -46,9 +49,8 @@ class EditMacro : public RDDialog QLineEdit *edit_macro_edit; QPushButton *edit_ok_button; QPushButton *edit_cancel_button; - RDMacro *edit_macro; + QString *edit_code; }; -#endif - +#endif // EDIT_MACRO_H diff --git a/rdlibrary/macro_cart.cpp b/rdlibrary/macro_cart.cpp index 7db5122c..2e03139e 100644 --- a/rdlibrary/macro_cart.cpp +++ b/rdlibrary/macro_cart.cpp @@ -2,7 +2,7 @@ // // The macro cart editor for RDLibrary. // -// (C) Copyright 2002-2019 Fred Gleason +// (C) Copyright 2002-2021 Fred Gleason // // 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 @@ -31,10 +31,16 @@ MacroCart::MacroCart(RDCart *cart,QWidget *parent) { rdcart_length=0; rdcart_cart=cart; - setCaption(QString().sprintf("%u",rdcart_cart->number())+" - "+ - rdcart_cart->title()); rdcart_allow_modification=rda->user()->modifyCarts(); + setWindowTitle(QString().sprintf("%u",rdcart_cart->number())+" - "+ + rdcart_cart->title()); + + // + // Dialogs + // + rdcart_edit_macro_dialog=new EditMacro(this); + // // Add Macro Button // @@ -80,33 +86,26 @@ MacroCart::MacroCart(RDCart *cart,QWidget *parent) // Cart Macro List // rdcart_events=new RDMacroEvent(rda->station()->address(),rda->ripc(),this); - rdcart_events->load(rdcart_cart->macros()); + // rdcart_events->load(rdcart_cart->macros()); - rdcart_macro_list=new Q3ListView(this); - rdcart_macro_list->setGeometry(100,0,430,sizeHint().height()); - rdcart_macro_list->setAllColumnsShowFocus(true); - rdcart_macro_list->setItemMargin(5); - rdcart_macro_list->setSorting(-1); - connect(rdcart_macro_list, - SIGNAL(selectionChanged(Q3ListViewItem *)), + rdcart_macro_view=new RDTableView(this); + rdcart_macro_view->setSelectionMode(QAbstractItemView::SingleSelection); + rdcart_macro_view->setGeometry(100,0,430,sizeHint().height()); + rdcart_macro_model=new RDMacroCartModel(cart->number(),this); + rdcart_macro_model->setFont(defaultFont()); + rdcart_macro_model->setPalette(palette()); + rdcart_macro_view->setModel(rdcart_macro_model); + connect(rdcart_macro_view,SIGNAL(doubleClicked(const QModelIndex &)), + this,SLOT(doubleClickedData(const QModelIndex &))); + connect(rdcart_macro_view->selectionModel(), + SIGNAL(selectionChanged(const QItemSelection &, + const QItemSelection &)), this, - SLOT(selectionChangedData(Q3ListViewItem *))); - connect(rdcart_macro_list, - SIGNAL(doubleClicked(Q3ListViewItem *)), - this, - SLOT(doubleClickedData(Q3ListViewItem *))); - - rdcart_macro_list->addColumn(tr("Line")); - rdcart_macro_list->setColumnAlignment(0,Qt::AlignHCenter); - - rdcart_macro_list->addColumn(tr("Command")); - rdcart_macro_list->setColumnAlignment(1,Qt::AlignLeft); - - rdcart_macro_list_label=new QLabel(rdcart_macro_list,tr("Macros"),this); - rdcart_macro_list_label->setGeometry(105,345,430,22); - rdcart_macro_list_label->setFont(progressFont()); - - RefreshList(); + SLOT(selectionChangedData(const QItemSelection &, + const QItemSelection &))); + connect(rdcart_macro_model,SIGNAL(modelReset()), + rdcart_macro_view,SLOT(resizeColumnsToContents())); + rdcart_macro_view->resizeColumnsToContents(); // // Edit Macro Button @@ -141,6 +140,12 @@ MacroCart::MacroCart(RDCart *cart,QWidget *parent) } +MacroCart::~MacroCart() +{ + delete rdcart_edit_macro_dialog; +} + + QSize MacroCart::sizeHint() const { return QSize(640,290); @@ -161,116 +166,110 @@ unsigned MacroCart::length() void MacroCart::save() { - rdcart_cart->setMacros(rdcart_events->save()); + rdcart_macro_model->save(); } void MacroCart::addMacroData() { - Q3ListViewItem *item=rdcart_macro_list->selectedItem(); - RDMacro cmd; - unsigned line; + QString code; + QModelIndexList rows=rdcart_macro_view->selectionModel()->selectedRows(); - if(item==NULL||item->text(0).isEmpty()) { - line=rdcart_events->size(); + if((rows.size()!=1)||(!rdcart_allow_modification)) { + return; } - else { - line=item->text(0).toUInt()-1; - } - EditMacro *edit=new EditMacro(&cmd,true,this); - if(edit->exec()!=-1) { - AddLine(line,&cmd); + + if(rdcart_edit_macro_dialog->exec(&code,true)) { + rdcart_macro_model->addLine(rows.first(),code); UpdateLength(); } - delete edit; } void MacroCart::deleteMacroData() { - Q3ListViewItem *item=rdcart_macro_list->selectedItem(); + QModelIndexList rows=rdcart_macro_view->selectionModel()->selectedRows(); - if((item==NULL)||(item->text(0).isEmpty())) { + if((rows.size()!=1)||(!rdcart_allow_modification)) { return; } - DeleteLine(item); + rdcart_macro_model->removeLine(rows.first()); UpdateLength(); } void MacroCart::copyMacroData() { - Q3ListViewItem *item=rdcart_macro_list->selectedItem(); + QModelIndexList rows=rdcart_macro_view->selectionModel()->selectedRows(); - if((item==NULL)||(item->text(0).isEmpty())) { + if((rows.size()!=1)||(!rdcart_allow_modification)) { return; } - rdcart_clipboard=*rdcart_events->command(item->text(0).toUInt()-1); + rdcart_clipboard=rdcart_macro_model->code(rows.first()); paste_macro_button->setEnabled(rdcart_allow_modification); } void MacroCart::pasteMacroData() { - Q3ListViewItem *item=rdcart_macro_list->selectedItem(); - unsigned line; + QModelIndexList rows=rdcart_macro_view->selectionModel()->selectedRows(); - if(item==NULL) { + if((rows.size()!=1)||(!rdcart_allow_modification)) { return; } - if(item->text(0).isEmpty()) { - line=rdcart_events->size(); + QModelIndex row= + rdcart_macro_model->addLine(rows.first(),rdcart_clipboard); + if(row.isValid()) { + rdcart_macro_view->selectRow(row.row()); } - else { - line=item->text(0).toUInt()-1; - } - AddLine(line,&rdcart_clipboard); UpdateLength(); } void MacroCart::editMacroData() { - Q3ListViewItem *item=rdcart_macro_list->selectedItem(); - - if((item==NULL)||(item->text(0).isEmpty())) { + QModelIndexList rows=rdcart_macro_view->selectionModel()->selectedRows(); + if((rows.size()!=1)||(!rdcart_allow_modification)|| + rdcart_macro_model->isEndHandle(rows.first())) { return; } - unsigned line=item->text(0).toUInt()-1; - EditMacro *edit=new EditMacro(rdcart_events->command(line),false,this); - if(edit->exec()!=-1) { - RefreshLine(item); + QString code=rdcart_macro_model->code(rows.first()); + if(rdcart_edit_macro_dialog->exec(&code,false)) { + rdcart_macro_model->refresh(rows.first(),code); UpdateLength(); } - delete edit; } void MacroCart::runLineMacroData() { - Q3ListViewItem *item=rdcart_macro_list->selectedItem(); + QModelIndexList rows=rdcart_macro_view->selectionModel()->selectedRows(); - if((item==NULL)||(item->text(0).isEmpty())) { + if(rows.size()!=1) { return; } - unsigned line=item->text(0).toUInt()-1; - rdcart_events->exec(line); + rdcart_events->load(rdcart_macro_model->code(rows.first())); + rdcart_events->exec(); } void MacroCart::runCartMacroData() { + rdcart_events->load(rdcart_macro_model->allCode()); rdcart_events->exec(); } -void MacroCart::selectionChangedData(Q3ListViewItem *item) +void MacroCart::selectionChangedData(const QItemSelection &before, + const QItemSelection &after) { - rdcart_add_button->setEnabled(rdcart_allow_modification); + QModelIndexList rows=rdcart_macro_view->selectionModel()->selectedRows(); + + rdcart_add_button->setEnabled((rows.size()==1)&&rdcart_allow_modification); if(!rdcart_clipboard.isNull()) { - paste_macro_button->setEnabled(rdcart_allow_modification); + paste_macro_button->setEnabled((rows.size()==1)&&rdcart_allow_modification); } - if(!item->text(0).isEmpty()) { + if((rows.size()>0)&&(!rdcart_macro_model->isEndHandle(rows.first()))) { rdcart_runline_button->setEnabled(rdcart_allow_modification); rdcart_delete_button->setEnabled(rdcart_allow_modification); rdcart_copy_button->setEnabled(rdcart_allow_modification); @@ -285,10 +284,11 @@ void MacroCart::selectionChangedData(Q3ListViewItem *item) } -void MacroCart::doubleClickedData(Q3ListViewItem *item) +void MacroCart::doubleClickedData(const QModelIndex &index) { if(rdcart_allow_modification) { - if((item==NULL)||(item->text(0).isEmpty())) { + QModelIndexList rows=rdcart_macro_view->selectionModel()->selectedRows(); + if((rows.size()==1)&&rdcart_macro_model->isEndHandle(rows.first())) { addMacroData(); } else { @@ -298,97 +298,6 @@ void MacroCart::doubleClickedData(Q3ListViewItem *item) } -void MacroCart::RefreshList() -{ - Q3ListViewItem *item=NULL; - Q3ListViewItem *selected; - QString line; - - selected=rdcart_macro_list->selectedItem(); - if(selected!=NULL) { - line=selected->text(0); - } - - rdcart_macro_list->clear(); - for(int i=0;isize();i++) { - item=new Q3ListViewItem(rdcart_macro_list); - item->setText(0,QString().sprintf("%03d",i+1)); - item->setText(1,rdcart_events->command(i)->toString()); - } - SortLines(); - if(item!=NULL) { - item=new Q3ListViewItem(rdcart_macro_list,item); - } - else { - item=new Q3ListViewItem(rdcart_macro_list); - } - item->setText(1,tr("--- End of Cart ---")); - - if (!line.isEmpty()) { - selected=rdcart_macro_list->findItem(line,0); - if(selected!=NULL) { - rdcart_macro_list->setSelected(selected,true); - } - } -} - - -void MacroCart::RefreshLine(Q3ListViewItem *item) -{ - int line=item->text(0).toInt()-1; - item->setText(1,rdcart_events->command(line)->toString()); -} - - -void MacroCart::SortLines() -{ - rdcart_macro_list->setSorting(0); - rdcart_macro_list->sort(); - rdcart_macro_list->setSorting(-1); -} - -void MacroCart::AddLine(unsigned line,RDMacro *cmd) -{ - unsigned curr_line; - - Q3ListViewItem *item=rdcart_macro_list->firstChild(); - for(int i=0;ichildCount();i++) { - if(((curr_line=(item->text(0).toUInt()-1))>=line)&& - (!item->text(0).isEmpty())) { - item->setText(0,QString().sprintf("%03u",curr_line+2)); - } - item=item->nextSibling(); - } - rdcart_events->insert(line,cmd); - item=new Q3ListViewItem(rdcart_macro_list); - item->setText(0,QString().sprintf("%03u",line+1)); - item->setText(1,rdcart_events->command(line)->toString()); - rdcart_macro_list->setSelected(item,true); - RefreshList(); -} - - -void MacroCart::DeleteLine(Q3ListViewItem *item) -{ - unsigned line=item->text(0).toUInt()-1; - unsigned curr_line; - Q3ListViewItem *next=item->nextSibling(); - rdcart_macro_list->removeItem(item); - rdcart_events->remove(line); - Q3ListViewItem *l=rdcart_macro_list->firstChild(); - for(int i=0;ichildCount();i++) { - if(((curr_line=(l->text(0).toUInt()-1))>line)&& - (!l->text(0).isEmpty())) { - l->setText(0,QString().sprintf("%03u",curr_line)); - } - l=l->nextSibling(); - } - if(next!=NULL) { - rdcart_macro_list->setSelected(next,true); - } -} - - void MacroCart::UpdateLength() { if(rdcart_events->length()!=rdcart_length) { diff --git a/rdlibrary/macro_cart.h b/rdlibrary/macro_cart.h index e3979f08..2fd336ac 100644 --- a/rdlibrary/macro_cart.h +++ b/rdlibrary/macro_cart.h @@ -2,7 +2,7 @@ // // The macro cart editor for RDLibrary. // -// (C) Copyright 2002-2019 Fred Gleason +// (C) Copyright 2002-2021 Fred Gleason // // 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 @@ -25,8 +25,11 @@ #include #include +#include +#include #include +#include "edit_macro.h" #include "globals.h" class MacroCart : public RDWidget @@ -34,6 +37,7 @@ class MacroCart : public RDWidget Q_OBJECT public: MacroCart(RDCart *cart,QWidget *parent=0); + ~MacroCart(); QSize sizeHint() const; QSizePolicy sizePolicy() const; unsigned length(); @@ -50,21 +54,19 @@ class MacroCart : public RDWidget void editMacroData(); void runLineMacroData(); void runCartMacroData(); - void selectionChangedData(Q3ListViewItem *); - void doubleClickedData(Q3ListViewItem *); + void selectionChangedData(const QItemSelection &before, + const QItemSelection &after); + void doubleClickedData(const QModelIndex &index); private: - void RefreshList(); - void RefreshLine(Q3ListViewItem *item); - void AddLine(unsigned line,RDMacro *cmd); - void DeleteLine(Q3ListViewItem *item); void UpdateLength(); - void SortLines(); RDCart *rdcart_cart; - Q3ListView *rdcart_macro_list; + EditMacro *rdcart_edit_macro_dialog; + RDTableView *rdcart_macro_view; + RDMacroCartModel *rdcart_macro_model; QLabel *rdcart_macro_list_label; RDMacroEvent *rdcart_events; - RDMacro rdcart_clipboard; + QString rdcart_clipboard; QPushButton *paste_macro_button; QPushButton *rdcart_add_button; QPushButton *rdcart_delete_button; @@ -77,5 +79,4 @@ class MacroCart : public RDWidget }; -#endif - +#endif // MACRO_CART_H diff --git a/rdlibrary/rdlibrary_cs.ts b/rdlibrary/rdlibrary_cs.ts index dd893ac0..47685d48 100644 --- a/rdlibrary/rdlibrary_cs.ts +++ b/rdlibrary/rdlibrary_cs.ts @@ -1060,7 +1060,7 @@ poznámky Macros - Makra + Makra Edit @@ -1082,18 +1082,6 @@ vozík --- End of cart --- --- Konec vozíku --- - - Line - - - - Command - - - - --- End of Cart --- - - MainWidget diff --git a/rdlibrary/rdlibrary_de.ts b/rdlibrary/rdlibrary_de.ts index ac86ce08..3736b739 100644 --- a/rdlibrary/rdlibrary_de.ts +++ b/rdlibrary/rdlibrary_de.ts @@ -1048,7 +1048,7 @@ Notes Macros - Makros + Makros Edit @@ -1070,18 +1070,6 @@ starten --- End of cart --- --- Ende des Carts --- - - Line - - - - Command - - - - --- End of Cart --- - - MainWidget diff --git a/rdlibrary/rdlibrary_es.ts b/rdlibrary/rdlibrary_es.ts index 0f575253..4802d6c2 100644 --- a/rdlibrary/rdlibrary_es.ts +++ b/rdlibrary/rdlibrary_es.ts @@ -1057,7 +1057,7 @@ Notas Macros - Macros + Macros Edit @@ -1079,18 +1079,6 @@ Cartucho --- End of cart --- --- Fin del cartucho --- - - Line - - - - Command - - - - --- End of Cart --- - - MainWidget diff --git a/rdlibrary/rdlibrary_fr.ts b/rdlibrary/rdlibrary_fr.ts index 7223246d..df35cdb1 100644 --- a/rdlibrary/rdlibrary_fr.ts +++ b/rdlibrary/rdlibrary_fr.ts @@ -741,10 +741,6 @@ Notes Paste - - Macros - - Edit @@ -759,18 +755,6 @@ Line Cart - - Line - - - - Command - - - - --- End of Cart --- - - MainWidget diff --git a/rdlibrary/rdlibrary_nb.ts b/rdlibrary/rdlibrary_nb.ts index f571a15c..b0bdfa35 100644 --- a/rdlibrary/rdlibrary_nb.ts +++ b/rdlibrary/rdlibrary_nb.ts @@ -1040,7 +1040,7 @@ Notes Macros - Makroar + Makroar Edit @@ -1062,18 +1062,6 @@ korg --- End of cart --- --- Slutten på korga --- - - Line - - - - Command - - - - --- End of Cart --- - - MainWidget diff --git a/rdlibrary/rdlibrary_nn.ts b/rdlibrary/rdlibrary_nn.ts index f571a15c..b0bdfa35 100644 --- a/rdlibrary/rdlibrary_nn.ts +++ b/rdlibrary/rdlibrary_nn.ts @@ -1040,7 +1040,7 @@ Notes Macros - Makroar + Makroar Edit @@ -1062,18 +1062,6 @@ korg --- End of cart --- --- Slutten på korga --- - - Line - - - - Command - - - - --- End of Cart --- - - MainWidget diff --git a/rdlibrary/rdlibrary_pt_BR.ts b/rdlibrary/rdlibrary_pt_BR.ts index ca0b685e..7b39b808 100644 --- a/rdlibrary/rdlibrary_pt_BR.ts +++ b/rdlibrary/rdlibrary_pt_BR.ts @@ -1042,7 +1042,7 @@ limite do sistema! Você ainda quer salvar? Macros - Macros + Macros Edit @@ -1064,18 +1064,6 @@ Cartão --- End of cart --- -- Fim do Cartão -- - - Line - - - - Command - - - - --- End of Cart --- - - MainWidget