summaryrefslogtreecommitdiffstats
path: root/noatun-plugins/nexscope/gui.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'noatun-plugins/nexscope/gui.cpp')
-rw-r--r--noatun-plugins/nexscope/gui.cpp197
1 files changed, 197 insertions, 0 deletions
diff --git a/noatun-plugins/nexscope/gui.cpp b/noatun-plugins/nexscope/gui.cpp
new file mode 100644
index 0000000..912d8ea
--- /dev/null
+++ b/noatun-plugins/nexscope/gui.cpp
@@ -0,0 +1,197 @@
+#include <klocale.h>
+#include <qheader.h>
+#include <qlayout.h>
+#include <qdragobject.h>
+#include <kfiledialog.h>
+#include <kstdaction.h>
+#include <kaction.h>
+
+#include "gui.h"
+#include "renderers.h"
+#include "nex.h"
+
+class CreatorItem : public QListViewItem
+{
+public:
+ CreatorItem(QListView *parent, const QString &title)
+ : QListViewItem(parent, title)
+ {}
+};
+
+class TreeItem : public QListViewItem
+{
+public:
+ TreeItem(TreeItem *parent, TreeItem *after, CreatorItem *creator)
+ : QListViewItem(parent, after, creator->text(0))
+ {
+ RendererList *list;
+ if (parent)
+ list=static_cast<RendererList*>(parent->mRenderer);
+ else
+ list=nex->rendererList();
+
+ Renderer *afterRenderer=0;
+ if (after)
+ afterRenderer=after->mRenderer;
+
+ list->lock();
+ int pos=list->renderers().findRef(afterRenderer);
+ if (pos==-1) pos=list->renderers().count();
+
+ list->renderers().insert((uint)pos, mRenderer=nex->renderer(creator->text(0)));
+ list->unlock();
+ }
+
+ TreeItem(QListView *parent, TreeItem *after, const QString &title)
+ : QListViewItem(parent, after, title)
+ {
+ mRenderer=nex->rendererList();
+ setExpandable(true);
+ }
+
+ ~TreeItem()
+ {
+ RendererList *list;
+ if (parent())
+ list=static_cast<RendererList*>(static_cast<TreeItem*>(parent())->mRenderer);
+ else
+ return;
+
+ list->lock();
+ list->renderers().removeRef(mRenderer);
+ list->unlock();
+ delete mRenderer;
+ }
+
+ Renderer *renderer() { return mRenderer; }
+private:
+ Renderer *mRenderer;
+};
+
+Control::Control() : mConfigurator(0)
+{
+ {
+ KToolBar *tools=toolBar();
+ KStdAction::save(this, SLOT(save()), actionCollection())->plug(tools);
+ KStdAction::saveAs(this, SLOT(saveAs()), actionCollection())->plug(tools);
+ KStdAction::open(this, SLOT(open()), actionCollection())->plug(tools);
+
+ }
+
+ setCaption(i18n("Nex Configuration"));
+ QSplitter *mainSplitter=new QSplitter(this);
+ setCentralWidget(mainSplitter);
+ QSplitter *left=new QSplitter(Qt::Vertical, mainSplitter);
+ {
+ mTree=new RendererListView(left);
+ mTree->setItemsMovable(true);
+ mTree->setSorting(-1);
+ mTree->setRootIsDecorated(true);
+
+ connect(mTree, SIGNAL(dropped(QDropEvent*, QListViewItem*, QListViewItem*)),
+ SLOT(dropEvent(QDropEvent*, QListViewItem*, QListViewItem*)));
+
+ connect(mTree, SIGNAL(currentChanged(QListViewItem*)),
+ SLOT(currentChanged(QListViewItem*)));
+
+ mCreatorsList=new RendererListView(left);
+ mCreatorsList->addColumn(i18n("Name"));
+ mCreatorsList->header()->hide();
+ mCreatorsList->setDropVisualizer(false);
+ }
+
+ mRight=new QWidget(mainSplitter);
+ (new QHBoxLayout(mRight))->setAutoAdd(true);
+
+ QStringList list=nex->renderers();
+ for (QStringList::Iterator i=list.begin(); i!=list.end(); ++i)
+ addCreator(*i);
+
+ new TreeItem(mTree, 0, i18n("Main"));
+}
+
+void Control::save(const KURL &file)
+{
+// TODO
+}
+
+void Control::save()
+{
+ if (mCurrentURL.isEmpty())
+ saveAs();
+ else
+ save(mCurrentURL);
+}
+
+void Control::saveAs()
+{
+ KURL url;
+ url=KFileDialog::getSaveURL(0, "application/x-nexscope", this);
+ if (!url.isEmpty())
+ save(mCurrentURL=url);
+}
+
+void Control::open()
+{
+ KURL url=KFileDialog::getOpenURL(0, "application/x-nexscope");
+ if (!url.isEmpty())
+ open(mCurrentURL=url);
+}
+
+void Control::open(const KURL &file)
+{
+// TODO
+}
+
+
+void Control::addCreator(const QString &title)
+{
+ new CreatorItem(mCreatorsList, title);
+}
+
+void Control::dropEvent(QDropEvent *e, QListViewItem *parent, QListViewItem *pafter)
+{
+// if ((e->source() == mCreatorsList) && parent)
+ {
+ CreatorItem *i=static_cast<CreatorItem*>(mCreatorsList->currentItem());
+ if (!i)
+ {
+ std::cerr << "no creatoritem" << std::endl;
+
+ }
+ new TreeItem(static_cast<TreeItem*>(parent), static_cast<TreeItem*>(pafter), i);
+ }
+}
+
+void Control::currentChanged(QListViewItem *item)
+{
+ TreeItem *treeItem=static_cast<TreeItem*>(item);
+ delete mConfigurator;
+ mConfigurator=treeItem->renderer()->configure(mRight);
+ if (mConfigurator)
+ mConfigurator->show();
+}
+
+
+RendererListView::RendererListView(QWidget *p) : KListView(p)
+{
+ addColumn(i18n("Name"));
+ header()->hide();
+ setDragEnabled(true);
+ setAcceptDrops(true);
+ setSelectionMode(QListView::Single);
+}
+
+bool RendererListView::acceptDrag(QDropEvent *event) const
+{
+ return true; //QCString(event->format()) == "application/x-nex-rendererdrag";
+}
+
+QDragObject *RendererListView::dragObject() const
+{
+ if (!currentItem()) return 0;
+ return new QStoredDrag("application/x-nex-rendererdrag", (QWidget*)this);
+}
+
+
+#include "gui.moc"