亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? groupview.cpp

?? KeePassX用于保護密碼的安全
?? CPP
字號:
/*************************************************************************** *   Copyright (C) 2005 by Tarek Saidi                                     * *   tarek.saidi@arcor.de                                                  * *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU General Public License as published by  * *   the Free Software Foundation; either version 2 of the License, or     * *   (at your option) any later version.                                   * *                                                                         * *   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.,                                       * *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             * ***************************************************************************/#include <QDragEnterEvent>#include <QDragMoveEvent>#include <QDragLeaveEvent>#include <QDropEvent>#include <QPaintEvent>#include <QMouseEvent>#include <QApplication>#include <QFont>#include <QFontMetrics>#include <QSize>#include <QPixmap>#include <QPainter>#include <QPen>#include <QBrush>#include <QMenu>#include "main.h"#include "EntryView.h"#include "GroupView.h"#define INSERT_AREA_WIDTH 4KeepassGroupView::KeepassGroupView(QWidget* parent):QTreeWidget(parent){InsertionMarker=QLine();db=NULL;LastHoverItem=NULL;setHeaderLabels(QStringList()<<tr("Groups"));ShowSearchGroup=false;ContextMenu=new QMenu(this);ContextMenuSearchGroup=new QMenu(this);}void KeepassGroupView::selectSearchGroup(){Q_ASSERT(ShowSearchGroup);setItemSelected(Items.back(),true);}void KeepassGroupView:: dragEnterEvent ( QDragEnterEvent * event ){if(event->mimeData()->hasFormat("keepass/group")){	DragType=GROUP;	event->accept();	return;}if(event->mimeData()->hasFormat("keepass/entry")){	DragType=ENTRY;	event->accept();	return;}}void KeepassGroupView::dragMoveEvent( QDragMoveEvent * event ){GroupViewItem* item=(GroupViewItem*)itemAt(event->pos());if(LastHoverItem){	QFont f=LastHoverItem->font(0);	f.setBold(false);	LastHoverItem->setFont(0,f);}QLine LastMarker=InsertionMarker;InsertionMarker=QLine();if(isSearchResultGroup(item))	event->setAccepted(false);else if(DragType==GROUP){	if(item){	QRect ItemRect=visualItemRect(item);		if(!db->isParentGroup(item->pGroup,DragItem->pGroup) && DragItem!=item){			if((ItemRect.height()+ItemRect.y())-event->pos().y() > INSERT_AREA_WIDTH && event->pos().y() > INSERT_AREA_WIDTH){				QFont f=item->font(0);				f.setBold(true);				item->setFont(0,f);				LastHoverItem=item;				event->setAccepted(true);				///@FIXME does not work for top level groups			}			else{				LastHoverItem=NULL;				if(event->pos().y() > INSERT_AREA_WIDTH)					InsertionMarker=QLine(ItemRect.x(),ItemRect.y()+ItemRect.height()										,ItemRect.x()+ItemRect.width(),ItemRect.y()+ItemRect.height());				else					InsertionMarker=QLine(ItemRect.x(),0,ItemRect.x()+ItemRect.width(),0);			}		}		else 			event->setAccepted(false);	}else  LastHoverItem=NULL;}else{	if(item){		QFont f=item->font(0);		f.setBold(true);		item->setFont(0,f);		LastHoverItem=item;		event->setAccepted(true);	}	else{		event->setAccepted(false);		LastHoverItem=NULL;	}}if(!LastMarker.isNull()){	///@FIXME	//this is a very dirty work-around to force a redraw of items at the last marker position	//should be replaced!!!	GroupViewItem* i=(GroupViewItem*)itemAt(0,LastMarker.y1());	if(i)i->setFont(0,i->font(0));	i=(GroupViewItem*)itemAt(0,LastMarker.y1()-1);	if(i)i->setFont(0,i->font(0));}update();}void KeepassGroupView:: dragLeaveEvent ( QDragLeaveEvent * event ){InsertionMarker=QLine();if(LastHoverItem){  QFont f=LastHoverItem->font(0);  f.setBold(false);  LastHoverItem->setFont(0,f);}update();}void KeepassGroupView::dropEvent( QDropEvent * event ){emit fileModified();InsertionMarker=QLine();if(LastHoverItem){  QFont f=LastHoverItem->font(0);  f.setBold(false);  LastHoverItem->setFont(0,f);  LastHoverItem=NULL;}GroupViewItem* item=(GroupViewItem*)itemAt(event->pos());if(DragType==GROUP){	if(item){		QRect ItemRect=visualItemRect(item);		if((ItemRect.height()+ItemRect.y())-event->pos().y() > INSERT_AREA_WIDTH && event->pos().y() > INSERT_AREA_WIDTH){			db->moveGroup(DragItem->pGroup,item->pGroup);}		else{			if(event->pos().y() > INSERT_AREA_WIDTH){				if(db->getNumberOfChilds(item->pGroup) > 0)					db->moveGroup(DragItem->pGroup,item->pGroup,0);								else									db->moveGroupDirectly(DragItem->pGroup,item->pGroup);			}			else	db->moveGroupDirectly(DragItem->pGroup,NULL);			}			}	else db->moveGroup(DragItem->pGroup,NULL);	updateItems();}else{	Q_ASSERT(item);	QList<QTreeWidgetItem*>* pDragItems=(QList<QTreeWidgetItem*>*)*((QList<QTreeWidgetItem*>**)event->mimeData()->data("keepass/entry").data());	for(int i=0;i<pDragItems->size();i++){		db->moveEntry(((EntryViewItem*)(*pDragItems)[i])->pEntry,item->pGroup);	}	emit entryDropped();}}void KeepassGroupView::mousePressEvent(QMouseEvent *event){//save event position - maybe this is the start of a dragif (event->button() == Qt::LeftButton)            DragStartPos = event->pos();//call base functionQTreeWidget::mousePressEvent(event);}void KeepassGroupView::mouseMoveEvent(QMouseEvent *event){ if (!(event->buttons() & Qt::LeftButton))            return; if ((event->pos() - DragStartPos).manhattanLength() < QApplication::startDragDistance())            return;	DragItem=(GroupViewItem*)itemAt(DragStartPos); if (isSearchResultGroup(DragItem))			return;	if(!DragItem)return;	QDrag *drag = new QDrag(this);	QFontMetrics fontmet(DragItem->font(0));	int DragPixmHeight=16;	if(fontmet.height()>16)DragPixmHeight=fontmet.height();	DragPixmap  = QPixmap(fontmet.width(DragItem->text(0))+19,DragPixmHeight);	DragPixmap.fill(QColor(255,255,255));	QPainter painter(&DragPixmap);	painter.setPen(QColor(0,0,0));	painter.setFont(DragItem->font(0));	painter.drawPixmap(0,0,DragItem->icon(0).pixmap(QSize(16,16)));	painter.drawText(19,DragPixmHeight-fontmet.strikeOutPos(),DragItem->text(0));	        QMimeData *mimeData = new QMimeData;	mimeData->setData("keepass/group",QByteArray((char*)&(DragItem->pGroup),sizeof(void*)));        drag->setMimeData(mimeData);        drag->setPixmap(DragPixmap);	drag->start();}void KeepassGroupView::updateItems(){clear();Items.clear();for(int i=0; i<db->numGroups();i++){if(db->group(i).Level==0){ if(Items.size()) Items.push_back(new GroupViewItem(this,getLastSameLevelItem(0))); else 		  Items.push_back(new GroupViewItem(this)); Items.back()->setText(0,db->group(i).Name); Items.back()->pGroup=&db->group(i); } else{ if(db->group(i).Level>db->group(i-1).Level){ Items.push_back(new GroupViewItem(Items.back(),getLastSameLevelItem(db->group(i).Level))); Items.back()->setText(0,db->group(i).Name); Items.back()->pGroup=&db->group(i); } if(db->group(i).Level<=db->group(i-1).Level){   GroupItemItr j;   for(j=Items.end()-1;j!=Items.begin();j--){    if((*j)->pGroup->Level<db->group(i).Level)break;}     Items.push_back(new GroupViewItem((*j),getLastSameLevelItem(db->group(i).Level)));     Items.back()->setText(0,db->group(i).Name);     Items.back()->pGroup=&db->group(i);     } }Items.back()->setIcon(0,db->icon(db->group(i).ImageID));}for(int i=0;i<Items.size();i++){ setItemExpanded(Items[i],Items[i]->pGroup->UI_ItemIsExpanded);}if(ShowSearchGroup){ 	 Items.push_back(new GroupViewItem(this));     Items.back()->setText(0,tr("Search Results"));     Items.back()->pGroup=NULL;     QFont f=Items.back()->font(0);     f.setItalic(true);	 f.setBold(true);     Items.back()->setFont(0,f);}}GroupViewItem* KeepassGroupView::getLastSameLevelItem(int level){for(int i=Items.size()-1;i>=0;i--){ if(Items[i]->pGroup->Level==level){return Items[i];}}return Items.back();}void KeepassGroupView::paintEvent(QPaintEvent* event){QTreeWidget::paintEvent(event);QPainter painter(viewport());QPen pen(QColor(100,100,100));pen.setWidth(2);pen.setStyle(Qt::DotLine);painter.setPen(pen);//qDebug("UPDATE: (%i,%i) %ix%i",event->rect().x(),event->rect().y(),event->rect().width(),event->rect().height());if(!InsertionMarker.isNull()){	painter.drawLine(InsertionMarker);}}bool KeepassGroupView::isSearchResultGroup(GroupViewItem* item){if(ShowSearchGroup && (item == Items.back()))return true;else return false;}void KeepassGroupView::contextMenuEvent(QContextMenuEvent* e){if(!(GroupViewItem*)itemAt(e->pos()) && selectedItems().size()){	setItemSelected(selectedItems()[0],false);}e->accept();if(isSearchResultGroup((GroupViewItem*)itemAt(e->pos())))	ContextMenuSearchGroup->popup(e->globalPos());else	ContextMenu->popup(e->globalPos());}GroupViewItem::GroupViewItem(QTreeWidget *parent):QTreeWidgetItem(parent){}GroupViewItem::GroupViewItem(QTreeWidget *parent, QTreeWidgetItem *preceding):QTreeWidgetItem(parent,preceding){}GroupViewItem::GroupViewItem(QTreeWidgetItem *parent):QTreeWidgetItem(parent){}GroupViewItem::GroupViewItem(QTreeWidgetItem *parent, QTreeWidgetItem *preceding):QTreeWidgetItem(parent,preceding){}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩综合色| 色综合一个色综合亚洲| 人人爽香蕉精品| 一个色在线综合| 亚洲综合免费观看高清完整版| 99久久er热在这里只有精品66| 国产精品18久久久| 成人丝袜视频网| 91免费在线视频观看| 91色视频在线| 欧美中文字幕一区二区三区亚洲| 成人综合在线网站| 91美女精品福利| 欧美美女激情18p| 日韩视频国产视频| 国产亚洲欧美激情| 亚洲视频电影在线| 天堂蜜桃91精品| 久久电影网电视剧免费观看| 国产一区二区三区视频在线播放| 久草热8精品视频在线观看| 国模娜娜一区二区三区| 成人午夜私人影院| 欧美伊人久久久久久久久影院| 欧美色综合天天久久综合精品| 欧美日韩中文字幕一区二区| 日韩一级黄色大片| 国产欧美精品一区二区色综合朱莉| 国产欧美日韩久久| 亚洲第一搞黄网站| 国产激情一区二区三区四区 | 图片区日韩欧美亚洲| 午夜激情一区二区三区| 国产一区二区三区免费| 色综合久久综合| 26uuu亚洲综合色欧美| 国产精品久久久久久亚洲伦| 香蕉乱码成人久久天堂爱免费| 天堂av在线一区| 成人午夜激情影院| 91精品国产品国语在线不卡| 国产欧美日产一区| 欧美a级理论片| 99久久99久久综合| 精品久久人人做人人爰| 一级做a爱片久久| 国产精品一区二区久久精品爱涩 | 99久久婷婷国产综合精品电影| 99久久婷婷国产| 精品久久久久一区| 亚洲国产欧美另类丝袜| 国产不卡视频一区二区三区| 911精品国产一区二区在线| 国产精品乱码人人做人人爱| 日韩精品一级中文字幕精品视频免费观看| 亚洲丝袜制服诱惑| 国产精品一区二区无线| 欧美一区二区三区成人| 亚洲午夜国产一区99re久久| www.亚洲国产| 国产色产综合色产在线视频| 久久激情综合网| 欧美久久久久久蜜桃| 一区二区三区四区蜜桃| 成人va在线观看| 国产嫩草影院久久久久| 国产成人一区在线| 欧美成人精品福利| 久久精品免费看| 91精品婷婷国产综合久久| 亚洲二区在线视频| 91黄视频在线观看| 一区二区三区在线播放| 一本大道久久精品懂色aⅴ| 亚洲国产成人午夜在线一区| 国产传媒一区在线| 欧美国产视频在线| av色综合久久天堂av综合| 久久免费视频色| 国产成人啪免费观看软件| 国产三级久久久| 国产高清不卡一区二区| 亚洲国产精品传媒在线观看| 国产.欧美.日韩| 国产精品毛片久久久久久| 99久久免费国产| 亚洲男人的天堂一区二区| 成人av免费在线| 亚洲一级电影视频| 日韩一区二区免费电影| 国内一区二区视频| 国产精品成人免费在线| 99精品在线观看视频| 亚洲一区二区三区四区五区黄| 99re视频这里只有精品| 一区二区欧美国产| 6080yy午夜一二三区久久| 久久不见久久见免费视频7| 国产欧美一区二区三区沐欲| 91网站最新地址| 日本欧美一区二区三区| 久久久久久久综合| 91亚洲精品久久久蜜桃| 午夜电影网亚洲视频| 久久久久一区二区三区四区| 99麻豆久久久国产精品免费| 午夜精品一区二区三区电影天堂| 欧美精品tushy高清| 国产成人一区在线| 亚洲国产成人av| 国产三级三级三级精品8ⅰ区| 国产99久久久国产精品潘金网站| 日韩理论在线观看| 欧美二区乱c少妇| 本田岬高潮一区二区三区| 天涯成人国产亚洲精品一区av| 日韩欧美亚洲另类制服综合在线| 国产91综合一区在线观看| 亚洲精品ww久久久久久p站| 日韩欧美成人一区| av电影一区二区| 国产一区二区三区综合| 亚洲综合av网| 国产精品丝袜91| 91精品黄色片免费大全| 91视频观看视频| 国产高清不卡二三区| 日韩va欧美va亚洲va久久| 亚洲人快播电影网| 337p粉嫩大胆噜噜噜噜噜91av| 在线精品视频免费观看| 成人综合婷婷国产精品久久免费| 午夜视频一区二区三区| 亚洲人成7777| 国产欧美日韩综合精品一区二区| 91福利视频网站| 99久久免费精品| 成人免费毛片嘿嘿连载视频| 精品无码三级在线观看视频| 日韩精品五月天| 亚洲一区二区免费视频| 亚洲视频在线一区观看| 国产精品每日更新| 国产三级精品视频| 2020国产成人综合网| 精品乱码亚洲一区二区不卡| 日韩片之四级片| 日韩一二三区不卡| 欧美美女直播网站| 欧美日韩国产经典色站一区二区三区 | 亚洲成人av电影| 亚洲老妇xxxxxx| 亚洲激情图片qvod| 亚洲欧美另类久久久精品 | 国产99久久久国产精品潘金| 国产一区三区三区| 国产在线精品免费| eeuss鲁片一区二区三区在线观看| 99精品热视频| 亚洲二区在线视频| 午夜影院久久久| 日韩国产在线观看| 蜜桃精品视频在线| 国产真实精品久久二三区| 韩国欧美国产1区| 国产美女娇喘av呻吟久久| 国产在线精品一区二区不卡了| 精品一区二区在线播放| 国产精品一区二区在线观看网站| 麻豆成人综合网| 粗大黑人巨茎大战欧美成人| jvid福利写真一区二区三区| 色8久久精品久久久久久蜜| 欧美日韩视频在线第一区| 在线播放中文字幕一区| 日韩免费性生活视频播放| 久久综合给合久久狠狠狠97色69| 日韩精品一区二区三区视频在线观看| 在线观看亚洲精品| 日韩久久久久久| 国产精品女人毛片| 亚洲超碰97人人做人人爱| 久久精品理论片| 99久久精品一区二区| 欧美色综合影院| 久久久久国产精品麻豆ai换脸| 国产欧美日韩亚州综合 | 中文字幕一区在线观看视频| 一区二区三区日韩在线观看| 日本欧美肥老太交大片| 国精品**一区二区三区在线蜜桃| 国产精品99久久久久久有的能看| 成人在线综合网站| 欧美群妇大交群中文字幕| 久久亚洲影视婷婷| 亚洲第一成年网| 成人久久18免费网站麻豆 | 久久久青草青青国产亚洲免观| 国产精品国产三级国产a| 免费一级片91|