[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: =?utf-8?q?=5Baki=5D_aki/dialogs=3A_Add_the_ImportIdentityPage?=
From: Keith Rusler <xzekecomax () gmail ! com>
Date: 2011-05-05 18:59:09
Message-ID: 20110505185909.613A9A60A6 () git ! kde ! org
[Download RAW message or body]
Git commit 5a2111d13c6d600f6f679fb64653a926f1076098 by Keith Rusler.
Committed on 05/05/2011 at 20:58.
Pushed by karusler into branch 'master'.
Add the ImportIdentityPage
Add the ImportAkiPage ui and ImportIdentityPage ui
A +216 -0 aki/dialogs/importdialogpages/importidentitypage.cxx [License: \
GPL (v2/3)] A +66 -0 aki/dialogs/importdialogpages/importidentitypage.hpp \
[License: GPL (v2/3)] A +72 -0 aki/dialogs/ui/importakipage.ui \
[License: UNKNOWN] * A +358 -0 aki/dialogs/ui/importidentitypage.ui \
[License: UNKNOWN] *
The files marked with a * at the end have a non valid license. Please read: \
http://techbase.kde.org/Policies/Licensing_Policy and use the headers which are \
listed at that page.
http://commits.kde.org/aki/5a2111d13c6d600f6f679fb64653a926f1076098
diff --git a/aki/dialogs/importdialogpages/importidentitypage.cxx \
b/aki/dialogs/importdialogpages/importidentitypage.cxx new file mode 100644
index 0000000..5c5ebdd
--- /dev/null
+++ b/aki/dialogs/importdialogpages/importidentitypage.cxx
@@ -0,0 +1,216 @@
+/*
+ * Copyright 2009-2011 Keith Rusler <xzekecomax@gmail.com>
+ *
+ * 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) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * 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, see <http://www.gnu.org/licenses/>
+ */
+
+#include "importidentitypage.hpp"
+#include "sql/database.hpp"
+#include "sql/identity.hpp"
+#include <KMessageBox>
+using namespace Aki;
+using namespace Aki::Sql;
+
+ImportIdentityPage::ImportIdentityPage(Aki::Sql::Database* database, QWidget* \
parent) + : QWidget(parent),
+ _database(database)
+{
+ setupUi(this);
+
+ addIdentityButton->setIcon(KIcon("list-add-user"));
+ connect(addIdentityButton, SIGNAL(clicked(bool)),
+ SLOT(slotAddIdentityClicked()));
+
+ copyIdentityButton->setIcon(KIcon("list-copy"));
+ connect(copyIdentityButton, SIGNAL(clicked(bool)),
+ SLOT(slotCopyIdentityClicked()));
+
+ editIdentityButton->setIcon(KIcon("edit-rename"));
+ connect(editIdentityButton, SIGNAL(clicked(bool)),
+ SLOT(slotEditIdentityClicked()));
+
+ removeIdentityButton->setIcon(KIcon("list-remove-user"));
+ connect(removeIdentityButton, SIGNAL(clicked(bool)),
+ SLOT(slotRemoveIdentityClicked()));
+
+ connect(awayMessageLineEdit, SIGNAL(textEdited(QString)),
+ SLOT(slotAwayMessageTextEdited(QString)));
+ connect(awayMessagesGroupBox, SIGNAL(toggled(bool)),
+ SLOT(slotAwayMessagesToggled(bool)));
+ connect(kickMessageLineEdit, SIGNAL(textEdited(QString)),
+ SLOT(slotKickMessageTextEdited(QString)));
+ connect(markLastPositionCheckBox, SIGNAL(toggled(bool)),
+ SLOT(slotMarkLastPositionToggled(bool)));
+ connect(partMessageLineEdit, SIGNAL(textEdited(QString)),
+ SLOT(slotPartMessageTextEdited(QString)));
+ connect(quitMessageLineEdit, SIGNAL(textEdited(QString)),
+ SLOT(slotQuitMessageTextEdited(QString)));
+ connect(realNameLineEdit, SIGNAL(textEdited(QString)),
+ SLOT(slotRealNameTextEdited(QString)));
+ connect(returnMessageLineEdit, SIGNAL(textEdited(QString)),
+ SLOT(slotReturnMessageTextEdited(QString)));
+}
+
+ImportIdentityPage::~ImportIdentityPage()
+{
+}
+
+void
+ImportIdentityPage::loadNewIdentity()
+{
+}
+
+void
+ImportIdentityPage::setWidgetValues(Aki::Sql::Identity* identity)
+{
+ awayMessageLineEdit->setText(identity->awayMessage());
+ awayMessagesGroupBox->setChecked(identity->isMessagesEnabled());
+ kickMessageLineEdit->setText(identity->kickMessage());
+ markLastPositionCheckBox->setChecked(identity->isMarkLastPositionEnabled());
+ partMessageLineEdit->setText(identity->partMessage());
+ quitMessageLineEdit->setText(identity->quitMessage());
+ realNameLineEdit->setText(identity->realName());
+ returnMessageLineEdit->setText(identity->returnMessage());
+}
+
+void
+ImportIdentityPage::slotAddIdentityClicked()
+{
+}
+
+void
+ImportIdentityPage::slotAwayMessageTextEdited(const QString& message)
+{
+ if (!_identity) {
+ return;
+ }
+
+ _identity->setAwayMessage(message);
+}
+
+void
+ImportIdentityPage::slotAwayMessagesToggled(bool enabled)
+{
+ if (!_identity) {
+ return;
+ }
+
+ _identity->setMessagesEnabled(enabled);
+}
+
+void
+ImportIdentityPage::slotAwayNicknameTextEdited(const QString& nickname)
+{
+ if (!_identity) {
+ return;
+ }
+
+ _identity->setAwayNickname(nickname);
+}
+
+void
+ImportIdentityPage::slotCopyIdentityClicked()
+{
+}
+
+void
+ImportIdentityPage::slotEditIdentityClicked()
+{
+}
+
+void
+ImportIdentityPage::slotIdentityActivated(Aki::Sql::Identity* identity)
+{
+ if (!identity) {
+ return;
+ }
+
+ _identity = identity;
+
+ if (identity->name() == "Default Identity") {
+ addIdentityButton->setDisabled(true);
+ editIdentityButton->setDisabled(true);
+ removeIdentityButton->setDisabled(true);
+ }
+
+ setWidgetValues(identity);
+}
+
+void
+ImportIdentityPage::slotKickMessageTextEdited(const QString& message)
+{
+ if (!_identity) {
+ return;
+ }
+
+ _identity->setKickMessage(message);
+}
+
+void
+ImportIdentityPage::slotMarkLastPositionToggled(bool enabled)
+{
+ if (!_identity) {
+ return;
+ }
+
+ _identity->setMarkLastPositionEnabled(enabled);
+}
+
+void
+ImportIdentityPage::slotPartMessageTextEdited(const QString& message)
+{
+ if (!_identity) {
+ return;
+ }
+
+ _identity->setPartMessage(message);
+}
+
+void
+ImportIdentityPage::slotQuitMessageTextEdited(const QString& message)
+{
+ if (!_identity) {
+ return;
+ }
+
+ _identity->setQuitMessage(message);
+}
+
+void
+ImportIdentityPage::slotRealNameTextEdited(const QString& name)
+{
+ if (!_identity) {
+ return;
+ }
+
+ _identity->setRealName(name);
+}
+
+void
+ImportIdentityPage::slotRemoveIdentityClicked()
+{
+}
+
+void
+ImportIdentityPage::slotReturnMessageTextEdited(const QString& message)
+{
+ if (!_identity) {
+ return;
+ }
+
+ _identity->setReturnMessage(message);
+}
diff --git a/aki/dialogs/importdialogpages/importidentitypage.hpp \
b/aki/dialogs/importdialogpages/importidentitypage.hpp new file mode 100644
index 0000000..68db2e2
--- /dev/null
+++ b/aki/dialogs/importdialogpages/importidentitypage.hpp
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2009-2011 Keith Rusler <xzekecomax@gmail.com>
+ *
+ * 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) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * 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, see <http://www.gnu.org/licenses/>
+ */
+
+#ifndef AKI_IMPORTIDENTITYPAGE_HPP
+#define AKI_IMPORTIDENTITYPAGE_HPP
+
+#include "ui_importidentitypage.h"
+#include <QtGui/QWidget>
+
+namespace Aki
+{
+namespace Sql
+{
+class Database;
+class Identity;
+} // End of namespace Sql.
+class ImportIdentityPage
+ : public QWidget,
+ private Ui::ImportIdentityPage
+{
+ Q_OBJECT
+public:
+ explicit ImportIdentityPage(Aki::Sql::Database* database, QWidget* parent = 0);
+ ~ImportIdentityPage();
+private Q_SLOTS:
+ void slotAddIdentityClicked();
+ void slotAwayMessageTextEdited(const QString& message);
+ void slotAwayMessagesToggled(bool enabled);
+ void slotAwayNicknameTextEdited(const QString& nickname);
+ void slotCopyIdentityClicked();
+ void slotEditIdentityClicked();
+ void slotIdentityActivated(Aki::Sql::Identity* identity);
+ void slotKickMessageTextEdited(const QString& message);
+ void slotMarkLastPositionToggled(bool enabled);
+ void slotPartMessageTextEdited(const QString& message);
+ void slotQuitMessageTextEdited(const QString& message);
+ void slotRealNameTextEdited(const QString& name);
+ void slotRemoveIdentityClicked();
+ void slotReturnMessageTextEdited(const QString& message);
+private:
+ void loadNewIdentity();
+ void setWidgetValues(Aki::Sql::Identity* identity);
+private:
+ Aki::Sql::Identity* _identity;
+ Aki::Sql::Database* _database;
+}; // End of class ImportIdentityPage.
+} // End of class QWidget.
+
+#endif // AKI_IMPORTIDENTITYPAGE_HPP
diff --git a/aki/dialogs/ui/importakipage.ui b/aki/dialogs/ui/importakipage.ui
new file mode 100644
index 0000000..7d71d53
--- /dev/null
+++ b/aki/dialogs/ui/importakipage.ui
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ImportAkiPage</class>
+ <widget class="QWidget" name="ImportAkiPage">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string/>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0" colspan="2">
+ <widget class="QLabel" name="mainHeader">
+ <property name="text">
+ <string>Please select the Server List you wish to use:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QRadioButton" name="customRadio">
+ <property name="whatsThis">
+ <string>Uses a custom Aki Server List file</string>
+ </property>
+ <property name="text">
+ <string>Custom</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="KUrlRequester" name="customUrl">
+ <property name="whatsThis">
+ <string>Select the location of where the Aki Server List file is \
located</string> + </property>
+ </widget>
+ </item>
+ <item row="2" column="0" colspan="2">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <customwidgets>
+ <customwidget>
+ <class>KUrlRequester</class>
+ <extends>QFrame</extends>
+ <header>kurlrequester.h</header>
+ </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/aki/dialogs/ui/importidentitypage.ui \
b/aki/dialogs/ui/importidentitypage.ui new file mode 100644
index 0000000..a0a8b49
--- /dev/null
+++ b/aki/dialogs/ui/importidentitypage.ui
@@ -0,0 +1,358 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ImportIdentityPage</class>
+ <widget class="QWidget" name="ImportIdentityPage">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>225</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string/>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="1">
+ <layout class="QFormLayout" name="formLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="identityLabel">
+ <property name="text">
+ <string>Identity:</string>
+ </property>
+ <property name="buddy">
+ <cstring>identityComboBox</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="Aki::IdentityComboBox" name="identityComboBox">
+ <property name="whatsThis">
+ <string>Select an identity to modify.</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="addIdentityButton">
+ <property name="whatsThis">
+ <string>Adds a new identity.</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="copyIdentityButton">
+ <property name="whatsThis">
+ <string>Copies the current identity and creates a new identity with the \
same information.</string> + </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="editIdentityButton">
+ <property name="whatsThis">
+ <string>Edits the current identity's name.</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="removeIdentityButton">
+ <property name="whatsThis">
+ <string>Removes the current identity and deletes it.</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="1" column="0" colspan="2">
+ <widget class="KTabWidget" name="ktabwidget">
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="generalPage">
+ <attribute name="title">
+ <string>General</string>
+ </attribute>
+ <attribute name="whatsThis">
+ <string extracomment="General information">General information of the \
identity.</string> + </attribute>
+ <layout class="QGridLayout" name="gridLayout_4">
+ <item row="0" column="0">
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="0" column="0">
+ <widget class="QLabel" name="realNameLabel">
+ <property name="text">
+ <string>Real name:</string>
+ </property>
+ <property name="buddy">
+ <cstring>realNameLineEdit</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="KLineEdit" name="realNameLineEdit">
+ <property name="whatsThis">
+ <string>Your real name. This will be available to everyone.</string>
+ </property>
+ <property name="urlDropsEnabled">
+ <bool>false</bool>
+ </property>
+ <property name="showClearButton" stdset="0">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" colspan="2">
+ <widget class="Aki::NicknameWidget" name="widget" native="true"/>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="awayPage">
+ <attribute name="title">
+ <string>Away</string>
+ </attribute>
+ <attribute name="whatsThis">
+ <string>Away information of the identity.</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout_5">
+ <item row="0" column="0">
+ <layout class="QFormLayout" name="formLayout_2">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::ExpandingFieldsGrow</enum>
+ </property>
+ <item row="0" column="0" colspan="2">
+ <widget class="QCheckBox" name="markLastPositionCheckBox">
+ <property name="whatsThis">
+ <string>When either the application or the channel is not active, it \
will display a line from where you left off.</string> + </property>
+ <property name="text">
+ <string>Mark last position when away</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="awayNicknameLabel">
+ <property name="text">
+ <string>Away nickname:</string>
+ </property>
+ <property name="buddy">
+ <cstring>awayNicknameLineEdit</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="KLineEdit" name="awayNicknameLineEdit">
+ <property name="whatsThis">
+ <string>If enabled, your nickname will change to this when you are \
marked away.</string> + </property>
+ <property name="urlDropsEnabled">
+ <bool>false</bool>
+ </property>
+ <property name="showClearButton" stdset="0">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0" colspan="2">
+ <widget class="QGroupBox" name="awayMessagesGroupBox">
+ <property name="whatsThis">
+ <string>If enabled, this will display the away message and the return \
message. Use this with precaution, because it could make people angry at \
you.</string> + </property>
+ <property name="title">
+ <string>Away Messages</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_6">
+ <item row="0" column="0">
+ <layout class="QFormLayout" name="formLayout_3">
+ <item row="0" column="0">
+ <widget class="QLabel" name="awayMessageLabel">
+ <property name="text">
+ <string>Away message:</string>
+ </property>
+ <property name="buddy">
+ <cstring>awayMessageLineEdit</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="returnMessageLabel">
+ <property name="text">
+ <string>Return message:</string>
+ </property>
+ <property name="buddy">
+ <cstring>returnMessageLineEdit</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="KLineEdit" name="awayMessageLineEdit">
+ <property name="whatsThis">
+ <string>If enabled, this will be displayed when you go to the \
away state.</string> + </property>
+ <property name="urlDropsEnabled">
+ <bool>false</bool>
+ </property>
+ <property name="showClearButton" stdset="0">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="KLineEdit" name="returnMessageLineEdit">
+ <property name="whatsThis">
+ <string>If enabled, this will be displayed when you have returned \
from the away state.</string> + </property>
+ <property name="urlDropsEnabled">
+ <bool>false</bool>
+ </property>
+ <property name="showClearButton" stdset="0">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="miscPage">
+ <attribute name="title">
+ <string>Misc.</string>
+ </attribute>
+ <attribute name="whatsThis">
+ <string>Miscellaneous information of the identity.</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout_7">
+ <item row="0" column="0">
+ <layout class="QFormLayout" name="formLayout_4">
+ <item row="0" column="0">
+ <widget class="QLabel" name="kickMessageLabel">
+ <property name="text">
+ <string>Kick message:</string>
+ </property>
+ <property name="buddy">
+ <cstring>kickMessageLineEdit</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="partMessageLabel">
+ <property name="text">
+ <string>Part message:</string>
+ </property>
+ <property name="buddy">
+ <cstring>partMessageLineEdit</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="quitMessageLabel">
+ <property name="text">
+ <string>Quit message:</string>
+ </property>
+ <property name="buddy">
+ <cstring>quitMessageLineEdit</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="KLineEdit" name="kickMessageLineEdit">
+ <property name="whatsThis">
+ <string>Display this message when you kick someone without a custom \
message. If this field is empty it will not display a message.</string> + \
</property> + <property name="urlDropsEnabled">
+ <bool>false</bool>
+ </property>
+ <property name="showClearButton" stdset="0">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="KLineEdit" name="partMessageLineEdit">
+ <property name="whatsThis">
+ <string>Display this message when you part a channel without a custom \
message or quit a channel. If this field is empty it will not display a \
message.</string> + </property>
+ <property name="urlDropsEnabled">
+ <bool>false</bool>
+ </property>
+ <property name="showClearButton" stdset="0">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="KLineEdit" name="quitMessageLineEdit">
+ <property name="whatsThis">
+ <string>Display this message when you quit without a custom message or \
quit the application. If this field is empty it will not display a message.</string> \
+ </property> + <property name="urlDropsEnabled">
+ <bool>false</bool>
+ </property>
+ <property name="showClearButton" stdset="0">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <customwidgets>
+ <customwidget>
+ <class>KLineEdit</class>
+ <extends>QLineEdit</extends>
+ <header>klineedit.h</header>
+ </customwidget>
+ <customwidget>
+ <class>KTabWidget</class>
+ <extends>QTabWidget</extends>
+ <header>ktabwidget.h</header>
+ <container>1</container>
+ </customwidget>
+ <customwidget>
+ <class>Aki::NicknameWidget</class>
+ <extends>QWidget</extends>
+ <header>ui/nicknamewidget.hpp</header>
+ <container>1</container>
+ </customwidget>
+ <customwidget>
+ <class>Aki::IdentityComboBox</class>
+ <extends>QComboBox</extends>
+ <header>ui/identitycombobox.hpp</header>
+ </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic