Changed changelog, copyright. Support for sorting checked items to bottom.
authorWillem Liu <willem.liu@gmail.com>
Thu, 16 Sep 2010 16:40:31 +0000 (18:40 +0200)
committerWillem Liu <willem.liu@gmail.com>
Thu, 16 Sep 2010 16:40:31 +0000 (18:40 +0200)
debian/changelog
debian/copyright
easylist.pro.user
src/listwindow.ui
src/mainwindow.cpp
src/mainwindow.h
src/src.pro

index 0a1e8f3..1bf933a 100755 (executable)
@@ -1,5 +1,5 @@
-easylist (0.1) unstable; urgency=low
+easylist (0.3.4) unstable; urgency=low
 
-  * Initial Release.
+  * Now supports sorting checked items to bottom of the list.
 
- -- unknown <>  Tue, 07 Sep 2010 13:56:12 +0200
+ -- Willem Liu <willem.liu@gmail.com>  Tue, 07 Sep 2010 13:56:12 +0200
index 9ebd3a4..a283cb7 100755 (executable)
@@ -1,17 +1,15 @@
-This package was debianized by unknown <> on
+This package was debianized by Willem Liu <willem.liu@gmail.com> on
 Tue, 07 Sep 2010 13:56:12 +0200.
 
-It was downloaded from <url://example.com>
+It was downloaded from http://gitorious.org/easylist
 
 Upstream Author(s):
 
-    <put author's name and email here>
-    <likewise for another author>
+    Willem Liu <willem.liu@gmail.com>
 
 Copyright:
 
-    <Copyright (C) YYYY Name OfAuthor>
-    <likewise for another author>
+    Copyright (C) 2010 Willem Liu
 
 License:
 
@@ -32,7 +30,7 @@ License:
 On Debian systems, the complete text of the GNU General
 Public License can be found in `/usr/share/common-licenses/GPL'.
 
-The Debian packaging is (C) 2010, unknown <> and
+The Debian packaging is (C) 2010, Willem Liu <willem.liu@gmail.com> and
 is licensed under the GPL, see above.
 
 
index 2e04f1b..43780d5 100755 (executable)
@@ -46,7 +46,7 @@
     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Debug</value>
     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4BuildConfiguration</value>
     <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration" type="int">2</value>
-    <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">C:/dev/cpp/easylist-build-desktop</value>
+    <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">C:/dev/cpp/easylist-0.3.4-build-desktop</value>
     <value key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId" type="int">20</value>
     <value key="Qt4ProjectManager.Qt4BuildConfiguration.ToolChain" type="int">2</value>
     <value key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild" type="bool">false</value>
@@ -80,7 +80,7 @@
     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Release</value>
     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4BuildConfiguration</value>
     <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration" type="int">0</value>
-    <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">C:/dev/cpp/easylist-build-desktop</value>
+    <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">C:/dev/cpp/easylist-0.3.4-build-desktop</value>
     <value key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId" type="int">20</value>
     <value key="Qt4ProjectManager.Qt4BuildConfiguration.ToolChain" type="int">2</value>
     <value key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild" type="bool">true</value>
      <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value>
     </valuemap>
     <valuemap key="ProjectExplorer.BuildConfiguration.BuildStep.2" type="QVariantMap">
+     <value key="Packaging Enabled" type="bool">true</value>
      <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value>
      <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MaemoPackageCreationStep</value>
      <valuelist key="Qt4ProjectManager.BuildStep.MaemoPackage.LocalFiles" type="QVariantList">
-      <value type="QString">C:/dev/cpp/easylist/src/data/26x26/easylist.png</value>
-      <value type="QString">C:/dev/cpp/easylist/src/data/40x40/easylist.png</value>
-      <value type="QString">C:/dev/cpp/easylist/src/data/48x48/easylist.png</value>
-      <value type="QString">C:/dev/cpp/easylist/src/data/64x64/easylist.png</value>
-      <value type="QString">C:/dev/cpp/easylist/src/easylist.desktop</value>
+      <value type="QString">C:/dev/cpp/easylist-0.3.4/src/data/26x26/easylist.png</value>
+      <value type="QString">C:/dev/cpp/easylist-0.3.4/src/data/40x40/easylist.png</value>
+      <value type="QString">C:/dev/cpp/easylist-0.3.4/src/data/48x48/easylist.png</value>
+      <value type="QString">C:/dev/cpp/easylist-0.3.4/src/data/64x64/easylist.png</value>
+      <value type="QString">C:/dev/cpp/easylist-0.3.4/src/easylist.desktop</value>
      </valuelist>
      <value key="Qt4ProjectManager.BuildStep.MaemoPackage.Modified" type="bool">false</value>
      <value key="Qt4ProjectManager.BuildStep.MaemoPackage.RemoteExe" type="QString">/usr/local/bin/easylist</value>
       <value type="QString">/usr/share/icons/hicolor/64x64/apps/easylist.png</value>
       <value type="QString">/usr/share/applications/hildon/easylist.desktop</value>
      </valuelist>
+     <value key="Version Number" type="QString">0.0.1</value>
     </valuemap>
     <value key="ProjectExplorer.BuildConfiguration.BuildStepsCount" type="int">3</value>
     <valuemap key="ProjectExplorer.BuildConfiguration.CleanStep.0" type="QVariantMap">
     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Debug</value>
     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4BuildConfiguration</value>
     <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration" type="int">2</value>
-    <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">C:/dev/cpp/easylist</value>
+    <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">C:/dev/cpp/easylist-0.3.4</value>
     <value key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId" type="int">4</value>
     <value key="Qt4ProjectManager.Qt4BuildConfiguration.ToolChain" type="int">9</value>
     <value key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild" type="bool">false</value>
      <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value>
     </valuemap>
     <valuemap key="ProjectExplorer.BuildConfiguration.BuildStep.2" type="QVariantMap">
+     <value key="Packaging Enabled" type="bool">true</value>
      <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString"></value>
      <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MaemoPackageCreationStep</value>
      <valuelist key="Qt4ProjectManager.BuildStep.MaemoPackage.LocalFiles" type="QVariantList">
-      <value type="QString">C:/dev/cpp/easylist/src/easylist.desktop</value>
-      <value type="QString">C:/dev/cpp/easylist/src/data/26x26/easylist.png</value>
-      <value type="QString">C:/dev/cpp/easylist/src/data/40x40/easylist.png</value>
-      <value type="QString">C:/dev/cpp/easylist/src/data/48x48/easylist.png</value>
-      <value type="QString">C:/dev/cpp/easylist/src/data/64x64/easylist.png</value>
+      <value type="QString">C:/dev/cpp/easylist-0.3.4/src/easylist.desktop</value>
+      <value type="QString">C:/dev/cpp/easylist-0.3.4/src/data/26x26/easylist.png</value>
+      <value type="QString">C:/dev/cpp/easylist-0.3.4/src/data/40x40/easylist.png</value>
+      <value type="QString">C:/dev/cpp/easylist-0.3.4/src/data/48x48/easylist.png</value>
+      <value type="QString">C:/dev/cpp/easylist-0.3.4/src/data/64x64/easylist.png</value>
      </valuelist>
      <value key="Qt4ProjectManager.BuildStep.MaemoPackage.Modified" type="bool">false</value>
      <value key="Qt4ProjectManager.BuildStep.MaemoPackage.RemoteExe" type="QString">/opt/easylist/bin/easylist</value>
       <value type="QString">/usr/share/icons/hicolor/48x48/apps/easylist.png</value>
       <value type="QString">/usr/share/icons/hicolor/64x64/apps/easylist.png</value>
      </valuelist>
+     <value key="Version Number" type="QString">0.3.4</value>
     </valuemap>
     <value key="ProjectExplorer.BuildConfiguration.BuildStepsCount" type="int">3</value>
     <valuemap key="ProjectExplorer.BuildConfiguration.CleanStep.0" type="QVariantMap">
     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Release</value>
     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4BuildConfiguration</value>
     <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration" type="int">0</value>
-    <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">C:/dev/cpp/easylist</value>
+    <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">C:/dev/cpp/easylist-0.3.4</value>
     <value key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId" type="int">4</value>
     <value key="Qt4ProjectManager.Qt4BuildConfiguration.ToolChain" type="int">9</value>
     <value key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild" type="bool">false</value>
     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">New Maemo Run Configuration</value>
     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MaemoRunConfiguration</value>
     <valuelist key="Qt4ProjectManager.MaemoRunConfiguration.Arguments" type="QVariantList"/>
-    <valuemap key="Qt4ProjectManager.MaemoRunConfiguration.DebuggingHelpersLastDeployed" type="QVariantMap"/>
     <value key="Qt4ProjectManager.MaemoRunConfiguration.DeviceId" type="qulonglong">1</value>
-    <valuemap key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployed" type="QVariantMap"/>
+    <valuelist key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedFiles" type="QVariantList"/>
+    <valuelist key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedHosts" type="QVariantList"/>
+    <valuelist key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedRemotePaths" type="QVariantList"/>
+    <valuelist key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedTimes" type="QVariantList"/>
    </valuemap>
    <value key="ProjectExplorer.Target.RunConfigurationCount" type="int">1</value>
   </valuemap>
index a05a46d..266fa28 100755 (executable)
     </property>\r
     <addaction name="actionRotate"/>\r
    </widget>\r
+   <widget class="QMenu" name="menuChecked_Bottom">\r
+    <property name="title">\r
+     <string>Checked Bottom</string>\r
+    </property>\r
+    <addaction name="actionChecked_Bottom"/>\r
+   </widget>\r
    <addaction name="menuRotate"/>\r
    <addaction name="menuAbout"/>\r
+   <addaction name="menuChecked_Bottom"/>\r
   </widget>\r
   <action name="actionAbout">\r
    <property name="text">\r
     <string>Rotate</string>\r
    </property>\r
   </action>\r
+  <action name="actionChecked_Bottom">\r
+   <property name="checkable">\r
+    <bool>true</bool>\r
+   </property>\r
+   <property name="checked">\r
+    <bool>false</bool>\r
+   </property>\r
+   <property name="text">\r
+    <string>Checked Bottom</string>\r
+   </property>\r
+  </action>\r
  </widget>\r
  <resources/>\r
  <connections/>\r
index 0207601..8bab599 100755 (executable)
@@ -24,8 +24,6 @@
 #include "ui_mainwindow.h"\r
 #include "ui_listwindow.h"\r
 \r
-#define DBUS_KEYBOARD_SLIDE "/org/freedesktop/Hal/devices/platform_slide"\r
-\r
 /**\r
  * Constructor.\r
  * Settings are initialised here.\r
@@ -46,14 +44,21 @@ MainWindow::MainWindow(QWidget *parent) :
                                          QString("PropertyModified"),\r
                                          this, SLOT(slotKeyboardSlide()));\r
     // Initialise the settings.\r
-    settings = new QSettings("WillemLiu", "easylist");\r
+    settings = new QSettings(WILLEM_LIU, EASY_LIST);\r
+\r
+    // Set a default value for CHECKED_ITEMS_TO_BOTTOM\r
+    if(settings->contains(CHECKED_ITEMS_TO_BOTTOM) == false)\r
+    {\r
+        settings->setValue(CHECKED_ITEMS_TO_BOTTOM, false);\r
+    }\r
+\r
     // We always start in landscape mode.\r
-    landscape = settings->value("Landscape").toBool();\r
-    if(settings->contains("Landscape"))\r
+    landscape = settings->value(LANDSCAPE).toBool();\r
+    if(settings->contains(LANDSCAPE))\r
     {\r
-        landscape = settings->value("Landscape").toBool();\r
+        landscape = settings->value(LANDSCAPE).toBool();\r
     }\r
-    settings->setValue("Landscape", landscape);\r
+    settings->setValue(LANDSCAPE, landscape);\r
     // If keyboard is opened at start. We do landscape mode.\r
     // Otherwise we do what's read from the QSettings.\r
     if(isKeyboardClosed() == false)\r
@@ -66,6 +71,7 @@ MainWindow::MainWindow(QWidget *parent) :
     }\r
     // Auto-detect portrait/landscape mode. Only works on top widget.\r
 //    setAttribute(Qt::WA_Maemo5AutoOrientation, true);\r
+\r
     showListWindow();\r
 }\r
 \r
@@ -141,12 +147,14 @@ void MainWindow::slotEditWindowCancel()
 void MainWindow::slotEditWindowSave()\r
 {\r
     qDebug() << "Save";\r
-    settings->setValue("ListText", editUi->textEdit->toPlainText());\r
+    settings->setValue(LIST_TEXT, editUi->textEdit->toPlainText());\r
     showListWindow();\r
 }\r
 \r
 /**\r
  * Slot for action from Clear selected button in de the list window.\r
+ * It clears all QCheckBoxes from the layout, removes all checked items from\r
+ * the list text and finally calls generateList().\r
  *\r
  * @fn slotListWindowClearSelected\r
  */\r
@@ -164,7 +172,7 @@ void MainWindow::slotListWindowClearSelected()
         }\r
     }\r
 \r
-    settings->setValue("ListText", listText);\r
+    settings->setValue(LIST_TEXT, listText);\r
     generateList();\r
 }\r
 \r
@@ -197,7 +205,72 @@ void MainWindow::slotListWindowSaveChecked()
         listText.append("\n");\r
     }\r
 \r
-    settings->setValue("ListText", listText);\r
+    settings->setValue(LIST_TEXT, listText);\r
+}\r
+\r
+/**\r
+ * Is called when a checkbox has been clicked.\r
+ *\r
+ * @fn slotActionCheckBox\r
+ * @param bool checked - true if checkbox is checked.\r
+ */\r
+void MainWindow::slotActionCheckBox(bool checked)\r
+{\r
+    qDebug() << "CheckBox checked=" << checked;\r
+    slotListWindowSaveChecked();\r
+    if(settings->value(CHECKED_ITEMS_TO_BOTTOM).toBool())\r
+    {\r
+        slotSortCheckedBottom();\r
+        // Remove all the checkboxes from the screen.\r
+        foreach(QCheckBox * cb, checkBoxes)\r
+        {\r
+            cb->deleteLater();\r
+        }\r
+        generateList();\r
+    }\r
+    else\r
+    {\r
+        qDebug() << "No need to sort items to bottom";\r
+    }\r
+}\r
+\r
+/**\r
+ * Sort checked items to bottom of the list text and returns the new list text.\r
+ *\r
+ * @fn slotSortCheckedBottom\r
+ *\r
+ * @return QString - the new list text.\r
+ */\r
+QString MainWindow::slotSortCheckedBottom()\r
+{\r
+    QString result(settings->value(LIST_TEXT).toString());\r
+    if(settings->value(CHECKED_ITEMS_TO_BOTTOM).toBool())\r
+    {\r
+        QStringList list = result.split("\n");\r
+        QString listText("");\r
+        QString checkedListText("");\r
+        foreach(QString item, list)\r
+        {\r
+            if(item.length() > 0)\r
+            {\r
+                if(item.startsWith("!"))\r
+                {\r
+                    checkedListText.append(item);\r
+                    checkedListText.append("\n");\r
+                }\r
+                else\r
+                {\r
+                    listText.append(item);\r
+                    listText.append("\n");\r
+                }\r
+            }\r
+        }\r
+        listText.append(checkedListText);\r
+        qDebug() << "Sort checked items to bottom";\r
+        settings->setValue(LIST_TEXT, listText);\r
+        result = listText;\r
+    }\r
+    return result;\r
 }\r
 \r
 /**\r
@@ -209,7 +282,7 @@ void MainWindow::showEditWindow()
 {\r
     slotListWindowSaveChecked();\r
     editUi->setupUi(this);\r
-    editUi->textEdit->setText(settings->value("ListText").toString());\r
+    editUi->textEdit->setText(settings->value(LIST_TEXT).toString());\r
     connect(editUi->savePushButton, SIGNAL(clicked()), this, SLOT(slotEditWindowSave()));\r
     connect(editUi->cancelPushButton, SIGNAL(clicked()), this, SLOT(slotEditWindowCancel()));\r
 }\r
@@ -223,9 +296,12 @@ void MainWindow::showListWindow()
 {\r
     listUi->setupUi(this);\r
     listUi->listVerticalLayout->setAlignment(Qt::AlignTop);\r
+    listUi->actionChecked_Bottom->setChecked(settings->value(CHECKED_ITEMS_TO_BOTTOM).toBool());\r
+    slotSortCheckedBottom();\r
     generateList();\r
     connect(listUi->editListPushButton, SIGNAL(clicked()), this, SLOT(slotListWindowEdit()));\r
     connect(listUi->clearSelectedPushButton, SIGNAL(clicked()), this, SLOT(slotListWindowClearSelected()));\r
+    connect(listUi->menuChecked_Bottom, SIGNAL(triggered(QAction*)), this, SLOT(slotActionCheckedBottom(QAction*)));\r
     connect(listUi->menuAbout, SIGNAL(triggered(QAction*)), this, SLOT(slotActionAbout(QAction*)));\r
     connect(listUi->menuRotate, SIGNAL(triggered(QAction*)), this, SLOT(slotActionRotate(QAction*)));\r
 }\r
@@ -241,7 +317,7 @@ void MainWindow::generateList()
     qDebug() << "Generate List";\r
 \r
     checkBoxes.clear();\r
-    QString text = settings->value("ListText").toString();\r
+    QString text = settings->value(LIST_TEXT).toString();\r
     QStringList list = text.split("\n");\r
 \r
     foreach(QString item, list)\r
@@ -249,6 +325,7 @@ void MainWindow::generateList()
         if(item.length() > 0)\r
         {\r
             QCheckBox * cb = new QCheckBox(item);\r
+            connect(cb, SIGNAL(clicked(bool)), this, SLOT(slotActionCheckBox(bool)));\r
             if(item.startsWith("!"))\r
             {\r
                 QString itemName(item.right(item.length()-1));\r
@@ -285,7 +362,7 @@ void MainWindow::slotActionRotate(QAction* action)
     qDebug() << "Rotate" << action->text();\r
 \r
     landscape = !tempLandscapeMode;\r
-    settings->setValue("Landscape", landscape);\r
+    settings->setValue(LANDSCAPE, landscape);\r
     setLandscapeMode(landscape);\r
 }\r
 \r
@@ -297,14 +374,14 @@ void MainWindow::setLandscapeMode(bool landscape)
     if(landscape)\r
     {\r
         tempLandscapeMode = true;\r
-        qDebug() << "Landscape";\r
+        qDebug() << LANDSCAPE;\r
         setAttribute(Qt::WA_Maemo5LandscapeOrientation, true);\r
         setAttribute(Qt::WA_Maemo5PortraitOrientation, false);\r
     }\r
     else\r
     {\r
         tempLandscapeMode = false;\r
-        qDebug() << "Portrait";\r
+        qDebug() << PORTRAIT;\r
         setAttribute(Qt::WA_Maemo5PortraitOrientation, true);\r
         setAttribute(Qt::WA_Maemo5LandscapeOrientation, false);\r
     }\r
@@ -325,3 +402,16 @@ void MainWindow::slotActionAbout(QAction* action)
     aboutText.append("Created with QtCreator.\n");\r
     QMessageBox::about(this, "EasyList", aboutText);\r
 }\r
+\r
+/**\r
+ * Is called when the Checked Bottom menu item is triggered.\r
+ * The menu item is a checkable item. So we need to check if it's checked or not.\r
+ *\r
+ * @fn slotActionCheckedBottom\r
+ * @param QAction* action - the action.\r
+ */\r
+void MainWindow::slotActionCheckedBottom(QAction* action)\r
+{\r
+    qDebug() << "Checked Bottom" << action->text() << listUi->actionChecked_Bottom->isChecked();\r
+    settings->setValue(CHECKED_ITEMS_TO_BOTTOM, listUi->actionChecked_Bottom->isChecked());\r
+}\r
index d0a63bb..121270b 100755 (executable)
 #include <QtDBus/QDBusConnection>
 #include <QtDBus/QDBusInterface>
 
+#define WILLEM_LIU "WillemLiu"
+#define EASY_LIST "easylist"
+#define DBUS_KEYBOARD_SLIDE "/org/freedesktop/Hal/devices/platform_slide"
+#define CHECKED_ITEMS_TO_BOTTOM "CheckedItemsToBottom"
+#define LANDSCAPE "Landscape"
+#define PORTRAIT "Portrait"
+#define LIST_TEXT "ListText"
+
 namespace Ui {
     class EditWindow;
     class ListWindow;
@@ -69,10 +77,12 @@ public slots:
     void slotListWindowEdit();
     void slotListWindowClearSelected();
     void slotListWindowSaveChecked();
-
+    void slotActionCheckBox(bool checked);
+    QString slotSortCheckedBottom();
     void slotKeyboardSlide();
 
 private slots:
+    void slotActionCheckedBottom(QAction* action);
     void slotActionAbout(QAction* action);
     void slotActionRotate(QAction* action);
 };
index 6b6f419..5f7c16f 100755 (executable)
@@ -23,14 +23,11 @@ FORMS    += mainwindow.ui \
     listwindow.ui\r
 \r
 CONFIG += mobility\r
-MOBILITY = \r
 \r
 unix {\r
     #VARIABLES\r
-    isEmpty(PREFIX) {\r
-        PREFIX = /usr/local\r
-    }\r
-    BINDIR = $$PREFIX/bin\r
+    PREFIX = /usr\r
+    BINDIR = /opt/easylist/bin\r
     DATADIR = $$PREFIX/share\r
 \r
     DEFINES += DATADIR=\\\"$$DATADIR\\\" PKGDATADIR=\\\"$$PKGDATADIR\\\"\r