diff --git a/retroshare-gui/src/RetroShare.pro b/retroshare-gui/src/RetroShare.pro index 24cb27be8..9f4b47cdc 100644 --- a/retroshare-gui/src/RetroShare.pro +++ b/retroshare-gui/src/RetroShare.pro @@ -290,6 +290,7 @@ HEADERS += rshare.h \ gui/common/RSTabWidget.h \ gui/common/RSItemDelegate.h \ gui/common/PeerDefs.h \ + gui/common/PopularityDefs.h \ gui/MessagesDialog.h \ gui/help/browser/helpbrowser.h \ gui/help/browser/helptextbrowser.h \ @@ -489,6 +490,7 @@ SOURCES += main.cpp \ gui/common/RSTabWidget.cpp \ gui/common/RSItemDelegate.cpp \ gui/common/PeerDefs.cpp \ + gui/common/PopularityDefs.cpp \ gui/settings/rsharesettings.cpp \ gui/settings/RsharePeerSettings.cpp \ gui/settings/rsettings.cpp \ diff --git a/retroshare-gui/src/gui/ChannelFeed.cpp b/retroshare-gui/src/gui/ChannelFeed.cpp index d9311ad27..60dab6f22 100644 --- a/retroshare-gui/src/gui/ChannelFeed.cpp +++ b/retroshare-gui/src/gui/ChannelFeed.cpp @@ -32,6 +32,7 @@ #include "ChannelFeed.h" #include "feeds/ChanMsgItem.h" +#include "common/PopularityDefs.h" #include "channels/CreateChannel.h" #include "channels/ChannelDetails.h" @@ -530,7 +531,8 @@ void ChannelFeed::fillChannelList(int channelItem, std::list &chann groupItem->child(chNameItem->index().row(), COLUMN_DATA)->setData(QDateTime::fromTime_t(ci.lastPost), ROLE_CHANNEL_TS); - chNameItem->setToolTip(tr("Popularity: %1").arg(QString::number(ci.pop))); + chNameItem->setToolTip(PopularityDefs::tooltip(ci.pop)); + chPopItem->setToolTip(PopularityDefs::tooltip(ci.pop)); QPixmap chanImage; if (ci.pngImageLen != 0) { @@ -541,20 +543,7 @@ void ChannelFeed::fillChannelList(int channelItem, std::list &chann chNameItem->setIcon(QIcon(chanImage)); /* set Popularity icon */ - int popcount = ci.pop; - if (popcount == 0) { - chPopItem->setIcon(QIcon(":/images/hot_0.png")); - } else if (popcount < 2) { - chPopItem->setIcon(QIcon(":/images/hot_1.png")); - } else if (popcount < 4) { - chPopItem->setIcon(QIcon(":/images/hot_2.png")); - } else if (popcount < 8) { - chPopItem->setIcon(QIcon(":/images/hot_3.png")); - } else if (popcount < 16) { - chPopItem->setIcon(QIcon(":/images/hot_4.png")); - } else { - chPopItem->setIcon(QIcon(":/images/hot_5.png")); - } + chPopItem->setIcon(PopularityDefs::icon(ci.pop)); } /* remove all items not in list */ diff --git a/retroshare-gui/src/gui/ForumsDialog.cpp b/retroshare-gui/src/gui/ForumsDialog.cpp index ff1847e68..4d652171e 100644 --- a/retroshare-gui/src/gui/ForumsDialog.cpp +++ b/retroshare-gui/src/gui/ForumsDialog.cpp @@ -34,11 +34,11 @@ #include "settings/rsharesettings.h" #include "common/Emoticons.h" #include "common/RSItemDelegate.h" +#include "common/PopularityDefs.h" #include #include -#include #include @@ -66,9 +66,9 @@ #define VIEW_FLAT 2 /* Forum constants */ -#define COLUMN_FORUM_COUNT 2 -#define COLUMN_FORUM_TITLE 0 -#define COLUMN_FORUM_DATE 1 +#define COLUMN_FORUM_COUNT 2 +#define COLUMN_FORUM_TITLE 0 +#define COLUMN_FORUM_POPULARITY 1 #define COLUMN_FORUM_DATA 0 @@ -169,13 +169,17 @@ ForumsDialog::ForumsDialog(QWidget *parent) ui.threadTreeWidget->setItemDelegate(itemDelegate); itemDelegate = new RSItemDelegate(this); + itemDelegate->removeFocusRect(COLUMN_FORUM_POPULARITY); itemDelegate->setSpacing(QSize(0, 2)); ui.forumTreeWidget->setItemDelegate(itemDelegate); /* Set header resize modes and initial section sizes */ - QHeaderView * ftheader = ui.forumTreeWidget->header () ; - ftheader->setResizeMode (COLUMN_FORUM_TITLE, QHeaderView::Interactive); + ui.forumTreeWidget->setColumnCount(COLUMN_FORUM_COUNT); + QHeaderView * ftheader = ui.forumTreeWidget->header (); + ftheader->setResizeMode (COLUMN_FORUM_TITLE, QHeaderView::Stretch); ftheader->resizeSection (COLUMN_FORUM_TITLE, 170); + ftheader->setResizeMode (COLUMN_FORUM_POPULARITY, QHeaderView::Fixed); + ftheader->resizeSection (COLUMN_FORUM_POPULARITY, 25); /* Set header resize modes and initial section sizes */ QHeaderView * ttheader = ui.threadTreeWidget->header () ; @@ -496,10 +500,10 @@ void ForumsDialog::insertForums() rsForums->getForumList(forumList); - QList AdminList; - QList SubList; - QList PopList; - QList OtherList; + QList AdminList; + QList SubList; + QList PopList; + QList OtherList; std::multimap popMap; for(it = forumList.begin(); it != forumList.end(); it++) @@ -518,38 +522,29 @@ void ForumsDialog::insertForums() * ForumId, */ - QTreeWidgetItem *item = new QTreeWidgetItem((QTreeWidget*)0); + QTreeWidgetItem *item = new QTreeWidgetItem((QTreeWidget*)0); QString name = QString::fromStdWString(it->forumName); if (it->forumFlags & RS_DISTRIB_AUTHEN_REQ) { name += " (AUTHD)"; - item -> setIcon(COLUMN_FORUM_TITLE,(QIcon(IMAGE_FORUMAUTHD))); + item -> setIcon(COLUMN_FORUM_TITLE,(QIcon(IMAGE_FORUMAUTHD))); } else { - item -> setIcon(COLUMN_FORUM_TITLE,(QIcon(IMAGE_FORUM))); + item -> setIcon(COLUMN_FORUM_TITLE,(QIcon(IMAGE_FORUM))); } - item -> setText(COLUMN_FORUM_TITLE, name); - item -> setData(COLUMN_FORUM_DATA, ROLE_FORUM_TITLE, name); + item -> setText(COLUMN_FORUM_TITLE, name); + item -> setData(COLUMN_FORUM_DATA, ROLE_FORUM_TITLE, name); /* (1) Popularity */ - { - std::ostringstream out; - out << it->pop; - item -> setToolTip(COLUMN_FORUM_TITLE, tr("Popularity:") + " " + QString::fromStdString(out.str())); - } + item -> setIcon(COLUMN_FORUM_POPULARITY, PopularityDefs::icon(it->pop)); + item -> setToolTip(COLUMN_FORUM_TITLE, PopularityDefs::tooltip(it->pop)); + item -> setToolTip(COLUMN_FORUM_POPULARITY, PopularityDefs::tooltip(it->pop)); - // Date - { - QDateTime qtime; - qtime.setTime_t(it->lastPost); - QString timestamp = qtime.toString("yyyy-MM-dd hh:mm:ss"); - item -> setText(COLUMN_FORUM_DATE, timestamp); - } // Id. - item -> setData(COLUMN_FORUM_DATA, ROLE_FORUM_ID, QString::fromStdString(it->forumId)); + item -> setData(COLUMN_FORUM_DATA, ROLE_FORUM_ID, QString::fromStdString(it->forumId)); AdminList.append(item); } else if (flags & RS_DISTRIB_SUBSCRIBED) @@ -563,38 +558,29 @@ void ForumsDialog::insertForums() * ForumId, */ - QTreeWidgetItem *item = new QTreeWidgetItem((QTreeWidget*)0); + QTreeWidgetItem *item = new QTreeWidgetItem((QTreeWidget*)0); QString name = QString::fromStdWString(it->forumName); if (it->forumFlags & RS_DISTRIB_AUTHEN_REQ) { name += " (AUTHD)"; - item -> setIcon(COLUMN_FORUM_TITLE,(QIcon(IMAGE_FORUMAUTHD))); + item -> setIcon(COLUMN_FORUM_TITLE,(QIcon(IMAGE_FORUMAUTHD))); } else { - item -> setIcon(COLUMN_FORUM_TITLE,(QIcon(IMAGE_FORUM))); + item -> setIcon(COLUMN_FORUM_TITLE,(QIcon(IMAGE_FORUM))); } - item -> setText(COLUMN_FORUM_TITLE, name); - item -> setData(COLUMN_FORUM_DATA, ROLE_FORUM_TITLE, name); + item -> setText(COLUMN_FORUM_TITLE, name); + item -> setData(COLUMN_FORUM_DATA, ROLE_FORUM_TITLE, name); /* (1) Popularity */ - { - std::ostringstream out; - out << it->pop; - item -> setToolTip(COLUMN_FORUM_TITLE, tr("Popularity:") + " " + QString::fromStdString(out.str())); - } + item -> setIcon(COLUMN_FORUM_POPULARITY, PopularityDefs::icon(it->pop)); + item -> setToolTip(COLUMN_FORUM_TITLE, PopularityDefs::tooltip(it->pop)); + item -> setToolTip(COLUMN_FORUM_POPULARITY, PopularityDefs::tooltip(it->pop)); - // Date - { - QDateTime qtime; - qtime.setTime_t(it->lastPost); - QString timestamp = qtime.toString("yyyy-MM-dd hh:mm:ss"); - item -> setText(COLUMN_FORUM_DATE, timestamp); - } // Id. - item -> setData(COLUMN_FORUM_DATA, ROLE_FORUM_ID, QString::fromStdString(it->forumId)); + item -> setData(COLUMN_FORUM_DATA, ROLE_FORUM_ID, QString::fromStdString(it->forumId)); SubList.append(item); } else @@ -635,7 +621,7 @@ void ForumsDialog::insertForums() } else { - /* popular forum */ + /* popular forum */ /* Name, * Type, @@ -644,39 +630,30 @@ void ForumsDialog::insertForums() * ForumId, */ - QTreeWidgetItem *item = new QTreeWidgetItem((QTreeWidget*)0); + QTreeWidgetItem *item = new QTreeWidgetItem((QTreeWidget*)0); QString name = QString::fromStdWString(it->forumName); if (it->forumFlags & RS_DISTRIB_AUTHEN_REQ) { name += " (AUTHD)"; - item -> setIcon(COLUMN_FORUM_TITLE,(QIcon(IMAGE_FORUMAUTHD))); + item -> setIcon(COLUMN_FORUM_TITLE,(QIcon(IMAGE_FORUMAUTHD))); } else { - item -> setIcon(COLUMN_FORUM_TITLE,(QIcon(IMAGE_FORUM))); + item -> setIcon(COLUMN_FORUM_TITLE,(QIcon(IMAGE_FORUM))); } - item -> setText(COLUMN_FORUM_TITLE, name); - item -> setData(COLUMN_FORUM_DATA, ROLE_FORUM_TITLE, name); + item -> setText(COLUMN_FORUM_TITLE, name); + item -> setData(COLUMN_FORUM_DATA, ROLE_FORUM_TITLE, name); /* (1) Popularity */ - { - std::ostringstream out; - out << it->pop; - item -> setToolTip(COLUMN_FORUM_TITLE, tr("Popularity:") + " " + QString::fromStdString(out.str())); - } + item -> setIcon(COLUMN_FORUM_POPULARITY, PopularityDefs::icon(it->pop)); + item -> setToolTip(COLUMN_FORUM_TITLE, PopularityDefs::tooltip(it->pop)); + item -> setToolTip(COLUMN_FORUM_POPULARITY, PopularityDefs::tooltip(it->pop)); - // Date - { - QDateTime qtime; - qtime.setTime_t(it->lastPost); - QString timestamp = qtime.toString("yyyy-MM-dd hh:mm:ss"); - item -> setText(COLUMN_FORUM_DATE, timestamp); - } // Id. - item -> setData(COLUMN_FORUM_DATA, ROLE_FORUM_ID, QString::fromStdString(it->forumId)); + item -> setData(COLUMN_FORUM_DATA, ROLE_FORUM_ID, QString::fromStdString(it->forumId)); if (it->pop < popLimit) { @@ -690,18 +667,18 @@ void ForumsDialog::insertForums() } /* now we can add them in as a tree! */ - FillForums (YourForums, AdminList); - FillForums (SubscribedForums, SubList); - FillForums (PopularForums, PopList); - FillForums (OtherForums, OtherList); + FillForums (YourForums, AdminList); + FillForums (SubscribedForums, SubList); + FillForums (PopularForums, PopList); + FillForums (OtherForums, OtherList); - // cleanup - CleanupItems (AdminList); - CleanupItems (SubList); - CleanupItems (PopList); - CleanupItems (OtherList); + // cleanup + CleanupItems (AdminList); + CleanupItems (SubList); + CleanupItems (PopList); + CleanupItems (OtherList); - updateMessageSummaryList(""); + updateMessageSummaryList(""); } void ForumsDialog::FillForums(QTreeWidgetItem *Forum, QList &ChildList) diff --git a/retroshare-gui/src/gui/ForumsDialog.ui b/retroshare-gui/src/gui/ForumsDialog.ui index cf3ba1d14..6b1b823ef 100644 --- a/retroshare-gui/src/gui/ForumsDialog.ui +++ b/retroshare-gui/src/gui/ForumsDialog.ui @@ -745,9 +745,21 @@ p, li { white-space: pre-wrap; } Qt::CustomContextMenu - - true + + QAbstractItemView::NoEditTriggers + + false + + + false + + + false + + + false + RetroShare Forums diff --git a/retroshare-gui/src/gui/common/PopularityDefs.cpp b/retroshare-gui/src/gui/common/PopularityDefs.cpp new file mode 100644 index 000000000..56805c76f --- /dev/null +++ b/retroshare-gui/src/gui/common/PopularityDefs.cpp @@ -0,0 +1,51 @@ +/**************************************************************** + * This file is distributed under the following license: + * + * Copyright (c) 2010, RetroShare Team + * + * 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 + +#include "PopularityDefs.h" + +QIcon PopularityDefs::icon(int popularity) +{ + if (popularity == 0) { + return QIcon(":/images/hot_0.png"); + } else if (popularity <= 7) { + /* 1-7 */ + return QIcon(":/images/hot_1.png"); + } else if (popularity <= 15) { + /* 8-15 */ + return QIcon(":/images/hot_2.png"); + } else if (popularity <= 24) { + /* 16-24 */ + return QIcon(":/images/hot_3.png"); + } else if (popularity <= 34) { + /* 25-34 */ + return QIcon(":/images/hot_4.png"); + } + + /* >34 */ + return QIcon(":/images/hot_5.png"); +} + +QString PopularityDefs::tooltip(int popularity) +{ + return QString("%1: %2").arg(qApp->translate("PopularityDefs", "Popularity")).arg(popularity); +} diff --git a/retroshare-gui/src/gui/common/PopularityDefs.h b/retroshare-gui/src/gui/common/PopularityDefs.h new file mode 100644 index 000000000..5d989786d --- /dev/null +++ b/retroshare-gui/src/gui/common/PopularityDefs.h @@ -0,0 +1,36 @@ +/**************************************************************** + * This file is distributed under the following license: + * + * Copyright (c) 2010, RetroShare Team + * + * 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 _POPULARITYDEFS_H +#define _POPULARITYDEFS_H + +#include + +class PopularityDefs +{ +public: + static QIcon icon(int popularity); + static QString tooltip(int popularity); +}; + +#endif + diff --git a/retroshare-gui/src/lang/retroshare_de.qm b/retroshare-gui/src/lang/retroshare_de.qm index 4e25cada4..d6e14f845 100644 Binary files a/retroshare-gui/src/lang/retroshare_de.qm and b/retroshare-gui/src/lang/retroshare_de.qm differ diff --git a/retroshare-gui/src/lang/retroshare_de.ts b/retroshare-gui/src/lang/retroshare_de.ts index 6eb1b1eca..aa305cc47 100644 --- a/retroshare-gui/src/lang/retroshare_de.ts +++ b/retroshare-gui/src/lang/retroshare_de.ts @@ -1073,7 +1073,7 @@ p, li { white-space: pre-wrap; } Kanal abbestellen - + Name Name @@ -1103,13 +1103,12 @@ p, li { white-space: pre-wrap; } Andere Kanäle - Popularity: %1 - Beliebtheit: %1 + Beliebtheit: %1 - + Post to Channel Kanalbeitrag erstellen @@ -1134,17 +1133,16 @@ p, li { white-space: pre-wrap; } Verteile Kanal - + No Channel Selected Keinen Kanal gewählt - Restore Publish Rights for Channel - Stelle Veröffentlichungsrechte für Kanal wieder her + Stelle Veröffentlichungsrechte für Kanal wieder her - + Edit Channel Details Kanal-Details bearbeiten @@ -1558,7 +1556,7 @@ p, li { white-space: pre-wrap; } Übernehmen und Schliessen - + RetroShare @@ -3558,7 +3556,7 @@ p, li { white-space: pre-wrap; } ForumsDialog - + Subscribe to Forum Forum abonnieren @@ -3623,14 +3621,11 @@ p, li { white-space: pre-wrap; } Erweitern - - - Popularity: - Beliebtheit: + Beliebtheit: - + Anonymous Anonym @@ -3664,7 +3659,7 @@ p, li { white-space: pre-wrap; } Du kannst einem anonymen Autor nicht antworten - + Your Forums Deine Foren @@ -3702,17 +3697,17 @@ p, li { white-space: pre-wrap; } Hinzufügen - + RetroShare Forums RetroShare Foren - + Start new Thread for Selected Forum Starte ein neues Thema im ausgewählten Forum - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -3725,7 +3720,7 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Forum:</p></body></html> - + Last Post Letzter Beitrag @@ -3741,24 +3736,24 @@ p, li { white-space: pre-wrap; } - + Date Datum - - + + Title Titel - - + + Author Autor - + Signed Unterzeichnet @@ -3776,7 +3771,7 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">Thema:</span></p></body></html> - + Previous Thread Vorheriger Beitrag @@ -3807,7 +3802,7 @@ p, li { white-space: pre-wrap; } - + Start New Thread Erstelle neues Thema @@ -3835,7 +3830,7 @@ p, li { white-space: pre-wrap; } Inhalt - + Mark as read Als gelesen markieren @@ -5438,7 +5433,7 @@ Bitte gib etwas Speicher frei und drücke OK. MessageComposer - + Compose Verfassen @@ -5665,7 +5660,7 @@ Bitte gib etwas Speicher frei und drücke OK. Blockquote hinzufügen - + &Left &Links @@ -5686,12 +5681,12 @@ Bitte gib etwas Speicher frei und drücke OK. - + Save Message Nachricht speichern - + Message has not been Sent. Do you want to save message to draft box? Nachricht wurde noch nicht gesendet. @@ -5704,7 +5699,7 @@ Möchtest Du die Nachricht in den Entwürfen speichern? RetroShare Link einfügen - + Re: Re: @@ -5909,17 +5904,17 @@ Willst Du die Nachricht speichern ? Datei nicht gefunden oder Dateiname nicht akzeptiert. - + Friend Recommendation(s) Freundempfehlung(en) - + No Title Kein Titel - + I recommend a good friend of me, you can trust him too when you trust me. <br> Copy friend link and paste to Friends list Ich empfehle Dir einen guten Freund von mir. Du kannst ihm vertrauen, wenn Du mir vertraust. <br> Kopiere den Link und füge ihn in der Freundesliste ein @@ -6011,7 +6006,7 @@ Willst Du die Nachricht speichern ? MessagesDialog - + New Message Neue Nachricht @@ -6034,7 +6029,7 @@ Willst Du die Nachricht speichern ? - + From Von @@ -6207,7 +6202,7 @@ p, li { white-space: pre-wrap; } - + Subject Betreff @@ -6272,7 +6267,7 @@ p, li { white-space: pre-wrap; } Empfohlene Dateien einblenden - + Save as... Speichern unter... @@ -6282,7 +6277,7 @@ p, li { white-space: pre-wrap; } HTML-Dateien (*.htm *.html);;Alle Dateien (*) - + Reply to All Allen antworten @@ -6321,7 +6316,7 @@ p, li { white-space: pre-wrap; } - + Trash @@ -6338,7 +6333,7 @@ p, li { white-space: pre-wrap; } Ordner - + Remove All Tags Alle Schlagwörter entfernen @@ -6368,7 +6363,7 @@ p, li { white-space: pre-wrap; } Papierkorb leeren - + Drafts @@ -6380,12 +6375,12 @@ p, li { white-space: pre-wrap; } An - + Edit... Editieren... - + @@ -7141,7 +7136,7 @@ p, li { white-space: pre-wrap; } NotifyQt - + GPG key passphrase GPG Schlüssel Passwort @@ -7353,7 +7348,7 @@ p, li { white-space: pre-wrap; } Chat - + Save Certificate Zertifikat speichern @@ -7368,7 +7363,7 @@ p, li { white-space: pre-wrap; } Status - + Connect To Friend Verbinde zum Freund @@ -7468,7 +7463,7 @@ p, li { white-space: pre-wrap; } Aus allen Gruppen entfernen - + Available Verfügbar @@ -7626,7 +7621,7 @@ p, li { white-space: pre-wrap; } - + Add Friend Freund hinzufügen @@ -7681,12 +7676,12 @@ p, li { white-space: pre-wrap; } - + RetroShare - + Message Group Gruppe anschreiben @@ -7701,7 +7696,7 @@ p, li { white-space: pre-wrap; } Gruppe entfernen - + Do you want to remove this Friend? Willst du diesen Freund entfernen? @@ -7739,12 +7734,12 @@ p, li { white-space: pre-wrap; } Status Spalte ausblenden - + Friends Storm Aktivitäten - + is typing... tippt... @@ -7764,7 +7759,7 @@ p, li { white-space: pre-wrap; } Freunde - + Paste Friend Link RetroShare Link einfügen @@ -8064,6 +8059,14 @@ p, li { white-space: pre-wrap; } + + PopularityDefs + + + Popularity + Beliebtheit + + PopupChatDialog @@ -8776,12 +8779,19 @@ p, li { white-space: pre-wrap; } Die Datei wurde zur Downloadliste hinzugefügt. - + + File Request canceled Dateianforderung abgebrochen + The following has not been added to your download list, because you already have it: + + + + + The file has not been added to your download list, because you already have it. Die Datei wurde nicht zur Downloadliste hinzugefügt, da Du sie schon hast.