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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? revgraphview.cpp

?? LINUX 下以 QT/KDE 寫的 SVN 客戶端
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*************************************************************************** *   Copyright (C) 2006-2007 by Rajko Albrecht                             * *   ral@alwins-world.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.,                                       * *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         * ***************************************************************************/#include "revgraphview.h"#include "graphtreelabel.h"#include "pannerview.h"#include "graphtree_defines.h"#include "src/settings/kdesvnsettings.h"#include "../stopdlg.h"#include "src/svnqt/client.hpp"#include <kapp.h>#include <kdebug.h>#include <ktempfile.h>#include <ktempdir.h>#include <kprocess.h>#include <klocale.h>#include <kfiledialog.h>#include <kmessagebox.h>#include <qtooltip.h>#include <qwmatrix.h>#include <qpopupmenu.h>#include <qpainter.h>#include <qregexp.h>#include <math.h>#define LABEL_WIDTH 160#define LABEL_HEIGHT 90class GraphViewTip:public QToolTip{public:  GraphViewTip( QWidget* p ):QToolTip(p) {}  virtual ~GraphViewTip(){}protected:    void maybeTip( const QPoint & );};void GraphViewTip::maybeTip( const QPoint & pos){    if (!parentWidget()->inherits( "RevGraphView" )) return;    RevGraphView* cgv = (RevGraphView*)parentWidget();    QPoint cPos = cgv->viewportToContents(pos);    QCanvasItemList l = cgv->canvas()->collisions(cPos);    if (l.count() == 0) return;    QCanvasItem* i = l.first();    if (i->rtti() == GRAPHTREE_LABEL) {        GraphTreeLabel*tl = (GraphTreeLabel*)i;        QString nm = tl->nodename();        QString tipStr = cgv->toolTip(nm);        if (tipStr.length()>0) {            QPoint vPosTL = cgv->contentsToViewport(i->boundingRect().topLeft());            QPoint vPosBR = cgv->contentsToViewport(i->boundingRect().bottomRight());            tip(QRect(vPosTL, vPosBR), tipStr);        }    }}RevGraphView::RevGraphView(QObject*aListener,svn::Client*_client,QWidget * parent, const char * name, WFlags f) : QCanvasView(parent,name,f){    m_Canvas = 0L;    m_Client = _client;    m_Listener = aListener;    dotTmpFile = 0;    m_Selected = 0;    renderProcess = 0;    m_Marker = 0;    m_Tip = new GraphViewTip(this);    m_CompleteView = new PannerView(this);    m_CompleteView->setVScrollBarMode(QScrollView::AlwaysOff);    m_CompleteView->setHScrollBarMode(QScrollView::AlwaysOff);    m_CompleteView->raise();    m_CompleteView->hide();    connect(this, SIGNAL(contentsMoving(int,int)),            this, SLOT(contentsMovingSlot(int,int)));    connect(m_CompleteView, SIGNAL(zoomRectMoved(int,int)),            this, SLOT(zoomRectMoved(int,int)));    connect(m_CompleteView, SIGNAL(zoomRectMoveFinished()),            this, SLOT(zoomRectMoveFinished()));    m_LastAutoPosition = TopLeft;    _isMoving = false;    _noUpdateZoomerPos = false;    m_LabelMap[""]="";}RevGraphView::~RevGraphView(){    setCanvas(0);    delete m_Canvas;    delete dotTmpFile;    delete m_CompleteView;    delete m_Tip;    delete renderProcess;}void RevGraphView::showText(const QString&s){    clear();    m_Canvas = new QCanvas(QApplication::desktop()->width(),                        QApplication::desktop()->height());    QCanvasText* t = new QCanvasText(s, m_Canvas);    t->move(5, 5);    t->show();    center(0,0);    setCanvas(m_Canvas);    m_Canvas->update();    m_CompleteView->hide();}void RevGraphView::clear(){    if (m_Selected) {        m_Selected->setSelected(false);        m_Selected=0;    }    if (m_Marker) {        m_Marker->hide();        delete m_Marker;        m_Marker=0;    }    if (!m_Canvas) return;    delete m_Canvas;    m_Canvas = 0;    setCanvas(0);    m_CompleteView->setCanvas(0);}void RevGraphView::beginInsert(){    viewport()->setUpdatesEnabled(false);}void RevGraphView::endInsert(){    if (m_Canvas) {        _cvZoom = 0;        updateSizes();        m_Canvas->update();    }    viewport()->setUpdatesEnabled(true);}void RevGraphView::readDotOutput(KProcess*,char *   buffer,int   buflen){    dotOutput+=QString::fromLocal8Bit(buffer, buflen);}void RevGraphView::dotExit(KProcess*p){    if (p!=renderProcess)return;    // remove line breaks when lines to long    QRegExp endslash("\\\\\\n");    dotOutput.replace(endslash,"");    double scale = 1.0, scaleX = 1.0, scaleY = 1.0;    double dotWidth, dotHeight;    QTextStream* dotStream;    dotStream = new QTextStream(dotOutput, IO_ReadOnly);    QString line,cmd;    int lineno=0;    clear();    beginInsert();    /* mostly taken from kcachegrind */    while (1) {        line = dotStream->readLine();        if (line.isNull()) break;        lineno++;        if (line.isEmpty()) continue;        QTextStream lineStream(line, IO_ReadOnly);        lineStream >> cmd;        if (cmd == "stop") {break; }        if (cmd == "graph") {            lineStream >> scale >> dotWidth >> dotHeight;            scaleX = scale * 60; scaleY = scale * 100;            int w = (int)(scaleX * dotWidth);            int h = (int)(scaleY * dotHeight);            _xMargin = 50;            if (w < QApplication::desktop()->width())                _xMargin += (QApplication::desktop()->width()-w)/2;            _yMargin = 50;            if (h < QApplication::desktop()->height())                _yMargin += (QApplication::desktop()->height()-h)/2;            m_Canvas = new QCanvas(int(w+2*_xMargin), int(h+2*_yMargin));            continue;        }        if ((cmd != "node") && (cmd != "edge")) {            kdWarning() << "Ignoring unknown command '" << cmd << "' from dot ("                << dotTmpFile->name() << ":" << lineno << ")" << endl;            continue;        }        if (cmd=="node") {            QString nodeName, label;            QString _x,_y,_w,_h;            double x, y, width, height;            lineStream >> nodeName >> _x >> _y >> _w >> _h;            x=_x.toDouble();            y=_y.toDouble();            width=_w.toDouble();            height=_h.toDouble();            // better here 'cause dot may scramble utf8 labels so we regenerate it better            // and do not read it in.            label = getLabelstring(nodeName);            int xx = (int)(scaleX * x + _xMargin);            int yy = (int)(scaleY * (dotHeight - y) + _yMargin);            int w = (int)(scaleX * width);            int h = (int)(scaleY * height);            QRect r(xx-w/2, yy-h/2, w, h);            GraphTreeLabel*t=new GraphTreeLabel(label,nodeName,r,m_Canvas);            if (isStart(nodeName)) {                ensureVisible(r.x(),r.y());            }            t->setBgColor(getBgColor(nodeName));            t->setZ(1.0);            t->show();            m_NodeList[nodeName]=t;        } else {            QString node1Name, node2Name, label;            QString _x,_y;            double x, y;            QPointArray pa;            int points, i;            lineStream >> node1Name >> node2Name;            lineStream >> points;            pa.resize(points);            for (i=0;i<points;++i) {                if (lineStream.atEnd()) break;                lineStream >> _x >> _y;                x=_x.toDouble();                y=_y.toDouble();                int xx = (int)(scaleX * x + _xMargin);                int yy = (int)(scaleY * (dotHeight - y) + _yMargin);                if (0) qDebug("   P %d: ( %f / %f ) => ( %d / %d)",                    i, x, y, xx, yy);                pa.setPoint(i, xx, yy);            }            if (i < points) {                qDebug("CallGraphView: Can't read %d spline points (%d)",                    points,  lineno);                continue;            }            GraphEdge * n = new GraphEdge(m_Canvas);            QColor arrowColor = Qt::black;            n->setPen(QPen(arrowColor,1));            n->setControlPoints(pa,false);            n->setZ(0.5);            n->show();            /* arrow */            QPoint arrowDir;            int indexHead = -1;            QMap<QString,GraphTreeLabel*>::Iterator it;            it = m_NodeList.find(node2Name);            if (it!=m_NodeList.end()) {                it.data()->setSource(node1Name);            }            it = m_NodeList.find(node1Name);            if (it!=m_NodeList.end()) {                GraphTreeLabel*tlab = it.data();                if (tlab) {                    QPoint toCenter = tlab->rect().center();                    int dx0 = pa.point(0).x() - toCenter.x();                    int dy0 = pa.point(0).y() - toCenter.y();                    int dx1 = pa.point(points-1).x() - toCenter.x();                    int dy1 = pa.point(points-1).y() - toCenter.y();                    if (dx0*dx0+dy0*dy0 > dx1*dx1+dy1*dy1) {                    // start of spline is nearer to call target node                        indexHead=-1;                        while(arrowDir.isNull() && (indexHead<points-2)) {                            indexHead++;                            arrowDir = pa.point(indexHead) - pa.point(indexHead+1);                        }                    }                }            }            if (arrowDir.isNull()) {                indexHead = points;                // sometimes the last spline points from dot are the same...                while(arrowDir.isNull() && (indexHead>1)) {                    indexHead--;                    arrowDir = pa.point(indexHead) - pa.point(indexHead-1);                }            }            if (!arrowDir.isNull()) {                arrowDir *= 10.0/sqrt(double(arrowDir.x()*arrowDir.x() +                    arrowDir.y()*arrowDir.y()));                QPointArray a(3);                a.setPoint(0, pa.point(indexHead) + arrowDir);                a.setPoint(1, pa.point(indexHead) + QPoint(arrowDir.y()/2,                    -arrowDir.x()/2));                a.setPoint(2, pa.point(indexHead) + QPoint(-arrowDir.y()/2,                    arrowDir.x()/2));                GraphEdgeArrow* aItem = new GraphEdgeArrow(n,m_Canvas);                aItem->setPoints(a);                aItem->setBrush(arrowColor);                aItem->setZ(1.5);                aItem->show();//                sItem->setArrow(aItem);            }        }    }    if (!m_Canvas) {        QString s = i18n("Error running the graph layouting tool.\n");        s += i18n("Please check that 'dot' is installed (package GraphViz).");        showText(s);    } else {        setCanvas(m_Canvas);        m_CompleteView->setCanvas(m_Canvas);    }    endInsert();    delete p;    renderProcess=0;}bool RevGraphView::isStart(const QString&nodeName)const{    bool res = false;    trevTree::ConstIterator it;    it = m_Tree.find(nodeName);    if (it==m_Tree.end()) {        return res;    }    switch (it.data().Action) {        case 'A':            res = true;            break;    }    return res;}char RevGraphView::getAction(const QString&nodeName)const{    trevTree::ConstIterator it;    it = m_Tree.find(nodeName);    if (it==m_Tree.end()) {        return (char)0;    }    return it.data().Action;}QColor RevGraphView::getBgColor(const QString&nodeName)const{    trevTree::ConstIterator it;    it = m_Tree.find(nodeName);    QColor res = Qt::white;    if (it==m_Tree.end()) {        return res;    }    switch (it.data().Action) {        case 'D':            res = Kdesvnsettings::tree_delete_color();            break;        case 'R':        case 'M':            res = Kdesvnsettings::tree_modify_color();            break;        case 'A':            res = Kdesvnsettings::tree_add_color();            break;        case 'C':        case 1:            res = Kdesvnsettings::tree_copy_color();            break;        case 2:            res = Kdesvnsettings::tree_rename_color();            break;        default:            res = Kdesvnsettings::tree_modify_color();            break;    }    return res;}const QString&RevGraphView::getLabelstring(const QString&nodeName){    QMap<QString,QString>::ConstIterator nIt;    nIt = m_LabelMap.find(nodeName);    if (nIt!=m_LabelMap.end()) {        return nIt.data();    }    trevTree::ConstIterator it1;    it1 = m_Tree.find(nodeName);    if (it1==m_Tree.end()) {        return m_LabelMap[""];    }    QString res;    switch (it1.data().Action) {    case 'D':        res = i18n("Deleted at revision %1").arg(it1.data().rev);    break;    case 'A':        res = i18n("Added at revision %1 as %2")            .arg(it1.data().rev)            .arg(it1.data().name);    break;    case 'C':    case 1:        res = i18n("Copied to %1 at revision %2").arg(it1.data().name).arg(it1.data().rev);    break;    case 2:        res = i18n("Renamed to %1 at revision %2").arg(it1.data().name).arg(it1.data().rev);    break;    case 'M':        res = i18n("Modified at revision %1").arg(it1.data().rev);    break;    case 'R':        res = i18n("Replaced at revision %1").arg(it1.data().rev);        break;    default:        res=i18n("Revision %1").arg(it1.data().rev);    break;    }    m_LabelMap[nodeName]=res;    return m_LabelMap[nodeName];}void RevGraphView::dumpRevtree(){    delete dotTmpFile;    clear();    dotOutput = "";    dotTmpFile = new KTempFile(QString::null,".dot");    dotTmpFile->setAutoDelete(true);    QTextStream* stream = dotTmpFile->textStream();    if (!stream) {        showText(i18n("Could not open tempfile %1 for writing.").arg(dotTmpFile->name()));        return;    }    *stream << "digraph \"callgraph\" {\n";    *stream << "  bgcolor=\"transparent\";\n";    int dir = Kdesvnsettings::tree_direction();    *stream << QString("  rankdir=\"");    switch (dir) {        case 3:            *stream << "TB";        break;        case 2:            *stream << "RL";        break;        case 1:            *stream << "BT";        break;        case 0:        default:            *stream << "LR";        break;    }    *stream << "\";\n";

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕日韩精品一区| 亚洲成av人影院| 国产亚洲女人久久久久毛片| 欧美一区二区三级| 3d动漫精品啪啪一区二区竹菊| 欧美精品一区二区三区蜜桃| 制服丝袜亚洲色图| 日韩三级视频在线看| 日韩手机在线导航| 夜夜精品浪潮av一区二区三区| 欧美二区三区91| 国产剧情av麻豆香蕉精品| 久久99精品国产.久久久久| 久久99九九99精品| 韩日欧美一区二区三区| 国产一区二区三区四| 国产美女主播视频一区| 大胆欧美人体老妇| 97超碰欧美中文字幕| 色婷婷国产精品久久包臀| 欧美日韩综合在线| 精品视频一区二区不卡| 久久综合视频网| 久久综合九色综合久久久精品综合| 日韩精品一区二区三区视频播放| 精品久久国产字幕高潮| 国产精品国产自产拍高清av| 一区二区欧美国产| 蜜桃精品视频在线| 国产成人av电影在线观看| 91影院在线免费观看| 欧美性生活大片视频| 日韩一级二级三级| 中文字幕第一区| 亚洲午夜在线电影| 国内久久精品视频| 972aa.com艺术欧美| 欧美挠脚心视频网站| 国产日韩欧美在线一区| 悠悠色在线精品| 久久精品国产网站| 成人av电影在线观看| 91麻豆精品国产自产在线观看一区| 精品91自产拍在线观看一区| 日韩一区日韩二区| 裸体一区二区三区| 99久久久国产精品| 日韩欧美高清一区| 久久国产成人午夜av影院| av电影在线观看完整版一区二区| 色88888久久久久久影院按摩| 日韩一区二区三区在线| 亚洲欧洲成人精品av97| 青青国产91久久久久久| caoporn国产一区二区| 日韩欧美国产不卡| 一区二区三区不卡视频在线观看| 激情小说欧美图片| 欧美自拍偷拍一区| 亚洲国产精品成人综合色在线婷婷| 亚洲永久精品大片| 成人精品视频一区二区三区| 51精品秘密在线观看| 亚洲品质自拍视频| 国产精品一区二区91| 欧美一级在线视频| 亚洲综合免费观看高清完整版在线 | 精品一区二区三区在线播放视频 | 欧美va亚洲va在线观看蝴蝶网| 成人欧美一区二区三区白人| 久热成人在线视频| 欧美午夜一区二区三区免费大片| 中文字幕欧美日本乱码一线二线| 日韩va欧美va亚洲va久久| 色婷婷综合久久久久中文 | 亚洲欧美另类小说| 成人午夜碰碰视频| 精品国产成人系列| 视频一区二区三区中文字幕| 91老师国产黑色丝袜在线| 国产亚洲一本大道中文在线| 免费成人美女在线观看| 欧美日韩国产一区| 一二三四社区欧美黄| 精品sm在线观看| 日本不卡在线视频| 欧美日韩久久久一区| 亚洲精品视频在线看| 91在线免费看| 国产精品视频你懂的| 国产91在线|亚洲| 久久久蜜桃精品| 久久97超碰国产精品超碰| 91 com成人网| 视频一区视频二区在线观看| 欧美日韩在线播放三区四区| 亚洲自拍偷拍综合| 在线一区二区三区四区五区 | 亚洲午夜久久久久久久久电影院| 成人h版在线观看| 欧美激情自拍偷拍| 国产98色在线|日韩| 国产清纯白嫩初高生在线观看91 | 欧美不卡激情三级在线观看| 男男视频亚洲欧美| 777午夜精品视频在线播放| 日韩电影在线一区二区三区| 日韩精品中文字幕在线不卡尤物| 日韩成人一级片| 欧美一区二区三区在线视频| 蜜臀a∨国产成人精品| 日韩欧美一级精品久久| 狠狠色伊人亚洲综合成人| 久久你懂得1024| 成人精品国产免费网站| 中文字幕一区二区三区乱码在线| 成人app软件下载大全免费| 亚洲欧美日韩精品久久久久| 在线免费av一区| 亚州成人在线电影| 日韩欧美国产电影| 国产成人免费视频精品含羞草妖精| 国产免费成人在线视频| 99re这里只有精品首页| 亚洲午夜在线视频| 欧美一区二区在线播放| 黄网站免费久久| 国产精品色婷婷| 在线影院国内精品| 美日韩一区二区三区| 国产欧美精品一区| 色综合色综合色综合| 视频一区二区三区入口| 久久久亚洲午夜电影| 99久久免费视频.com| 日日夜夜精品免费视频| 久久免费视频一区| 色老汉一区二区三区| 日本91福利区| 国产精品区一区二区三区| 欧美亚洲日本一区| 久久99精品国产麻豆不卡| 自拍偷在线精品自拍偷无码专区| 欧美日韩另类国产亚洲欧美一级| 国产尤物一区二区| 一区二区三区欧美| 欧美不卡一区二区| 色欲综合视频天天天| 久久精品国产免费看久久精品| 国产精品天干天干在线综合| 欧美天堂亚洲电影院在线播放| 激情综合网av| 亚洲一级二级在线| 久久综合九色综合97婷婷| 色老头久久综合| 国产一区二区三区精品欧美日韩一区二区三区 | 日本v片在线高清不卡在线观看| 国产天堂亚洲国产碰碰| 欧美午夜精品一区| 国产大陆亚洲精品国产| 香蕉久久夜色精品国产使用方法| 久久精品综合网| 欧美一区二区三区四区久久| youjizz国产精品| 另类小说色综合网站| 欧美日韩激情在线| 国产香蕉久久精品综合网| 亚洲日穴在线视频| 亚洲 欧美综合在线网络| 国产一区二区三区免费| 色综合久久天天综合网| 69堂成人精品免费视频| 国产日韩欧美精品综合| 一区二区三区四区精品在线视频| 婷婷久久综合九色综合绿巨人| 精品一区二区三区香蕉蜜桃| av亚洲精华国产精华精华| 欧美另类久久久品| 亚洲乱码国产乱码精品精的特点 | 久久不见久久见免费视频7| 亚洲人精品一区| 久久精品在线免费观看| 欧美色图在线观看| 99在线精品观看| 国产成人综合网站| 激情五月播播久久久精品| 亚洲成人福利片| 亚洲女与黑人做爰| 国产精品你懂的在线| 久久欧美一区二区| 日韩亚洲欧美高清| 欧美日韩精品一区二区三区四区 | 欧美日韩视频在线一区二区| 久久综合九色综合久久久精品综合| 亚洲电影一级黄| 欧美综合视频在线观看| 午夜久久福利影院| 日韩亚洲欧美高清| 91国偷自产一区二区三区成为亚洲经典 | 亚洲精品成人在线|