#
#
# add_file "guitone/res/dialogs/ancestry_graph.ui"
# content [8d9abf4e26fc78dfbca037ff9dbb1cea72959dfd]
#
# add_file "guitone/src/model/Graph.cpp"
# content [9de07bc21167aa3019a82f5feca88cdb323e1104]
#
# add_file "guitone/src/model/Graph.h"
# content [dfc025845ba3213b0eb7349adf08ab66157e044b]
#
# add_file "guitone/src/view/dialogs/AncestryGraph.cpp"
# content [58a33faa80059e6d49bb56be9e95354f2d92ddcf]
#
# add_file "guitone/src/view/dialogs/AncestryGraph.h"
# content [0c3eec8dc2abc89a2ee10f728d81448cc2bd5479]
#
# add_file "guitone/src/view/dialogs/ui_ancestry_graph.h"
# content [70340c893ab4bfabf9dc46d42fcc0e6eb4ee2a66]
#
# patch ".mtn-ignore"
# from [73f2fd80083fdbd3aa6c139bbefd78727f2cffb2]
# to [c5f2049b1e1835cb2dae0227264e739966b30248]
#
# patch "guitone/guitone.pro"
# from [dd29e1ed22d90e4a108e51568b340b53847921ea]
# to [68b3ce576963c3d66b3e381071c0738815e280fc]
#
# patch "guitone/src/view/dialogs/ui_KeyManagment.h"
# from [ef076eb7a2ef3e3d88e008a296fdd25eed8400b7]
# to [e82e9ba78fec73e56da2e9b08b2d64171849f85d]
#
# patch "guitone/src/view/dialogs/ui_preferences.h"
# from [241e018833bdf465c7cce8a41e7c3a0980d1fcb1]
# to [7bf70ad1a88dcebe0fc90dc4eb0a309463676980]
#
# patch "guitone/src/view/dialogs/ui_switch_workspace.h"
# from [7f800f9ff1683e12662b86fc5a9ad5188368b4a0]
# to [9ea0d34e428e64e6f73521babeb3be52b12becd1]
#
# patch "guitone.pro"
# from [d25442e228ae59d846371735ed708838c8d3bcf9]
# to [d87016abc13868f69c1676daa21669d0547d1901]
#
============================================================
--- guitone/res/dialogs/ancestry_graph.ui 8d9abf4e26fc78dfbca037ff9dbb1cea72959dfd
+++ guitone/res/dialogs/ancestry_graph.ui 8d9abf4e26fc78dfbca037ff9dbb1cea72959dfd
@@ -0,0 +1,92 @@
+
+ AncestryGraph
+
+
+ Qt::NonModal
+
+
+
+ 0
+ 0
+ 550
+ 373
+
+
+
+ Ancestry Graph
+
+
+
+ 9
+
+
+ 6
+
+ -
+
+
+ 0
+
+
+ 6
+
+
-
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok
+
+
+
+ -
+
+
+
+
+
+
+
+
+ GraphItemView
+ QGraphicsView
+
+
+
+
+
+
+ buttonBox
+ accepted()
+ AncestryGraph
+ accept()
+
+
+ 248
+ 254
+
+
+ 157
+ 274
+
+
+
+
+ buttonBox
+ rejected()
+ AncestryGraph
+ reject()
+
+
+ 316
+ 260
+
+
+ 286
+ 274
+
+
+
+
+
============================================================
--- guitone/src/model/Graph.cpp 9de07bc21167aa3019a82f5feca88cdb323e1104
+++ guitone/src/model/Graph.cpp 9de07bc21167aa3019a82f5feca88cdb323e1104
@@ -0,0 +1,114 @@
+/***************************************************************************
+ * Copyright (C) 2006 by Thomas Keller *
+ * address@hidden *
+ * *
+ * 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 "Graph.h"
+#include "../monotone/Monotone.h"
+#include "la/laGraph.h"
+
+using namespace qan;
+
+Graph::Graph(QObject *parent)
+ : AutomateCommand(parent)
+{
+ graph = new la::Graph();
+}
+
+Graph::~Graph()
+{
+ if (graph) delete graph;
+}
+
+bool Graph::readGraph()
+{
+ // TODO: clear the current graph view
+
+ // reset the view
+ reset();
+
+ QStringList cmd;
+ cmd.append("graph");
+
+ Monotone *mtn = Monotone::singleton();
+
+ // enable the wait cursor
+ qApp->setOverrideCursor(Qt::WaitCursor);
+
+ return mtn->triggerCommand(this, cmd);
+}
+
+void Graph::parseOutput(AutomateCommand *caller)
+{
+ // if not we are the caller, omit the parsing
+ if (caller != this) return;
+
+ // clear our data structures
+
+ QStringList revisionList = AutomateCommand::data.split("\n");
+
+ QMap nodeMap;
+ QMap parentMap;
+
+ la::Node *curNode, *parentNode;
+ la::Edge *edge;
+
+ // 1st pass: create node objects for every rev and add it to the graph
+ for (int i=0, j=revisionList.size(); i 0);
+ QString rev = revs.takeFirst();
+ curNode = new la::Node(rev.toStdString(), la::Node::TYPE);
+ graph->insertNode(*curNode);
+
+ // remember those for the 2nd pass
+ nodeMap[rev] = curNode;
+ parentMap[rev] = revs;
+ }
+
+ revisionList.clear();
+ QStringList singleRevs = nodeMap.keys();
+
+ // 2nd pass: now that we have all nodes create the edges
+ for (int i=0, j=singleRevs.size(); iaddInEdge(*edge);
+ parentNode->addOutEdge(*edge);
+ }
+ }
+
+ // reset the view
+ reset();
+
+ // restore the normal cursor
+ qApp->restoreOverrideCursor();
+
+ // signal that we've finished (whoever listens to that)
+ emit graphRead();
+}
============================================================
--- guitone/src/model/Graph.h dfc025845ba3213b0eb7349adf08ab66157e044b
+++ guitone/src/model/Graph.h dfc025845ba3213b0eb7349adf08ab66157e044b
@@ -0,0 +1,60 @@
+/***************************************************************************
+ * Copyright (C) 2006 by Thomas Keller *
+ * address@hidden *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef SELECT_H
+#define SELECT_H
+
+#include "AutomateCommand.h"
+
+namespace qan {
+ namespace la {
+ class Graph;
+ }
+}
+
+class Graph : public AutomateCommand
+{
+ Q_OBJECT
+public:
+ Graph(QObject*);
+ virtual ~Graph();
+
+ // needed Qt Model methods
+ inline QVariant data(const QModelIndex&, int) const { return QVariant(); };
+ inline Qt::ItemFlags flags(const QModelIndex&) const { return 0; };
+ inline QVariant headerData(int, Qt::Orientation, int) const { return QVariant(); };
+ inline QModelIndex index(int, int, const QModelIndex&) const { return QModelIndex(); };
+ inline QModelIndex parent(const QModelIndex&) const { return QModelIndex(); };
+ inline int rowCount(const QModelIndex&) const { return 0; };
+ inline int columnCount(const QModelIndex&) const { return 0; };
+
+public slots:
+ bool readGraph();
+
+
+signals:
+ void graphRead();
+
+private:
+ void parseOutput(AutomateCommand*);
+ qan::la::Graph *graph;
+};
+
+#endif
============================================================
--- guitone/src/view/dialogs/AncestryGraph.cpp 58a33faa80059e6d49bb56be9e95354f2d92ddcf
+++ guitone/src/view/dialogs/AncestryGraph.cpp 58a33faa80059e6d49bb56be9e95354f2d92ddcf
@@ -0,0 +1,32 @@
+/***************************************************************************
+ * Copyright (C) 2006 by Thomas Keller *
+ * address@hidden *
+ * *
+ * 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 "AncestryGraph.h"
+#include "../../util/Settings.h"
+#include "../../monotone/Monotone.h"
+
+AncestryGraph::AncestryGraph(QWidget* parent)
+ : QDialog(parent)
+{
+ setupUi(this);
+
+}
+
+AncestryGraph::~AncestryGraph() {}
============================================================
--- guitone/src/view/dialogs/AncestryGraph.h 0c3eec8dc2abc89a2ee10f728d81448cc2bd5479
+++ guitone/src/view/dialogs/AncestryGraph.h 0c3eec8dc2abc89a2ee10f728d81448cc2bd5479
@@ -0,0 +1,35 @@
+/***************************************************************************
+ * Copyright (C) 2006 by Thomas Keller *
+ * address@hidden *
+ * *
+ * 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. *
+ ***************************************************************************/
+
+#ifndef ANCESTRY_GRAPH_H
+#define ANCESTRY_GRAPH_H
+
+#include "ui_ancestry_graph.h"
+
+class AncestryGraph : public QDialog, private Ui::AncestryGraph
+{
+ Q_OBJECT
+
+public:
+ AncestryGraph(QWidget*);
+ ~AncestryGraph();
+};
+
+#endif
============================================================
--- guitone/src/view/dialogs/ui_ancestry_graph.h 70340c893ab4bfabf9dc46d42fcc0e6eb4ee2a66
+++ guitone/src/view/dialogs/ui_ancestry_graph.h 70340c893ab4bfabf9dc46d42fcc0e6eb4ee2a66
@@ -0,0 +1,83 @@
+/********************************************************************************
+** Form generated from reading ui file 'ancestry_graph.ui'
+**
+** Created: Fri Oct 6 23:55:18 2006
+** by: Qt User Interface Compiler version 4.2.0-snapshot-20061003
+**
+** WARNING! All changes made in this file will be lost when recompiling ui file!
+********************************************************************************/
+
+#ifndef UI_ANCESTRY_GRAPH_H
+#define UI_ANCESTRY_GRAPH_H
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "can/canGraphItemView.h"
+
+class Ui_AncestryGraph
+{
+public:
+ QHBoxLayout *hboxLayout;
+ QVBoxLayout *vboxLayout;
+ QDialogButtonBox *buttonBox;
+ GraphItemView *graphView;
+
+ void setupUi(QDialog *AncestryGraph)
+ {
+ AncestryGraph->setObjectName(QString::fromUtf8("AncestryGraph"));
+ AncestryGraph->setWindowModality(Qt::NonModal);
+ hboxLayout = new QHBoxLayout(AncestryGraph);
+ hboxLayout->setSpacing(6);
+ hboxLayout->setMargin(9);
+ hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ vboxLayout = new QVBoxLayout();
+ vboxLayout->setSpacing(6);
+ vboxLayout->setMargin(0);
+ vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ buttonBox = new QDialogButtonBox(AncestryGraph);
+ buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setOrientation(Qt::Horizontal);
+ buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok);
+
+ vboxLayout->addWidget(buttonBox);
+
+ graphView = new GraphItemView(AncestryGraph);
+ graphView->setObjectName(QString::fromUtf8("graphView"));
+
+ vboxLayout->addWidget(graphView);
+
+
+ hboxLayout->addLayout(vboxLayout);
+
+
+ retranslateUi(AncestryGraph);
+
+ QSize size(550, 373);
+ size = size.expandedTo(AncestryGraph->minimumSizeHint());
+ AncestryGraph->resize(size);
+
+ QObject::connect(buttonBox, SIGNAL(accepted()), AncestryGraph, SLOT(accept()));
+ QObject::connect(buttonBox, SIGNAL(rejected()), AncestryGraph, SLOT(reject()));
+
+ QMetaObject::connectSlotsByName(AncestryGraph);
+ } // setupUi
+
+ void retranslateUi(QDialog *AncestryGraph)
+ {
+ AncestryGraph->setWindowTitle(QApplication::translate("AncestryGraph", "Ancestry Graph", 0, QApplication::UnicodeUTF8));
+ Q_UNUSED(AncestryGraph);
+ } // retranslateUi
+
+};
+
+namespace Ui {
+ class AncestryGraph: public Ui_AncestryGraph {};
+} // namespace Ui
+
+#endif // UI_ANCESTRY_GRAPH_H
============================================================
--- .mtn-ignore 73f2fd80083fdbd3aa6c139bbefd78727f2cffb2
+++ .mtn-ignore c5f2049b1e1835cb2dae0227264e739966b30248
@@ -1,5 +1,6 @@ Makefile
Makefile
-guitone\.xcodeproj
+.*\.xcodeproj
+Info.plist
guitone\/res\/i18n\/.+\.qm
guitone\/tmp.*
guitone\/bin/.*
============================================================
--- guitone/guitone.pro dd29e1ed22d90e4a108e51568b340b53847921ea
+++ guitone/guitone.pro 68b3ce576963c3d66b3e381071c0738815e280fc
@@ -8,6 +8,7 @@ HEADERS += src/view/Guitone.h \
src/view/AttributesView.h \
src/view/dialogs/SwitchWorkspaceRevision.h \
src/view/dialogs/Preferences.h \
+ src/view/dialogs/AncestryGraph.h \
src/view/dialogs/KeyManagment.h \
src/monotone/Monotone.h \
src/model/AutomateCommand.h \
@@ -17,6 +18,7 @@ HEADERS += src/view/Guitone.h \
src/model/Attributes.h \
src/model/Select.h \
src/model/Certs.h \
+ src/model/Graph.h \
src/util/IconProvider.h \
src/util/StanzaParser.h \
src/util/Settings.h
@@ -27,6 +29,7 @@ SOURCES += src/view/Guitone.cpp \
src/view/AttributesView.cpp \
src/view/dialogs/SwitchWorkspaceRevision.cpp \
src/view/dialogs/Preferences.cpp \
+ src/view/dialogs/AncestryGraph.cpp \
src/view/dialogs/KeyManagment.cpp \
src/monotone/Monotone.cpp \
src/model/AutomateCommand.cpp \
@@ -36,14 +39,18 @@ SOURCES += src/view/Guitone.cpp \
src/model/Attributes.cpp \
src/model/Select.cpp \
src/model/Certs.cpp \
+ src/model/Graph.cpp \
src/util/IconProvider.cpp \
src/util/StanzaParser.cpp \
src/util/Settings.cpp \
src/main.cpp
FORMS += res/dialogs/switch_workspace.ui \
res/dialogs/preferences.ui \
+ res/dialogs/ancestry_graph.ui \
res/dialogs/KeyManagment.ui
-UI_DIR = src/view/dialogs
+LIBS = -L../libs/qanava/build -lqanava_la -lqanava_can -lqanava_ui -lqanava_utl
+INCLUDEPATH = ../libs/qanava/src
+UI_DIR = src/view/dialogs
OBJECTS_DIR = tmp
MOC_DIR = tmp
DESTDIR = bin
============================================================
--- guitone/src/view/dialogs/ui_KeyManagment.h ef076eb7a2ef3e3d88e008a296fdd25eed8400b7
+++ guitone/src/view/dialogs/ui_KeyManagment.h e82e9ba78fec73e56da2e9b08b2d64171849f85d
@@ -1,12 +1,3 @@
-/********************************************************************************
-** Form generated from reading ui file 'KeyManagment.ui'
-**
-** Created: Wed Oct 4 16:25:59 2006
-** by: Qt User Interface Compiler version 4.2.0
-**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
-********************************************************************************/
-
#ifndef UI_KEYMANAGMENT_H
#define UI_KEYMANAGMENT_H
@@ -39,6 +30,7 @@ public:
void setupUi(QDialog *KeyManagment)
{
KeyManagment->setObjectName(QString::fromUtf8("KeyManagment"));
+ KeyManagment->resize(QSize(587, 433).expandedTo(KeyManagment->minimumSizeHint()));
gridLayout = new QGridLayout(KeyManagment);
gridLayout->setSpacing(6);
gridLayout->setMargin(9);
@@ -90,13 +82,7 @@ public:
gridLayout->addLayout(hboxLayout, 2, 0, 1, 1);
-
retranslateUi(KeyManagment);
-
- QSize size(587, 433);
- size = size.expandedTo(KeyManagment->minimumSizeHint());
- KeyManagment->resize(size);
-
QObject::connect(okButton, SIGNAL(clicked()), KeyManagment, SLOT(accept()));
QObject::connect(cancelButton, SIGNAL(clicked()), KeyManagment, SLOT(reject()));
@@ -106,8 +92,8 @@ public:
void retranslateUi(QDialog *KeyManagment)
{
KeyManagment->setWindowTitle(QApplication::translate("KeyManagment", "Key Managment", 0, QApplication::UnicodeUTF8));
- if (tableWidget->columnCount() < 4)
- tableWidget->setColumnCount(4);
+ tableWidget->clear();
+ tableWidget->setColumnCount(4);
QTableWidgetItem *__colItem = new QTableWidgetItem();
__colItem->setText(QApplication::translate("KeyManagment", "Hash", 0, QApplication::UnicodeUTF8));
@@ -124,6 +110,7 @@ public:
QTableWidgetItem *__colItem3 = new QTableWidgetItem();
__colItem3->setText(QApplication::translate("KeyManagment", "Priv Loc", 0, QApplication::UnicodeUTF8));
tableWidget->setHorizontalHeaderItem(3, __colItem3);
+ tableWidget->setRowCount(0);
pushButtonGenerate->setText(QApplication::translate("KeyManagment", "Generate", 0, QApplication::UnicodeUTF8));
pushButtonRemove->setText(QApplication::translate("KeyManagment", "Remove", 0, QApplication::UnicodeUTF8));
okButton->setText(QApplication::translate("KeyManagment", "OK", 0, QApplication::UnicodeUTF8));
============================================================
--- guitone/src/view/dialogs/ui_preferences.h 241e018833bdf465c7cce8a41e7c3a0980d1fcb1
+++ guitone/src/view/dialogs/ui_preferences.h 7bf70ad1a88dcebe0fc90dc4eb0a309463676980
@@ -1,12 +1,3 @@
-/********************************************************************************
-** Form generated from reading ui file 'preferences.ui'
-**
-** Created: Wed Oct 4 16:25:59 2006
-** by: Qt User Interface Compiler version 4.2.0
-**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
-********************************************************************************/
-
#ifndef UI_PREFERENCES_H
#define UI_PREFERENCES_H
@@ -40,6 +31,7 @@ public:
void setupUi(QDialog *PreferencesDialog)
{
PreferencesDialog->setObjectName(QString::fromUtf8("PreferencesDialog"));
+ PreferencesDialog->resize(QSize(404, 140).expandedTo(PreferencesDialog->minimumSizeHint()));
QSizePolicy sizePolicy(static_cast(3), static_cast(0));
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
@@ -112,13 +104,7 @@ public:
QWidget::setTabOrder(mtnExecutablePath, selectMtnExecutable);
QWidget::setTabOrder(selectMtnExecutable, okButton);
QWidget::setTabOrder(okButton, cancelButton);
-
retranslateUi(PreferencesDialog);
-
- QSize size(404, 140);
- size = size.expandedTo(PreferencesDialog->minimumSizeHint());
- PreferencesDialog->resize(size);
-
QObject::connect(okButton, SIGNAL(clicked()), PreferencesDialog, SLOT(accept()));
QObject::connect(cancelButton, SIGNAL(clicked()), PreferencesDialog, SLOT(reject()));
============================================================
--- guitone/src/view/dialogs/ui_switch_workspace.h 7f800f9ff1683e12662b86fc5a9ad5188368b4a0
+++ guitone/src/view/dialogs/ui_switch_workspace.h 9ea0d34e428e64e6f73521babeb3be52b12becd1
@@ -1,12 +1,3 @@
-/********************************************************************************
-** Form generated from reading ui file 'switch_workspace.ui'
-**
-** Created: Wed Oct 4 16:25:59 2006
-** by: Qt User Interface Compiler version 4.2.0
-**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
-********************************************************************************/
-
#ifndef UI_SWITCH_WORKSPACE_H
#define UI_SWITCH_WORKSPACE_H
@@ -46,6 +37,7 @@ public:
void setupUi(QDialog *SwitchWorkspaceRevision)
{
SwitchWorkspaceRevision->setObjectName(QString::fromUtf8("SwitchWorkspaceRevision"));
+ SwitchWorkspaceRevision->resize(QSize(622, 421).expandedTo(SwitchWorkspaceRevision->minimumSizeHint()));
vboxLayout = new QVBoxLayout(SwitchWorkspaceRevision);
vboxLayout->setSpacing(6);
vboxLayout->setMargin(9);
@@ -131,13 +123,7 @@ public:
QWidget::setTabOrder(revisionList, certList);
QWidget::setTabOrder(certList, okButton);
QWidget::setTabOrder(okButton, cancelButton);
-
retranslateUi(SwitchWorkspaceRevision);
-
- QSize size(622, 421);
- size = size.expandedTo(SwitchWorkspaceRevision->minimumSizeHint());
- SwitchWorkspaceRevision->resize(size);
-
QObject::connect(okButton, SIGNAL(clicked()), SwitchWorkspaceRevision, SLOT(accept()));
QObject::connect(cancelButton, SIGNAL(clicked()), SwitchWorkspaceRevision, SLOT(reject()));
============================================================
--- guitone.pro d25442e228ae59d846371735ed708838c8d3bcf9
+++ guitone.pro d87016abc13868f69c1676daa21669d0547d1901
@@ -1,4 +1,4 @@ TEMPLATE = subdirs
TEMPLATE = subdirs
-SUBDIRS = guitone \
- libs
+SUBDIRS = libs \
+ guitone