dolphindirlister.cpp
dolphinfileitemdelegate.cpp
dolphinmodel.cpp
+ dolphinnewmenuobserver.cpp
dolphinsortfilterproxymodel.cpp
dolphincategorydrawer.cpp
dolphinview.cpp
***************************************************************************/
#include "dolphinnewmenu.h"
+
#include "dolphinmainwindow.h"
+#include "dolphinnewmenuobserver.h"
#include "dolphinstatusbar.h"
#include "dolphinview.h"
#include "dolphinviewcontainer.h"
KNewMenu(mainWin->actionCollection(), parent, "create_new"),
m_mainWin(mainWin)
{
+ DolphinNewMenuObserver::instance().attach(this);
}
DolphinNewMenu::~DolphinNewMenu()
{
+ DolphinNewMenuObserver::instance().detach(this);
}
void DolphinNewMenu::slotResult(KJob* job)
--- /dev/null
+/***************************************************************************
+ * Copyright (C) 2009 by Peter Penz <peter.penz@gmx.at> *
+ * *
+ * 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 "dolphinnewmenuobserver.h"
+
+#include <kglobal.h>
+#include <knewmenu.h>
+
+class DolphinNewMenuObserverSingleton
+{
+public:
+ DolphinNewMenuObserver instance;
+};
+K_GLOBAL_STATIC(DolphinNewMenuObserverSingleton, s_dolphinNewMenuObserver)
+
+DolphinNewMenuObserver& DolphinNewMenuObserver::instance()
+{
+ return s_dolphinNewMenuObserver->instance;
+}
+
+void DolphinNewMenuObserver::attach(const KNewMenu* menu)
+{
+ connect(menu, SIGNAL(itemCreated(const KUrl&)),
+ this, SIGNAL(itemCreated(const KUrl&)));
+}
+
+void DolphinNewMenuObserver::detach(const KNewMenu* menu)
+{
+ disconnect(menu, SIGNAL(itemCreated(const KUrl&)),
+ this, SIGNAL(itemCreated(const KUrl&)));
+}
+
+DolphinNewMenuObserver::DolphinNewMenuObserver() :
+ QObject(0)
+{
+}
+
+DolphinNewMenuObserver::~DolphinNewMenuObserver()
+{
+}
+
+#include "dolphinnewmenuobserver.moc"
--- /dev/null
+/***************************************************************************
+ * Copyright (C) 2009 by Peter Penz <peter.penz@gmx.at> *
+ * *
+ * 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 *
+ ***************************************************************************/
+
+#ifndef DOLPHINNEWMENUOBSERVER_H
+#define DOLPHINNEWMENUOBSERVER_H
+
+#include <QObject>
+
+#include "libdolphin_export.h"
+
+class KNewMenu;
+class KUrl;
+
+/**
+ * @brief Allows to observe new file items that have been created
+ * by a DolphinNewMenu instance.
+ *
+ * As soon as a DolphinNewMenu instance created a new item,
+ * the observer will emit the signal itemCreated().
+ */
+class LIBDOLPHINPRIVATE_EXPORT DolphinNewMenuObserver : public QObject
+{
+ Q_OBJECT
+
+public:
+ static DolphinNewMenuObserver& instance();
+ void attach(const KNewMenu* menu);
+ void detach(const KNewMenu* menu);
+
+signals:
+ void itemCreated(const KUrl& url);
+
+private:
+ DolphinNewMenuObserver();
+ virtual ~DolphinNewMenuObserver();
+
+ friend class DolphinNewMenuObserverSingleton;
+};
+
+#endif
#include "dolphinmodel.h"
#include "dolphincolumnview.h"
#include "dolphincontroller.h"
+#include "dolphindetailsview.h"
#include "dolphinfileitemdelegate.h"
+#include "dolphinnewmenuobserver.h"
#include "dolphinsortfilterproxymodel.h"
-#include "dolphindetailsview.h"
#include "dolphin_detailsmodesettings.h"
#include "dolphiniconsview.h"
-#include "settings/dolphinsettings.h"
#include "dolphin_generalsettings.h"
#include "draganddrophelper.h"
#include "folderexpander.h"
#include "renamedialog.h"
#include "tooltips/tooltipmanager.h"
+#include "settings/dolphinsettings.h"
#include "viewproperties.h"
#include "zoomlevelinfo.h"
m_toolTipManager(0),
m_rootUrl(),
m_currentItemUrl(),
+ m_createdItemUrl(),
m_expandedDragSource(0)
{
m_topLayout = new QVBoxLayout(this);
connect(m_dirLister, SIGNAL(refreshItems(const QList<QPair<KFileItem,KFileItem>>&)),
this, SLOT(slotRefreshItems()));
+ // When a new item has been created by the "Create New..." menu, the item should
+ // get selected and it must be assured that the item will get visible. As the
+ // creation is done asynchronously, several signals must be checked:
+ connect(&DolphinNewMenuObserver::instance(), SIGNAL(itemCreated(const KUrl&)),
+ this, SLOT(observeCreatedItem(const KUrl&)));
+
applyViewProperties(url);
m_topLayout->addWidget(itemView());
}
}
}
+void DolphinView::observeCreatedItem(const KUrl& url)
+{
+ m_createdItemUrl = url;
+ connect(m_dolphinModel, SIGNAL(rowsInserted(const QModelIndex&, int, int)),
+ this, SLOT(selectAndScrollToCreatedItem()));
+}
+
+void DolphinView::selectAndScrollToCreatedItem()
+{
+ const QModelIndex dirIndex = m_dolphinModel->indexForUrl(m_createdItemUrl);
+ if (dirIndex.isValid()) {
+ const QModelIndex proxyIndex = m_proxyModel->mapFromSource(dirIndex);
+ itemView()->setCurrentIndex(proxyIndex);
+ }
+
+ disconnect(m_dolphinModel, SIGNAL(rowsInserted(const QModelIndex&, int, int)),
+ this, SLOT(selectAndScrollToCreatedItem()));
+ m_createdItemUrl = KUrl();
+}
+
void DolphinView::emitContentsMoved()
{
// only emit the contents moved signal if:
*/
void deleteWhenNotDragSource(QAbstractItemView* view);
+ /**
+ * Observes the item with the URL \a url. As soon as the directory
+ * model indicates that the item is available, the item will
+ * get selected and it is assure that the item stays visible.
+ *
+ * @see selectAndScrollToCreatedItem()
+ */
+ void observeCreatedItem(const KUrl& url);
+
+ /**
+ * Selects and scrolls to the item that got observed
+ * by observeCreatedItem().
+ */
+ void selectAndScrollToCreatedItem();
+
private:
void loadDirectory(const KUrl& url, bool reload = false);
KUrl m_rootUrl;
KUrl m_currentItemUrl;
+ KUrl m_createdItemUrl; // URL for a new item that got created by the "Create New..." menu
QAbstractItemView* m_expandedDragSource;
};