File indexing completed on 2024-04-28 05:38:14
0001 #include "campaignview.h" 0002 0003 #include <QContextMenuEvent> 0004 #include <QDebug> 0005 #include <QHeaderView> 0006 #include <QMenu> 0007 0008 #include "data/campaign.h" 0009 #include "data/media.h" 0010 #include "model/mediamodel.h" 0011 0012 #include "worker/utilshelper.h" 0013 0014 namespace campaign 0015 { 0016 CampaignView::CampaignView(QWidget* parent) : QTreeView(parent) 0017 { 0018 setAcceptDrops(true); 0019 setDragEnabled(true); 0020 setDropIndicatorShown(true); 0021 setDefaultDropAction(Qt::MoveAction); 0022 0023 setDragDropMode(QAbstractItemView::InternalMove); 0024 0025 m_addDirectoryAct= new QAction(tr("Add directory…"), this); 0026 m_deleteFileAct= new QAction(tr("Delete"), this); 0027 m_defineAsCurrent= new QAction(tr("Current Directory"), this); 0028 m_openAct= new QAction(tr("Open"), this); 0029 m_openAsAct= new QAction(tr("Open As…"), this); 0030 m_renameAct= new QAction(tr("Rename Media"), this); 0031 // columns 0032 m_nameColsAct= new QAction(tr("Name"), this); 0033 m_sizeColsAct= new QAction(tr("Size"), this); 0034 m_typeColsAct= new QAction(tr("Type"), this); 0035 m_addedColsAct= new QAction(tr("Date Added"), this); 0036 m_modifiedColsAct= new QAction(tr("Date Modified"), this); 0037 0038 m_nameColsAct->setCheckable(true); 0039 m_sizeColsAct->setCheckable(true); 0040 m_typeColsAct->setCheckable(true); 0041 m_addedColsAct->setCheckable(true); 0042 m_modifiedColsAct->setCheckable(true); 0043 0044 m_nameColsAct->setChecked(true); 0045 m_sizeColsAct->setChecked(true); 0046 m_typeColsAct->setChecked(true); 0047 m_addedColsAct->setChecked(true); 0048 m_modifiedColsAct->setChecked(true); 0049 0050 m_nameColsAct->setData(0); 0051 m_sizeColsAct->setData(1); 0052 m_typeColsAct->setData(2); 0053 m_addedColsAct->setData(3); 0054 m_modifiedColsAct->setData(4); 0055 0056 connect(m_addDirectoryAct, &QAction::triggered, this, &CampaignView::onAddChapter); 0057 connect(m_deleteFileAct, &QAction::triggered, this, 0058 [this]() 0059 { 0060 auto path= m_deleteFileAct->data().toString(); 0061 emit removeSelection(path); 0062 }); 0063 connect(m_defineAsCurrent, &QAction::triggered, this, 0064 [this]() 0065 { 0066 // TODO implementation ? 0067 }); 0068 0069 connect(m_openAct, &QAction::triggered, this, 0070 [this]() 0071 { 0072 if(m_index.isValid()) 0073 { 0074 auto path= m_index.data(MediaModel::Role_Path).toString(); 0075 auto id= m_index.data(MediaModel::Role_Uuid).toString(); 0076 emit openAs(id, path, helper::utils::extensionToContentType(path)); 0077 } 0078 }); 0079 connect(m_openAsAct, &QAction::triggered, this, 0080 [this]() 0081 { 0082 if(m_index.isValid()) 0083 { 0084 auto mediaNode= static_cast<MediaNode*>(m_index.internalPointer()); 0085 auto path= mediaNode->path(); 0086 auto id= mediaNode->uuid(); 0087 auto act= qobject_cast<QAction*>(sender()); 0088 if(act) 0089 { 0090 emit openAs(id, path, qvariant_cast<Core::ContentType>(act->data())); 0091 } 0092 } 0093 }); 0094 0095 connect(m_renameAct, &QAction::triggered, this, 0096 [this]() 0097 { 0098 if(m_index.isValid() && m_index.column() == 0) 0099 { 0100 edit(m_index); 0101 } 0102 }); 0103 0104 auto hideshowCol= [this]() 0105 { 0106 auto act= qobject_cast<QAction*>(sender()); 0107 auto col= act->data().toInt(); 0108 act->isChecked() ? showColumn(col) : hideColumn(col); 0109 }; 0110 connect(m_nameColsAct, &QAction::triggered, this, hideshowCol); 0111 connect(m_sizeColsAct, &QAction::triggered, this, hideshowCol); 0112 connect(m_typeColsAct, &QAction::triggered, this, hideshowCol); 0113 connect(m_addedColsAct, &QAction::triggered, this, hideshowCol); 0114 connect(m_modifiedColsAct, &QAction::triggered, this, hideshowCol); 0115 0116 setEditTriggers(QAbstractItemView::NoEditTriggers); 0117 0118 // Init hash 0119 0120 auto notes= new QAction(tr("Notes"), this); 0121 notes->setData(QVariant::fromValue(Core::ContentType::NOTES)); 0122 0123 auto sharedNote= new QAction(tr("Shared Notes"), this); 0124 sharedNote->setData(QVariant::fromValue(Core::ContentType::SHAREDNOTE)); 0125 0126 m_convertionHash.insert(Core::MediaType::TextFile, {notes, sharedNote}); 0127 } 0128 0129 void CampaignView::startDrag(Qt::DropActions supportedActions) 0130 { 0131 QModelIndexList indexes= selectionModel()->selectedRows(); 0132 0133 QMimeData* mimeData= model()->mimeData(indexes); 0134 if(nullptr == mimeData) 0135 return; 0136 0137 QDrag* drag= new QDrag(this); 0138 drag->setMimeData(mimeData); 0139 Qt::DropAction defaultDropAction= Qt::MoveAction; 0140 0141 drag->exec(supportedActions, defaultDropAction); 0142 } 0143 void CampaignView::contextMenuEvent(QContextMenuEvent* event) 0144 { 0145 m_index= indexAt(event->pos()); 0146 0147 qDebug() << m_index << event->pos(); 0148 0149 auto nodeType= m_index.data(MediaModel::Role_Type).value<Core::MediaType>(); 0150 auto isDir= m_index.data(MediaModel::Role_IsDir).toBool(); 0151 auto path= m_index.data(MediaModel::Role_Path).toString(); 0152 0153 QMenu popMenu(this); 0154 0155 popMenu.addAction(m_openAct); 0156 auto openAs= popMenu.addMenu(tr("Open As…")); 0157 if(!isDir) 0158 addOpenAsActs(openAs, nodeType); 0159 popMenu.addSeparator(); 0160 popMenu.addAction(m_addDirectoryAct); 0161 popMenu.addAction(m_deleteFileAct); 0162 popMenu.addAction(m_renameAct); 0163 popMenu.addSeparator(); 0164 auto cols= popMenu.addMenu(tr("Show/hide Column")); 0165 cols->addAction(m_nameColsAct); 0166 cols->addAction(m_sizeColsAct); 0167 cols->addAction(m_typeColsAct); 0168 cols->addAction(m_addedColsAct); 0169 cols->addAction(m_modifiedColsAct); 0170 0171 popMenu.addAction(m_defineAsCurrent); 0172 0173 auto isVoid= !m_index.isValid(); 0174 0175 m_addDirectoryAct->setEnabled(isDir || isVoid); 0176 m_deleteFileAct->setEnabled(!isVoid); 0177 m_deleteFileAct->setData(path); 0178 m_defineAsCurrent->setEnabled(isDir); 0179 m_renameAct->setEnabled(!isVoid); 0180 m_openAct->setEnabled(!isDir && !isVoid); 0181 openAs->setEnabled(!isDir && !isVoid); 0182 0183 popMenu.exec(QCursor::pos()); 0184 } 0185 void CampaignView::mouseDoubleClickEvent(QMouseEvent* event) 0186 { 0187 QModelIndex index= indexAt(event->pos()); 0188 if(!index.isValid()) 0189 return; 0190 0191 // emit onDoubleClick(index); 0192 QTreeView::mouseDoubleClickEvent(event); 0193 } 0194 0195 void CampaignView::onAddChapter() 0196 { 0197 // QModelIndex index= indexAt(m_pointClick); 0198 0199 // emit addChapter(index); 0200 } 0201 0202 void CampaignView::setCurrentChapter(const QString& chapter) 0203 { 0204 // if() 0205 } 0206 0207 QModelIndexList CampaignView::getSelection() const 0208 { 0209 return selectionModel()->selectedRows(); 0210 } 0211 0212 QString CampaignView::currentChapter() const 0213 { 0214 return {}; 0215 } 0216 0217 void CampaignView::setCampaign(Campaign* campaign) 0218 { 0219 m_campaign= campaign; 0220 } 0221 0222 void CampaignView::addOpenAsActs(QMenu* menu, Core::MediaType type) 0223 { 0224 menu->setEnabled(false); 0225 auto const& values= m_convertionHash.value(type); 0226 0227 if(values.isEmpty()) 0228 return; 0229 0230 menu->setEnabled(true); 0231 for(auto val : values) 0232 { 0233 menu->addAction(val); 0234 } 0235 } 0236 } // namespace campaign