Slightly reorganized the menubar
Added menu action to sort the groups (Bug #2268672) git-svn-id: https://svn.code.sf.net/p/keepassx/code/trunk@268 b624d157-de02-0410-bad0-e51aec6abb33
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
#include "dialogs/EditGroupDlg.h"
|
||||
|
||||
#include <QBrush>
|
||||
#include <QHeaderView>
|
||||
|
||||
#define INSERT_AREA_WIDTH 4
|
||||
|
||||
@@ -36,7 +37,7 @@ KeepassGroupView::KeepassGroupView(QWidget* parent):QTreeWidget(parent){
|
||||
}
|
||||
|
||||
|
||||
void KeepassGroupView::createItems(){
|
||||
void KeepassGroupView::createItems(){
|
||||
clear();
|
||||
Items.clear();
|
||||
InsLinePos=-1;
|
||||
@@ -177,7 +178,7 @@ void KeepassGroupView::OnCurrentGroupChanged(QTreeWidgetItem* cur){
|
||||
emit groupChanged(((GroupViewItem*)cur)->GroupHandle);
|
||||
}
|
||||
else
|
||||
emit groupChanged(NULL);
|
||||
emit groupChanged(NULL);
|
||||
}
|
||||
|
||||
|
||||
@@ -187,11 +188,11 @@ void KeepassGroupView::setCurrentGroup(IGroupHandle* group){
|
||||
for(i=0;i<Items.size();i++)
|
||||
if(Items[i]->GroupHandle==group){found=true; break;}
|
||||
if(!found)return;
|
||||
setCurrentItem(Items[i]);
|
||||
setCurrentItem(Items[i]);
|
||||
}
|
||||
|
||||
void KeepassGroupView::dragEnterEvent ( QDragEnterEvent * event ){
|
||||
LastHoverItem=NULL;
|
||||
LastHoverItem=NULL;
|
||||
InsLinePos=-1;
|
||||
|
||||
if(event->mimeData()->hasFormat("application/x-keepassx-group")){
|
||||
@@ -299,15 +300,15 @@ void KeepassGroupView::dropEvent( QDropEvent * event ){
|
||||
if(event->pos().y()>ItemRect.y()+2){
|
||||
qDebug("Insert behind sibling '%s'",((char*)Item->text(0).toUtf8().data()));
|
||||
if(DragItem->parent()){
|
||||
DragItem->parent()->takeChild(DragItem->parent()->indexOfChild(DragItem));
|
||||
DragItem->parent()->takeChild(DragItem->parent()->indexOfChild(DragItem));
|
||||
}
|
||||
else{
|
||||
takeTopLevelItem(indexOfTopLevelItem(DragItem));
|
||||
takeTopLevelItem(indexOfTopLevelItem(DragItem));
|
||||
}
|
||||
if(Item->parent()){
|
||||
int index=Item->parent()->indexOfChild(Item)+1;
|
||||
db->moveGroup(DragItem->GroupHandle,((GroupViewItem*)Item->parent())->GroupHandle,index);
|
||||
Item->parent()->insertChild(index,DragItem);
|
||||
Item->parent()->insertChild(index,DragItem);
|
||||
}
|
||||
else{
|
||||
int index=indexOfTopLevelItem(Item)+1;
|
||||
@@ -319,15 +320,15 @@ void KeepassGroupView::dropEvent( QDropEvent * event ){
|
||||
else{
|
||||
qDebug("Insert before sibling '%s'",((char*)Item->text(0).toUtf8().data()));
|
||||
if(DragItem->parent()){
|
||||
DragItem->parent()->takeChild(DragItem->parent()->indexOfChild(DragItem));
|
||||
DragItem->parent()->takeChild(DragItem->parent()->indexOfChild(DragItem));
|
||||
}
|
||||
else{
|
||||
takeTopLevelItem(indexOfTopLevelItem(DragItem));
|
||||
takeTopLevelItem(indexOfTopLevelItem(DragItem));
|
||||
}
|
||||
if(Item->parent()){
|
||||
int index=Item->parent()->indexOfChild(Item);
|
||||
db->moveGroup(DragItem->GroupHandle,((GroupViewItem*)Item->parent())->GroupHandle,index);
|
||||
Item->parent()->insertChild(index,DragItem);
|
||||
Item->parent()->insertChild(index,DragItem);
|
||||
}
|
||||
else{
|
||||
int index=indexOfTopLevelItem(Item);
|
||||
@@ -343,7 +344,7 @@ void KeepassGroupView::dropEvent( QDropEvent * event ){
|
||||
|
||||
}
|
||||
|
||||
void KeepassGroupView::entryDragMoveEvent( QDragMoveEvent * event ){
|
||||
void KeepassGroupView::entryDragMoveEvent(QDragMoveEvent* event){
|
||||
|
||||
GroupViewItem* Item=(GroupViewItem*)itemAt(event->pos());
|
||||
if(!Item){
|
||||
@@ -378,7 +379,7 @@ void KeepassGroupView::entryDragMoveEvent( QDragMoveEvent * event ){
|
||||
|
||||
}
|
||||
|
||||
void KeepassGroupView::dragMoveEvent( QDragMoveEvent * event ){
|
||||
void KeepassGroupView::dragMoveEvent(QDragMoveEvent* event){
|
||||
if(DragType==EntryDrag){
|
||||
entryDragMoveEvent(event);
|
||||
return;
|
||||
@@ -435,7 +436,7 @@ void KeepassGroupView::dragMoveEvent( QDragMoveEvent * event ){
|
||||
InsLinePos=ItemRect.y();
|
||||
}
|
||||
InsLineStart=ItemRect.x();
|
||||
viewport()->update(QRegion(0,InsLinePos-2,viewport()->width(),4));
|
||||
viewport()->update(QRegion(0,InsLinePos-2,viewport()->width(),4));
|
||||
}
|
||||
event->acceptProposedAction();
|
||||
return;
|
||||
@@ -451,7 +452,7 @@ void KeepassGroupView::paintEvent(QPaintEvent* event){
|
||||
if(InsLinePos != -1){
|
||||
QPainter painter(viewport());
|
||||
painter.setBrush(QBrush(QColor(0,0,0),Qt::Dense4Pattern));
|
||||
painter.setPen(Qt::NoPen);
|
||||
painter.setPen(Qt::NoPen);
|
||||
painter.drawRect(InsLineStart,InsLinePos-2,viewport()->width(),4);
|
||||
}
|
||||
}
|
||||
@@ -494,11 +495,47 @@ void KeepassGroupView::mouseMoveEvent(QMouseEvent *event){
|
||||
}
|
||||
|
||||
void KeepassGroupView::OnItemExpanded(QTreeWidgetItem* item){
|
||||
dynamic_cast<GroupViewItem*>(item)->GroupHandle->setExpanded(true);
|
||||
static_cast<GroupViewItem*>(item)->GroupHandle->setExpanded(true);
|
||||
}
|
||||
|
||||
void KeepassGroupView::OnItemCollapsed(QTreeWidgetItem* item){
|
||||
dynamic_cast<GroupViewItem*>(item)->GroupHandle->setExpanded(false);
|
||||
static_cast<GroupViewItem*>(item)->GroupHandle->setExpanded(false);
|
||||
}
|
||||
|
||||
void KeepassGroupView::OnSort() {
|
||||
QHash<QTreeWidgetItem*,int> oldIndex;
|
||||
for (int i=0; i<Items.size(); i++) {
|
||||
if (Items[i]->parent())
|
||||
oldIndex.insert(Items[i], Items[i]->parent()->indexOfChild(Items[i]));
|
||||
else
|
||||
oldIndex.insert(Items[i], invisibleRootItem()->indexOfChild(Items[i]));
|
||||
}
|
||||
|
||||
sortItems(0, Qt::AscendingOrder);
|
||||
|
||||
bool modified = false;
|
||||
QMutableHashIterator<QTreeWidgetItem*, int> i(oldIndex);
|
||||
while (i.hasNext()) {
|
||||
i.next();
|
||||
int newIndex;
|
||||
IGroupHandle* parent;
|
||||
if (i.key()->parent()) {
|
||||
newIndex = i.key()->parent()->indexOfChild(i.key());
|
||||
parent = static_cast<GroupViewItem*>(i.key()->parent())->GroupHandle;
|
||||
}
|
||||
else {
|
||||
newIndex = invisibleRootItem()->indexOfChild(i.key());
|
||||
parent = NULL;
|
||||
}
|
||||
|
||||
if (newIndex != i.value()) {
|
||||
db->moveGroup(static_cast<GroupViewItem*>(i.key())->GroupHandle, parent, newIndex);
|
||||
modified = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (modified)
|
||||
emit fileModified();
|
||||
}
|
||||
|
||||
|
||||
@@ -518,3 +555,21 @@ GroupViewItem::GroupViewItem(QTreeWidgetItem *parent):QTreeWidgetItem(parent){
|
||||
GroupViewItem::GroupViewItem(QTreeWidgetItem *parent, QTreeWidgetItem *preceding):QTreeWidgetItem(parent,preceding){
|
||||
}
|
||||
|
||||
bool GroupViewItem::operator<(const QTreeWidgetItem& other) const {
|
||||
const GroupViewItem* otherItem = static_cast<const GroupViewItem*>(&other);
|
||||
KeepassGroupView* groupView = static_cast<KeepassGroupView*>(treeWidget());
|
||||
|
||||
// Search result is always at the bottom
|
||||
if (this == groupView->SearchResultItem)
|
||||
return false;
|
||||
if (otherItem == groupView->SearchResultItem)
|
||||
return true;
|
||||
|
||||
// Backup group is always at the bottom but above search results
|
||||
if (!parent() && text(0).compare("Backup", Qt::CaseInsensitive) == 0)
|
||||
return false;
|
||||
if (!otherItem->parent() && otherItem->text(0).compare("Backup", Qt::CaseInsensitive) == 0)
|
||||
return true;
|
||||
|
||||
return QTreeWidgetItem::operator<(other);
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef _GROUP_VIEW_H_
|
||||
#define _GROUP_VIEW_H_
|
||||
|
||||
@@ -44,13 +45,13 @@ class KeepassGroupView:public QTreeWidget{
|
||||
virtual void dragEnterEvent(QDragEnterEvent* event);
|
||||
virtual void dragMoveEvent(QDragMoveEvent* event);
|
||||
void entryDragMoveEvent(QDragMoveEvent* event);
|
||||
virtual void dragLeaveEvent ( QDragLeaveEvent * event );
|
||||
virtual void dropEvent ( QDropEvent * event );
|
||||
virtual void dragLeaveEvent(QDragLeaveEvent* event);
|
||||
virtual void dropEvent(QDropEvent* event);
|
||||
void entryDropEvent(QDropEvent* event);
|
||||
virtual void mousePressEvent(QMouseEvent *event);
|
||||
virtual void mouseMoveEvent(QMouseEvent *event);
|
||||
virtual void paintEvent ( QPaintEvent * event );
|
||||
virtual void contextMenuEvent(QContextMenuEvent *event);
|
||||
virtual void paintEvent (QPaintEvent* event);
|
||||
virtual void contextMenuEvent(QContextMenuEvent* event);
|
||||
void addChildren(GroupViewItem* item);
|
||||
QPoint DragStartPos;
|
||||
GroupViewItem* DragItem;
|
||||
@@ -71,6 +72,7 @@ class KeepassGroupView:public QTreeWidget{
|
||||
void OnHideSearchResults();
|
||||
void OnItemExpanded(QTreeWidgetItem*);
|
||||
void OnItemCollapsed(QTreeWidgetItem*);
|
||||
void OnSort();
|
||||
|
||||
signals:
|
||||
void groupChanged(IGroupHandle* NewGroup);
|
||||
@@ -87,6 +89,7 @@ class GroupViewItem:public QTreeWidgetItem{
|
||||
GroupViewItem(QTreeWidget *parent, QTreeWidgetItem * preceding);
|
||||
GroupViewItem(QTreeWidgetItem *parent);
|
||||
GroupViewItem(QTreeWidgetItem *parent, QTreeWidgetItem * preceding);
|
||||
bool operator<(const QTreeWidgetItem& other) const;
|
||||
IGroupHandle* GroupHandle;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user