# # # patch "src/view/WorkspaceView.cpp" # from [5cf0e91b0d4a649bae61028f6fa36b0b233b9684] # to [fe6bb3821231eb1f55be3bf16f90df99971282e2] # # patch "src/view/WorkspaceView.h" # from [79cd48180782e16ea83e15f81e3231b33591ec85] # to [55fc84d9850cdd49543628db976f1a2761fb08e7] # ============================================================ --- src/view/WorkspaceView.cpp 5cf0e91b0d4a649bae61028f6fa36b0b233b9684 +++ src/view/WorkspaceView.cpp fe6bb3821231eb1f55be3bf16f90df99971282e2 @@ -1,291 +1,366 @@ #include "WorkspaceView.h" #include #include //#include +#include +#include +#include WorkspaceView::WorkspaceView(QWidget* parent, int type) - : QTreeView(parent) +: QTreeView(parent) { - //setRootIsDecorated(true); -/* + setSelectionMode(QAbstractItemView::ExtendedSelection); + setRootIsDecorated(true); + + createAndConnectContextActions(); + /* rootItem = 0; - + itemPopup = new Q3PopupMenu(this); viewPopup = new Q3PopupMenu(this); viewPopup->setCheckable(true); hideIgnoredItems_id = viewPopup->insertItem(tr("Hide i&gnored items"), this, SLOT(toggleHideIgnoredItems())); - + viewType = type; if (viewType == WorkspaceView::FileList) { - addColumn(tr("File")); + addColumn(tr("File")); } else { - addColumn(tr("Folder")); - setRootIsDecorated(true); + addColumn(tr("Folder")); + setRootIsDecorated(true); } - + // common for both views - addColumn(tr("Status")); + addColumn(tr("Status")); connect(this, SIGNAL(contextMenuRequested(Q3ListViewItem*, const QPoint&,int)), - this, SLOT(openContextMenu(Q3ListViewItem*, const QPoint&,int))); -*/ + this, SLOT(openContextMenu(Q3ListViewItem*, const QPoint&,int))); + */ } WorkspaceView::~WorkspaceView() {} -/* -void WorkspaceView::display(std::list* items) +void WorkspaceView::contextMenuEvent(QContextMenuEvent * ev) { - // clear lookup tables - lookupTable.clear(); - reverseLookupTable.clear(); + QMenu menu(this); + menu.addAction(actAdd); + menu.addAction(actRemove); + menu.addAction(actCommit); + menu.addAction(actIgnore); + menu.exec(mapToGlobal(ev->pos())); +} + +void WorkspaceView::createAndConnectContextActions(void) +{ + actAdd = new QAction(tr("&Add"), this); + actAdd->setShortcut(tr("Ctrl+A")); + actAdd->setStatusTip(tr("")); connect(actAdd, SIGNAL(triggered()), this, SLOT(slotAdd())); + + actRemove = new QAction(tr("&Remove"), this); + actRemove->setShortcut(tr("Ctrl+R")); + actRemove->setStatusTip(tr("")); connect(actRemove, SIGNAL(triggered()), this, SLOT(slotRemove())); + + actCommit = new QAction(tr("&Commit"), this); + actCommit->setShortcut(tr("Ctrl+C")); + actCommit->setStatusTip(tr("")); connect(actCommit, SIGNAL(triggered()), this, SLOT(slotCommit())); + + actIgnore = new QAction(tr("&Ignore"), this); + actIgnore->setShortcut(tr("Ctrl+I")); + actIgnore->setStatusTip(tr("")); connect(actIgnore, SIGNAL(triggered()), this, SLOT(slotIgnore())); +} + +void WorkspaceView::slotAdd(void) +{ + QItemSelectionModel *selectionModel = this->selectionModel(); + QModelIndexList modelIndexList(selectionModel->selectedIndexes()); - // clear view - clear(); - - if (viewType == WorkspaceView::FileList) + if(modelIndexList.size() == 0) { - displayFileList(items); + qDebug("WorkspaceView::slotAdd: You didn't select the file properly!"); + return; } - else + + QListIterator i(modelIndexList); + QModelIndex modelIndex; + while (i.hasNext()) { - displayFolderTree(items); + modelIndex = i.next(); + if(modelIndex.column() == 0) // Only Filename + { + QVariant fileName =this->model()->data(modelIndex, Qt::DisplayRole); + qDebug("WorkspaceView::slotAdd: Action Add for File: %s", fileName.toString().latin1() ); + } } - - // show/hide ignored items (depending on the last setting) - bool hideIgnoredItems = viewPopup->isItemChecked(hideIgnoredItems_id); - showHideIgnoredItems(!hideIgnoredItems); + clearSelection(); } +void WorkspaceView::slotRemove(void) +{ + qDebug("WorkspaceView::slotRemove!!!"); +} + +void WorkspaceView::slotCommit(void) +{ + qDebug("WorkspaceView::slotCommit!!!"); +} + +void WorkspaceView::slotIgnore(void) +{ + qDebug("WorkspaceView::slotIgnore!!!"); +} + +/* +void WorkspaceView::display(std::list* items) +{ +// clear lookup tables +lookupTable.clear(); +reverseLookupTable.clear(); + +// clear view +clear(); + +if (viewType == WorkspaceView::FileList) +{ +displayFileList(items); +} +else +{ +displayFolderTree(items); +} + +// show/hide ignored items (depending on the last setting) +bool hideIgnoredItems = viewPopup->isItemChecked(hideIgnoredItems_id); +showHideIgnoredItems(!hideIgnoredItems); +} + void WorkspaceView::displayFileList(std::list* items) { - std::list::iterator iter; - Q3ListViewItem *viewItem; - - for (iter= items->begin(); iter != items->end(); iter++) - { - if (!(*iter)->isDirectory()) - { - viewItem = new Q3ListViewItem(this, (*iter)->getFilename(), determineItemStatus(*iter)); - lookupTable[viewItem] = *iter; - reverseLookupTable[*iter] = viewItem; - } - } +std::list::iterator iter; +Q3ListViewItem *viewItem; + +for (iter= items->begin(); iter != items->end(); iter++) +{ +if (!(*iter)->isDirectory()) +{ +viewItem = new Q3ListViewItem(this, (*iter)->getFilename(), determineItemStatus(*iter)); +lookupTable[viewItem] = *iter; +reverseLookupTable[*iter] = viewItem; } +} +} void WorkspaceView::displayFolderTree(std::list* items) { - connect(this, SIGNAL(selectionChanged(Q3ListViewItem*)), - this, SLOT(doUpdateFolderTree(Q3ListViewItem*))); - - // clear lookup map - lookupTable.clear(); - // clear the view - clear(); - - // dummy root element - rootItem = new WorkspaceItem("ROOT", 0 , true); - rootItem->setChildren(items); - - Q3ListViewItem *listViewRoot = new Q3ListViewItem(this, tr("ROOT")); - listViewRoot->setPixmap(0, QPixmap(XPM::FolderOpened)); - - lookupTable[listViewRoot] = rootItem; - reverseLookupTable[rootItem] = listViewRoot; - - // fill tree recursive only with folders - displayFolderTreeRecursive(items, listViewRoot); - - // trigger signal to display files of the root element - emit updateDisplay(items); +connect(this, SIGNAL(selectionChanged(Q3ListViewItem*)), +this, SLOT(doUpdateFolderTree(Q3ListViewItem*))); + +// clear lookup map +lookupTable.clear(); +// clear the view +clear(); + +// dummy root element +rootItem = new WorkspaceItem("ROOT", 0 , true); +rootItem->setChildren(items); + +Q3ListViewItem *listViewRoot = new Q3ListViewItem(this, tr("ROOT")); +listViewRoot->setPixmap(0, QPixmap(XPM::FolderOpened)); + +lookupTable[listViewRoot] = rootItem; +reverseLookupTable[rootItem] = listViewRoot; + +// fill tree recursive only with folders +displayFolderTreeRecursive(items, listViewRoot); + +// trigger signal to display files of the root element +emit updateDisplay(items); } void WorkspaceView::displayFolderTreeRecursive(std::list* items, Q3ListViewItem* parent) { - Q3ListViewItem *listItem; - std::list::iterator iter; - - for (iter= items->begin(); iter != items->end(); iter++) - { - // only add directories - if ((*iter)->isDirectory()) - { - listItem = new Q3ListViewItem(parent, (*iter)->getFilename(),determineItemStatus(*iter)); - listItem->setPixmap(0, QPixmap(XPM::FolderClosed)); +Q3ListViewItem *listItem; +std::list::iterator iter; - lookupTable[listItem] = *iter; - reverseLookupTable[*iter] = listItem; - displayFolderTreeRecursive((*iter)->getChildren(), listItem); - } - } +for (iter= items->begin(); iter != items->end(); iter++) +{ +// only add directories +if ((*iter)->isDirectory()) +{ +listItem = new Q3ListViewItem(parent, (*iter)->getFilename(),determineItemStatus(*iter)); +listItem->setPixmap(0, QPixmap(XPM::FolderClosed)); + +lookupTable[listItem] = *iter; +reverseLookupTable[*iter] = listItem; +displayFolderTreeRecursive((*iter)->getChildren(), listItem); } +} +} void WorkspaceView::doUpdateFolderTree(Q3ListViewItem* treeItem) { - std::map::iterator iter; +std::map::iterator iter; - for (iter = lookupTable.begin(); iter != lookupTable.end(); iter++) - { - // reset the pixmaps of all other items - iter->first->setPixmap(0, QPixmap(XPM::FolderClosed)); +for (iter = lookupTable.begin(); iter != lookupTable.end(); iter++) +{ +// reset the pixmaps of all other items +iter->first->setPixmap(0, QPixmap(XPM::FolderClosed)); - if (iter->first == treeItem) - { - emit updateDisplay(iter->second->getChildren()); - } - } +if (iter->first == treeItem) +{ +emit updateDisplay(iter->second->getChildren()); +} +} - // set pixmap to OpenFolder for selected item - treeItem->setPixmap(0, QPixmap(XPM::FolderOpened)); +// set pixmap to OpenFolder for selected item +treeItem->setPixmap(0, QPixmap(XPM::FolderOpened)); } void WorkspaceView::openContextMenu(Q3ListViewItem *item, const QPoint& pos, int col) { - std::map::iterator iter = lookupTable.find(item); - - // general, non-item-specific context menu? - if (iter == lookupTable.end()) - { - viewPopup->popup(pos); - return; - } +std::map::iterator iter = lookupTable.find(item); - WorkspaceItem *sbItem = iter->second; - - itemPopup->clear(); - int entry; - - if (sbItem->hasStatus(WorkspaceItem::Unknown)) - { - entry = itemPopup->insertItem(tr("Add"), this, SLOT(addItem(int))); - itemPopup->setItemParameter(entry, (int)sbItem); - } - - if (sbItem->hasNotStatus(WorkspaceItem::Ignored) && sbItem->hasNotStatus(WorkspaceItem::Unknown)) - { - entry = itemPopup->insertItem(tr("Drop"), this, SLOT(dropItem(int))); - itemPopup->setItemParameter(entry, (int)sbItem); - } - - if (sbItem->hasStatus(WorkspaceItem::RenamedFrom)) - { - entry = itemPopup->insertItem(tr("Select Rename Target"), this, SLOT(selectRenameTarget(int))); - itemPopup->setItemParameter(entry, (int)sbItem); - } +// general, non-item-specific context menu? +if (iter == lookupTable.end()) +{ +viewPopup->popup(pos); +return; +} - if (sbItem->hasStatus(WorkspaceItem::RenamedTo)) - { - entry = itemPopup->insertItem(tr("Select Rename Source"), this, SLOT(selectRenameSource(int))); - itemPopup->setItemParameter(entry, (int)sbItem); - } - - if (sbItem->hasNotStatus(WorkspaceItem::Ignored) && sbItem->hasNotStatus(WorkspaceItem::Unchanged) && sbItem->hasNotStatus(WorkspaceItem::Unknown)) - { - entry = itemPopup->insertItem(tr("Revert"), this, SLOT(revertItem(int))); - itemPopup->setItemParameter(entry, (int)sbItem); - } - - // any commands added? - if (itemPopup->count() > 0) - { - itemPopup->popup(pos); - } +WorkspaceItem *sbItem = iter->second; + +itemPopup->clear(); +int entry; + +if (sbItem->hasStatus(WorkspaceItem::Unknown)) +{ +entry = itemPopup->insertItem(tr("Add"), this, SLOT(addItem(int))); +itemPopup->setItemParameter(entry, (int)sbItem); } +if (sbItem->hasNotStatus(WorkspaceItem::Ignored) && sbItem->hasNotStatus(WorkspaceItem::Unknown)) +{ +entry = itemPopup->insertItem(tr("Drop"), this, SLOT(dropItem(int))); +itemPopup->setItemParameter(entry, (int)sbItem); +} + +if (sbItem->hasStatus(WorkspaceItem::RenamedFrom)) +{ +entry = itemPopup->insertItem(tr("Select Rename Target"), this, SLOT(selectRenameTarget(int))); +itemPopup->setItemParameter(entry, (int)sbItem); +} + +if (sbItem->hasStatus(WorkspaceItem::RenamedTo)) +{ +entry = itemPopup->insertItem(tr("Select Rename Source"), this, SLOT(selectRenameSource(int))); +itemPopup->setItemParameter(entry, (int)sbItem); +} + +if (sbItem->hasNotStatus(WorkspaceItem::Ignored) && sbItem->hasNotStatus(WorkspaceItem::Unchanged) && sbItem->hasNotStatus(WorkspaceItem::Unknown)) +{ +entry = itemPopup->insertItem(tr("Revert"), this, SLOT(revertItem(int))); +itemPopup->setItemParameter(entry, (int)sbItem); +} + +// any commands added? +if (itemPopup->count() > 0) +{ +itemPopup->popup(pos); +} +} + void WorkspaceView::toggleHideIgnoredItems() { - bool hideIgnoredItems = viewPopup->isItemChecked(hideIgnoredItems_id); - hideIgnoredItems = !hideIgnoredItems; - viewPopup->setItemChecked(hideIgnoredItems_id, hideIgnoredItems); - - showHideIgnoredItems(!hideIgnoredItems); +bool hideIgnoredItems = viewPopup->isItemChecked(hideIgnoredItems_id); +hideIgnoredItems = !hideIgnoredItems; +viewPopup->setItemChecked(hideIgnoredItems_id, hideIgnoredItems); + +showHideIgnoredItems(!hideIgnoredItems); } void WorkspaceView::showHideIgnoredItems(bool show) { - std::map::iterator iter; - for (iter = lookupTable.begin(); iter != lookupTable.end(); iter++) - { - if (iter->second->hasStatus(WorkspaceItem::Ignored)) - { - iter->first->setVisible(show); - } - } +std::map::iterator iter; +for (iter = lookupTable.begin(); iter != lookupTable.end(); iter++) +{ +if (iter->second->hasStatus(WorkspaceItem::Ignored)) +{ +iter->first->setVisible(show); } +} +} void WorkspaceView::addItem(int item) { - WorkspaceItem *sbItem = (WorkspaceItem*)item; - - QMessageBox::information(this,tr("Info"), tr("No functionality yet, sorry!"),QMessageBox::Ok); - - qDebug("Adding item %s", sbItem->getFilename().latin1()); +WorkspaceItem *sbItem = (WorkspaceItem*)item; + +QMessageBox::information(this,tr("Info"), tr("No functionality yet, sorry!"),QMessageBox::Ok); + +qDebug("Adding item %s", sbItem->getFilename().latin1()); } void WorkspaceView::dropItem(int item) { - WorkspaceItem *sbItem = (WorkspaceItem*)item; - - QMessageBox::information(this,tr("Info"), tr("No functionality yet, sorry!"),QMessageBox::Ok); - - qDebug("Dropping item %s", sbItem->getFilename().latin1()); +WorkspaceItem *sbItem = (WorkspaceItem*)item; + +QMessageBox::information(this,tr("Info"), tr("No functionality yet, sorry!"),QMessageBox::Ok); + +qDebug("Dropping item %s", sbItem->getFilename().latin1()); } void WorkspaceView::revertItem(int item) { - WorkspaceItem *sbItem = (WorkspaceItem*)item; - - QMessageBox::information(this,tr("Info"), tr("No functionality yet, sorry!"),QMessageBox::Ok); - - qDebug("Reverting item %s", sbItem->getFilename().latin1()); +WorkspaceItem *sbItem = (WorkspaceItem*)item; + +QMessageBox::information(this,tr("Info"), tr("No functionality yet, sorry!"),QMessageBox::Ok); + +qDebug("Reverting item %s", sbItem->getFilename().latin1()); } void WorkspaceView::selectRenameSource(int item) { - WorkspaceItem *sbItem = (WorkspaceItem*)item; - emit findAndSelectItem(sbItem->getRenamedFrom()); +WorkspaceItem *sbItem = (WorkspaceItem*)item; +emit findAndSelectItem(sbItem->getRenamedFrom()); } void WorkspaceView::selectRenameTarget(int item) { - WorkspaceItem *sbItem = (WorkspaceItem*)item; - emit findAndSelectItem(sbItem->getRenamedTo()); +WorkspaceItem *sbItem = (WorkspaceItem*)item; +emit findAndSelectItem(sbItem->getRenamedTo()); } bool WorkspaceView::selectItem(WorkspaceItem* sbItem) { - std::map::iterator iter; - iter = reverseLookupTable.find(sbItem); - - if (iter == reverseLookupTable.end()) - { - qDebug("Item not found in current view"); - return false; - } - - setSelected(iter->second, true); - // make sure item becomes "visible" to the user - // after it was selected - ensureItemVisible(iter->second); - return true; +std::map::iterator iter; +iter = reverseLookupTable.find(sbItem); + +if (iter == reverseLookupTable.end()) +{ +qDebug("Item not found in current view"); +return false; } +setSelected(iter->second, true); +// make sure item becomes "visible" to the user +// after it was selected +ensureItemVisible(iter->second); +return true; +} + WorkspaceItem* WorkspaceView::getRootItem() { - if (rootItem == 0) - { - qWarning("Root item not set."); - return 0; - } - return rootItem; +if (rootItem == 0) +{ +qWarning("Root item not set."); +return 0; } +return rootItem; +} */ ============================================================ --- src/view/WorkspaceView.h 79cd48180782e16ea83e15f81e3231b33591ec85 +++ src/view/WorkspaceView.h 55fc84d9850cdd49543628db976f1a2761fb08e7 @@ -5,55 +5,73 @@ #include "../model/WorkspaceItem.h" #include -#include #include +class QAction; + class WorkspaceView : public QTreeView { Q_OBJECT - - public: - WorkspaceView(QWidget*, int); - ~WorkspaceView(); - static const int FolderTree = 1; - static const int FileList = 2; -/* - void setItems(QList*); - bool selectItem(WorkspaceItem*); - +public: + WorkspaceView(QWidget*, int); + ~WorkspaceView(); + + + void contextMenuEvent(QContextMenuEvent * ev); + + static const int FolderTree = 1; + static const int FileList = 2; + /* + void setItems(QList*); + bool selectItem(WorkspaceItem*); + public slots: - void display(std::list*); - WorkspaceItem* getRootItem(); - + void display(std::list*); + WorkspaceItem* getRootItem(); + private: - int viewType; - std::list* sandboxItems; - Q3PopupMenu *viewPopup; - Q3PopupMenu *itemPopup; - WorkspaceItem *rootItem; - int hideIgnoredItems_id; - void showHideIgnoredItems(bool); - - void displayFileList(std::list*); - void displayFolderTree(std::list*); - void displayFolderTreeRecursive(std::list*, Q3ListViewItem*); - std::map lookupTable; - std::map reverseLookupTable; + int viewType; + std::list* sandboxItems; + Q3PopupMenu *viewPopup; + Q3PopupMenu *itemPopup; + WorkspaceItem *rootItem; + int hideIgnoredItems_id; + void showHideIgnoredItems(bool); + void displayFileList(std::list*); + void displayFolderTree(std::list*); + void displayFolderTreeRecursive(std::list*, Q3ListViewItem*); + std::map lookupTable; + std::map reverseLookupTable; + private slots: - void doUpdateFolderTree(Q3ListViewItem*); - void openContextMenu(Q3ListViewItem*, const QPoint&, int); - void toggleHideIgnoredItems(); - void addItem(int); - void dropItem(int); - void revertItem(int); - void selectRenameTarget(int); - void selectRenameSource(int); + void doUpdateFolderTree(Q3ListViewItem*); + void openContextMenu(Q3ListViewItem*, const QPoint&, int); + void toggleHideIgnoredItems(); + void addItem(int); + void dropItem(int); + void revertItem(int); + void selectRenameTarget(int); + void selectRenameSource(int); signals: - void updateDisplay(std::list*); - void findAndSelectItem(WorkspaceItem*); -*/ + void updateDisplay(std::list*); + void findAndSelectItem(WorkspaceItem*); + */ +private: + void createAndConnectContextActions(void); + + QAction *actAdd; + QAction *actRemove; + QAction *actCommit; + QAction *actIgnore; + + private slots: + void slotAdd(void); + void slotRemove(void); + void slotCommit(void); + void slotIgnore(void); + }; #endif