[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kdevelop-devel
Subject:    Preliminary breadcrumbs implementation - patch
From:       "Ruchkin I" <bisc1100 () gmail ! com>
Date:       2008-11-22 12:03:15
Message-ID: 61d46aa80811220403s2786df79n852aa69ae0253b31 () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Preliminary breadcrumbs implementation

This patch is work-in-progress towards 'breadcrumbs' nagivation in KDevelop,
that hopefully will be able to replace tabs one day. The patch is
preliminary, and is not meant to be committed right now, but I wanted to
check if the general direction is right.

-On each tab a special 'breadcrumbs' navigation bar, showing the path from
root to current document, is added.
-The list of files is split into 2 categories: files that have already been
opened somewhen and other files. This feature is now in development and
maybe will be changed, so in this version files are split into categories
using the filename lenght, just for testing purposes.


Intended changes:
-Implement real code for detecting what files are open - the current code is
dummy.
-Improve the popup dialog with files.
-Include project name and current function in the navigator.
-Change in general appearance.

-- 
Best regards,
Ruchkin I

[Attachment #5 (text/html)]

<div class="gmail_quote">Preliminary breadcrumbs implementation<br>
<br>
This patch is work-in-progress towards &#39;breadcrumbs&#39; nagivation in KDevelop, \
that hopefully will be able to replace tabs one day. The patch is preliminary, and is \
not meant to be committed right now, but I wanted to check if the general direction \
is right.<br>



<br>-On each tab a special &#39;breadcrumbs&#39; navigation bar, showing the path \
                from root to current document, is added.<div><br>
-The
list of files is split into 2 categories: files that have already been
opened somewhen and other files. This feature is now in development and
maybe will be changed, so in this version files are split into
categories using the filename lenght, just for testing purposes.<br>
<br><br></div>Intended changes:<br>-Implement real code for detecting what files are \
open - the current code is dummy.<br>-Improve the popup dialog with \
files.<br>-Include project name and current function in the navigator.<br>


-Change in general appearance.<br><br>-- <br>Best regards,<br><font \
color="#888888">Ruchkin I<br> </font></div>


["kdevelop_patch_screenshot3.png" (image/png)]
["kdevplatform_patch.diff" (text/x-diff)]

Index: shell/uicontroller.h
===================================================================
--- shell/uicontroller.h	(revision 875444)
+++ shell/uicontroller.h	(working copy)
@@ -93,6 +93,7 @@
 
 public Q_SLOTS:
     void raiseToolView(Sublime::View * view);
+    void onOpenDocumentRequest(const KUrl &);
 
 private:
     class UiControllerPrivate* const d;
Index: shell/uicontroller.cpp
===================================================================
--- shell/uicontroller.cpp	(revision 875444)
+++ shell/uicontroller.cpp	(working copy)
@@ -148,7 +148,9 @@
 UiController::UiController(Core *core)
     :Sublime::Controller(0), IUiController(), d(new UiControllerPrivate(this))
 {
-	setObjectName("UiController");
+    connect(d->defaultMainWindow, SIGNAL(openDocumentRequest(const KUrl \
&)),this,SLOT(onOpenDocumentRequest(const KUrl &))); +	
+    setObjectName("UiController");
     // FIXME: restore.
 #if 0
     KSettings::Dispatcher::registerComponent( KGlobal::mainComponent(),
@@ -584,6 +586,10 @@
     mw->registerStatus(status);
 }
 
+void UiController::onOpenDocumentRequest(const KUrl &url){
+    KDevelop::ICore::self()->documentController()->openDocument(url);
 }
 
+}
+
 #include "uicontroller.moc"
Index: sublime/mainwindow_p.h
===================================================================
--- sublime/mainwindow_p.h	(revision 875444)
+++ sublime/mainwindow_p.h	(working copy)
@@ -107,6 +107,7 @@
     void slotDockShown(Sublime::View*, Sublime::Position, bool);
     void widgetResized(IdealMainLayout::Role role, int thickness);
     void widgetCloseRequest(QWidget* widget);
+    void viewCloseRequest(View* view);
 
 protected:
     virtual bool eventFilter(QObject *, QEvent *event);
Index: sublime/urldocument.h
===================================================================
--- sublime/urldocument.h	(revision 875444)
+++ sublime/urldocument.h	(working copy)
@@ -39,11 +39,13 @@
 
     virtual QString documentSpecifier() const;
 
+    KUrl url() const;
+
+    void setUrl(const KUrl& newUrl);
 protected:
     virtual QWidget *createViewWidget(QWidget *parent = 0);
-    KUrl url() const;
-    void setUrl(const KUrl& newUrl);
 
+
 private:
     struct UrlDocumentPrivate * const d;
 
Index: sublime/fileview.h
===================================================================
--- sublime/fileview.h	(revision 0)
+++ sublime/fileview.h	(revision 0)
@@ -0,0 +1,28 @@
+#ifndef FILEVIEW_H
+#define FILEVIEW_H
+
+#include "filter.h"
+
+class FileView : public QDialog
+{
+Q_OBJECT
+public:
+	FileView(QPoint, const QString &);
+	~FileView();
+	void leaveEvent ( QEvent * ) ;
+	void enterEvent ( QEvent * ) ;
+public slots:
+	void itemClicked(QModelIndex);
+	void itemClickedReverse(QModelIndex);
+signals:
+	void itemSelected(const QString & );
+private:
+	QDirModel *model1,*model2;
+	Filter *proxy1,*proxy2;
+	QTreeView *view1, *view2;
+	QLabel *label1, *label2;
+	QVBoxLayout *layout;
+};
+
+
+#endif

Property changes on: sublime/fileview.h
___________________________________________________________________
Name: svn:executable
   + *

Index: sublime/mainwindow.h
===================================================================
--- sublime/mainwindow.h	(revision 875444)
+++ sublime/mainwindow.h	(working copy)
@@ -84,7 +84,9 @@
     void activeToolViewChanged(Sublime::View*);
     /**Emitted when the user interface settings have changed.*/
     void settingsLoaded();
-
+    /**Emitted when user selects new file via navigator.*/
+    void openDocumentRequest(const KUrl &);
+    
 protected:
 public: // FIXME?
     /**Saves size/toolbar/menu/statusbar settings to the global configuration file.
Index: sublime/container.cpp
===================================================================
--- sublime/container.cpp	(revision 875444)
+++ sublime/container.cpp	(working copy)
@@ -22,6 +22,7 @@
 #include <QLayout>
 #include <QTabBar>
 #include <QStackedLayout>
+#include <QPushButton>
 
 #include <kconfig.h>
 #include <kconfiggroup.h>
@@ -29,20 +30,25 @@
 #include <kglobal.h>
 #include <kacceleratormanager.h>
 
+#include <assert.h>
+
 #include "view.h"
 #include "document.h"
 #include "containerstyle.h"
 
+#include "urldocument.h"
+#include "navigator.h"
+
 namespace Sublime {
 
 // struct ContainerPrivate
 
 struct ContainerPrivate {
     QMap<QWidget*, View*> viewForWidget;
+    QMap<View*, QWidget*> widgetForView;//my
 };
 
 
-
 // class Container
 
 Container::Container(QWidget *parent)
@@ -62,6 +68,8 @@
     setHoverCloseButton(true);
     setCloseButtonEnabled(true);
     connect(this, SIGNAL(currentChanged(int)), this, SLOT(widgetActivated(int)));
+
+    connect(this,SIGNAL(closeRequest(QWidget *)),this,SLOT(onCloseRequest(QWidget *) \
));  }
 
 Container::~Container()
@@ -82,12 +90,43 @@
 
 void Container::addWidget(View *view)
 {
+    if(d->widgetForView.count(view) != 0)
+        return;
+
     QWidget *w = view->widget(this);
+    if (UrlDocument* ud = dynamic_cast<UrlDocument *>(view->document())){
+        //creating a parent for navigator and widget from view
+        QWidget *nw = new QWidget(this);
+        w->setParent(nw);
+        Navigator * navigator = new Navigator;
+        connect(navigator, SIGNAL(newElementOpened(const QString &)),this, \
SLOT(documentOpenRequest(const QString &))); +        \
navigator->setPath(ud->url().path()); +        QVBoxLayout *layout = new \
QVBoxLayout(nw); +        nw->setLayout(layout);
+        layout->addWidget(navigator);
+        layout->addWidget(w);
+        w=nw;//now w points to the outer widget
+    }
+    d->widgetForView[view]=w;
     addTab(w, view->document()->title());
     d->viewForWidget[w] = view;
     connect(view->document(), SIGNAL(titleChanged(Sublime::Document*)), this, \
SLOT(documentTitleChanged(Sublime::Document*)));  }
 
+void Sublime::Container::removeWidget(View *view)
+{
+    assert(view);
+    removeTab(indexOf(d->widgetForView[view]));
+    d->viewForWidget.take(d->widgetForView[view]);
+    disconnect(view->document(), SIGNAL(titleChanged(Sublime::Document*)), this, \
SLOT(documentTitleChanged(Sublime::Document*))); +}
+
+void Container::setCurrentView(View *view){
+    assert(hasWidget(d->widgetForView[view]));
+    setCurrentWidget(d->widgetForView[view]);
+}
+
+
 void Container::documentTitleChanged(Sublime::Document* doc)
 {
     QMapIterator<QWidget*, View*> it = d->viewForWidget;
@@ -101,14 +140,14 @@
         }
     }
 }
+void Container::documentOpenRequest(const QString &str){
+    KUrl url;
+    url.setPath(str);
+    emit openDocumentRequest(url);
+}
 
-void Sublime::Container::removeWidget(QWidget *w)
-{
-    if (w) {
-        removeTab(indexOf(w));
-        View* view = d->viewForWidget.take(w);
-        disconnect(view->document(), SIGNAL(titleChanged(Sublime::Document*)), this, \
                SLOT(documentTitleChanged(Sublime::Document*)));
-    }
+void Container::onCloseRequest(QWidget *w){
+    emit closeViewRequest(viewForWidget(w));
 }
 
 bool Container::hasWidget(QWidget *w)
Index: sublime/filter.cpp
===================================================================
--- sublime/filter.cpp	(revision 0)
+++ sublime/filter.cpp	(revision 0)
@@ -0,0 +1,26 @@
+#include "filter.h"
+#include "fileview.h"
+
+Filter::Filter(bool inv,const QString &path, QWidget \
*parent):QSortFilterProxyModel(parent), reverse(inv),path(path){ +
+}
+Filter::~Filter(){
+
+}
+
+
+QModelIndex Filter::index(const QString &str) const{
+	return mapFromSource ((dynamic_cast<QDirModel*>(sourceModel()))->index(str));
+}
+
+bool Filter::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const{
+	QDirModel * source = dynamic_cast<QDirModel*>(sourceModel());
+	QModelIndex index = source->index(sourceRow, 0, sourceParent);
+	if (path == source->filePath( index ))//so that root is accepted
+		return true;
+	if (source->isDir( index ))
+		return reverse^false;
+	//dummy version of condition
+	return reverse^(source -> fileName( index ).length()<10);
+ }
+

Property changes on: sublime/filter.cpp
___________________________________________________________________
Name: svn:executable
   + *

Index: sublime/mainwindow_p.cpp
===================================================================
--- sublime/mainwindow_p.cpp	(revision 875444)
+++ sublime/mainwindow_p.cpp	(working copy)
@@ -157,8 +157,12 @@
             //we need to create view container
             container = new Container(splitter);
             connect(container, SIGNAL(activateView(Sublime::View*)), \
                d->m_mainWindow, SLOT(activateView(Sublime::View*)));
-            connect(container, SIGNAL(closeRequest(QWidget*)),
-                    d, SLOT(widgetCloseRequest(QWidget*)));
+
+            connect(container, SIGNAL(closeViewRequest(View *)),d, \
SLOT(viewCloseRequest(View *))); +
+            connect (container,SIGNAL(openDocumentRequest(const KUrl \
&)),d->m_mainWindow, SIGNAL(openDocumentRequest(const KUrl &))); +
+            
             splitter->addWidget(container);
         }
         else
@@ -323,8 +327,10 @@
     {
         bool wasActive = m_mainWindow->activeView() == view;
         //container is not empty or this is a root index
-        //just remove a widget
-        container->removeWidget(view->widget());
+        //just remove a view
+
+        container->removeWidget(view);
+
         view->widget()->setParent(0);
         //activate what is visible currently in the container if the removed view \
was active  if (wasActive)
@@ -338,8 +344,9 @@
         // If we have a container, then it should be the only child of
         // the splitter.
         Q_ASSERT(splitter->count() == 1);
-        container->removeWidget(view->widget());
 
+        container->removeWidget(view);
+
         if (view->widget())
             view->widget()->setParent(0);
         else
@@ -480,7 +487,7 @@
 {
     area->setThickness(IdealMainLayout::positionForRole(role), thickness);
 }
-
+//deprecated
 void MainWindowPrivate::widgetCloseRequest(QWidget* widget)
 {
     if (widgetToView.contains(widget))
@@ -490,7 +497,15 @@
         delete view;
     }
 }
+//new
+void MainWindowPrivate::viewCloseRequest(View* view)
+{
+    area->removeView(view);
+    delete view;
+}
 
+
+
 }
 
 #include "mainwindow_p.moc"
Index: sublime/CMakeLists.txt
===================================================================
--- sublime/CMakeLists.txt	(revision 875444)
+++ sublime/CMakeLists.txt	(working copy)
@@ -22,6 +22,9 @@
     ideal.cpp
     ideallayout.cpp
     containerstyle.cpp
+    navigator.cpp
+    fileview.cpp
+    filter.cpp
 )
 
 kde4_add_library(sublime SHARED ${sublime_LIB_SRCS})
@@ -47,4 +50,7 @@
     switcher.h
     tooldocument.h
     view.h
+    navigator.h
+    fileview.h
+    filter.h
     DESTINATION ${INCLUDE_INSTALL_DIR}/kdevplatform/sublime )
Index: sublime/navigator.h
===================================================================
--- sublime/navigator.h	(revision 0)
+++ sublime/navigator.h	(revision 0)
@@ -0,0 +1,45 @@
+#ifndef NAVIGATOR_H
+#define NAVIGATOR_H
+
+#include <QtGui>
+
+class NavigElem;
+
+class Navigator : public QGroupBox{
+	Q_OBJECT
+	private:
+	QHBoxLayout layout;
+	QString path;
+	QList <NavigElem *> elements;
+	void clearElements();
+	public:
+		Navigator(QWidget *parent=0);
+		~Navigator();
+	public slots:
+		bool setPath(const QString & );
+	signals:
+		void needOutput(const QString &);
+		void pathChanged(const QString & );
+		void newElementOpened(const QString &);
+};
+
+class NavigElem : public QPushButton{
+	Q_OBJECT
+	QString path;
+	QString elemText;
+	public:
+		NavigElem(QWidget *parent=0, QString filepath="", bool final=false);
+		~NavigElem();
+		QSize sizeHint() const;
+		QSize minimumSizeHint() const;
+	protected:
+		void enterEvent ( QEvent * event ) ;
+		void leaveEvent ( QEvent * event ) ;
+		void mousePressEvent ( QMouseEvent * event ) ;
+		void resizeEvent ( QResizeEvent * event);
+	signals:
+		void elementSelected(const QString &);
+};
+
+
+#endif

Property changes on: sublime/navigator.h
___________________________________________________________________
Name: svn:executable
   + *

Index: sublime/fileview.cpp
===================================================================
--- sublime/fileview.cpp	(revision 0)
+++ sublime/fileview.cpp	(revision 0)
@@ -0,0 +1,91 @@
+#include "filter.h"
+#include "fileview.h"
+
+FileView::FileView(QPoint pos, const QString &path):QDialog(0,Qt::ToolTip){
+	layout = new QVBoxLayout;
+	label1 = new QLabel (this);
+	label2 = new QLabel (this);
+	model1=new QDirModel(this);
+	model2=new QDirModel(this);
+	proxy1=new Filter(false,path,this);
+	proxy2=new Filter(true,path,this);
+	view1 = new QTreeView(this);
+	view2 = new QTreeView(this);
+	
+	setLayout(layout);
+	
+	label1->setText("Opened files");
+	label2->setText("Other files");
+	label1->setAlignment( Qt::AlignCenter );
+	label2->setAlignment( Qt::AlignCenter );
+	
+	proxy1->setSourceModel(model1);
+	proxy2->setSourceModel(model2);
+
+	view1 -> setModel(proxy1);
+	view2 -> setModel(proxy2);
+	
+	view1->setRootIndex(proxy1->index(path));
+	view2->setRootIndex(proxy2->index(path));
+	
+	view1->header()->hide();
+	view2->header()->hide();
+	for (int i=1;i< model1->columnCount();i++){
+		view1->setColumnHidden(i,true);
+	}
+	for (int i=1;i< model2->columnCount();i++){
+		view2->setColumnHidden(i,true);
+	}
+	
+	view1->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
+	view2->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
+	view1->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
+	view2->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
+
+	layout -> addWidget(label1);
+	layout -> addWidget(view1);
+	layout -> addWidget(label2);
+	layout -> addWidget(view2);
+	
+	layout -> setMargin(0);
+	layout -> setSpacing(0);
+	
+	move(pos);
+
+	
+	connect(view1,SIGNAL(clicked(QModelIndex)),this, SLOT(itemClicked(QModelIndex)));
+	connect(view2,SIGNAL(clicked(QModelIndex)),this, \
SLOT(itemClickedReverse(QModelIndex))); +	show();
+}
+
+FileView::~FileView(){
+
+
+}
+
+void FileView::itemClicked(QModelIndex index){
+	if(!model1->isDir(proxy1->mapToSource(index))){
+		emit(itemSelected(model1->filePath(proxy1->mapToSource(index))));
+		close();
+	}
+	else
+		view1->setExpanded( index,!view1->isExpanded( index ) );
+}
+
+void FileView::itemClickedReverse(QModelIndex index){
+	if(!model2->isDir(proxy2->mapToSource(index))){
+		emit(itemSelected(model2->filePath(proxy2->mapToSource(index))));
+		close();
+	}
+	else
+		view2->setExpanded( index,!view2->isExpanded( index ) );
+}
+
+void FileView::leaveEvent( QEvent *){
+	close();
+}
+
+
+void FileView::enterEvent( QEvent *){
+	
+}

Property changes on: sublime/fileview.cpp
___________________________________________________________________
Name: svn:executable
   + *

Index: sublime/mainwindow.cpp
===================================================================
--- sublime/mainwindow.cpp	(revision 875444)
+++ sublime/mainwindow.cpp	(working copy)
@@ -116,8 +116,7 @@
 {
     if (!d->viewContainers.contains(view))
         return;
-    d->viewContainers[view]->setCurrentWidget(view->widget());
-
+    d->viewContainers[view]->setCurrentView(view);
     setActiveView(view);
 }
 
Index: sublime/container.h
===================================================================
--- sublime/container.h	(revision 875444)
+++ sublime/container.h	(working copy)
@@ -20,7 +20,7 @@
 #define SUBLIMECONTAINER_H
 
 #include <ktabwidget.h>
-
+#include <kurl.h>
 #include "sublimeexport.h"
 
 class QPaintEvent;
@@ -44,8 +44,12 @@
 
     /**Adds the widget for given @p view to the container.*/
     void addWidget(View *view);
-    /**Removes the widget from the container.*/
-    void removeWidget(QWidget *w);
+    /**Removes the widget associated with the view from the container.*/
+    void removeWidget(View *v);
+    /**Activates the widget associated withe the view*/
+    void setCurrentView(View *v);
+    
+    
     /** @return true if widget is placed inside this container.*/
     bool hasWidget(QWidget *w);
 
@@ -64,10 +68,14 @@
 
 Q_SIGNALS:
   void activateView(Sublime::View* view);
+  void openDocumentRequest(const KUrl &);
+  void closeViewRequest(View *);
 
 private slots:
   void widgetActivated(int idx);
   void documentTitleChanged(Sublime::Document* doc);
+  void documentOpenRequest(const QString &);
+  void onCloseRequest(QWidget *);
 private:
 
     struct ContainerPrivate * const d;
Index: sublime/filter.h
===================================================================
--- sublime/filter.h	(revision 0)
+++ sublime/filter.h	(revision 0)
@@ -0,0 +1,20 @@
+#ifndef FILTER_H
+#define FILTER_H
+
+#include <QtGui>
+
+class Filter : public QSortFilterProxyModel {
+Q_OBJECT
+public:
+	Filter(bool,const QString &, QWidget *parent = 0);
+	~Filter();
+	virtual QModelIndex index(const QString &) const;
+    bool filterAcceptsRow(int sourceRow,const QModelIndex & sourceParent) const;
+
+    using QSortFilterProxyModel::index;
+private:
+	bool reverse;
+	QString path;
+};
+
+#endif

Property changes on: sublime/filter.h
___________________________________________________________________
Name: svn:executable
   + *

Index: sublime/navigator.cpp
===================================================================
--- sublime/navigator.cpp	(revision 0)
+++ sublime/navigator.cpp	(revision 0)
@@ -0,0 +1,134 @@
+#include "filter.h"
+#include "fileview.h"
+#include "navigator.h"
+
+
+Navigator :: Navigator(QWidget *parent): QGroupBox(parent){
+	path = "";
+	setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed));
+	setLayout( &layout );
+	layout.setMargin( 0 );
+	layout.setSpacing( 0 );
+}
+
+Navigator :: ~Navigator(){
+	clearElements();
+}
+
+bool Navigator :: setPath(const QString & str){
+	if (str.isEmpty())
+		return false;
+	
+	setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed));
+	NavigElem *p;
+	QString elemName,elemDir;
+	int i=0;
+	path = str;
+	QStringList lst=str.split('/');
+	clearElements();
+	while(!lst.empty()){
+		elemName = lst.takeFirst();
+		elemDir = path.section('/',0,i++);
+		if (elemDir!="/"){
+			if(elemDir.isEmpty())
+				elemDir="/";
+			if (!lst.empty())
+				p=new NavigElem(this,elemDir);
+			else 
+				p=new NavigElem(this,elemDir,true);
+
+			//FIXME not needed when class exported
+			//connect(p,SIGNAL(elementSelected(const QString & )),this,SLOT(setPath(const \
QString &))); +			
+			connect(p,SIGNAL(elementSelected(const QString & \
)),this,SIGNAL(newElementOpened(const QString &))); +			elements.push_back(p);
+			layout.addWidget(p);
+		}
+	}
+	layout.addStretch( 10 );
+	emit(pathChanged(str));
+	return true;	
+}
+
+
+void Navigator::clearElements(){
+	while (!elements.isEmpty()){
+		delete elements.takeFirst();	
+	}
+
+	while(layout.itemAt(0)){
+		QLayoutItem *temp =layout.itemAt(0);
+		layout.removeItem (temp);
+		delete temp;
+	}
+}
+
+NavigElem :: NavigElem(QWidget *parent, QString filepath, bool final): \
QPushButton(parent){ +	path=filepath;
+	setFocusPolicy( Qt::NoFocus );
+	setFlat( true );
+	setAutoFillBackground(true);
+	setMouseTracking( true );
+	setSizePolicy(QSizePolicy(QSizePolicy::Preferred,QSizePolicy::Expanding));
+
+	elemText = path.section('/',-1);
+	if(!final)
+		if(!elemText.isEmpty())
+			elemText += " >";
+		else
+			elemText = "/ >";
+	else {
+		QFont fnt=font();
+		fnt.setBold( true );
+		setFont(fnt);
+	}
+	setText(elemText);
+}
+
+NavigElem :: ~NavigElem(){
+	
+}
+
+QSize NavigElem ::sizeHint() const{
+	QStyleOptionButton opt;
+	initStyleOption(&opt);
+	int w = fontMetrics().size(Qt::TextShowMnemonic,text()).width(),
+	h = fontMetrics().size(Qt::TextShowMnemonic,text()).height();
+	return (style()->sizeFromContents(QStyle::CT_CheckBox, &opt, QSize(w, h), \
this).expandedTo(QApplication::globalStrut())); +}
+
+
+QSize NavigElem ::minimumSizeHint() const{
+	return QSize(20,20);
+}
+
+
+
+void NavigElem::enterEvent ( QEvent * ) {
+	QPalette p=palette();
+	p.setColor( QPalette::ButtonText, QColor(Qt::white) );
+	p.setColor( QPalette::Button, QColor(Qt::darkGray) );
+	setPalette( p );
+}
+
+void NavigElem::leaveEvent ( QEvent *) {
+	setPalette( QPalette() );//set default palette
+}
+
+void NavigElem::mousePressEvent ( QMouseEvent *event) {
+
+	QFileInfo file(path);
+	FileView *dlg;
+	if(file.isDir())//for the last one in list - file not a dir
+		dlg = new FileView(event->globalPos(),path);
+	else
+		dlg = new FileView(event->globalPos(),file.absoluteDir().absolutePath());
+	
+	connect(dlg,SIGNAL(itemSelected(const QString &)),this,SIGNAL(elementSelected(const \
QString &))); +
+
+}
+
+void NavigElem::resizeEvent ( QResizeEvent * ){
+	setText(fontMetrics().elidedText(elemText, Qt::ElideLeft,size().width()-1));
+}

Property changes on: sublime/navigator.cpp
___________________________________________________________________
Name: svn:executable
   + *



_______________________________________________
KDevelop-devel mailing list
KDevelop-devel@kdevelop.org
https://barney.cs.uni-potsdam.de/mailman/listinfo/kdevelop-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic