From 0fbde70e32b7f8627b046986bfe46d66f350c035 Mon Sep 17 00:00:00 2001 From: thunder2 Date: Sat, 9 Apr 2011 22:52:52 +0000 Subject: [PATCH] New dialog for defining own colors for the private chat window. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4150 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- retroshare-gui/src/RetroShare.pro | 7 +- .../src/gui/chat/PopupChatDialog.cpp | 58 +- retroshare-gui/src/gui/chat/PopupChatDialog.h | 7 +- .../src/gui/chat/PopupChatDialog.ui | 1522 +++++++++-------- .../src/gui/chat/PopupChatWindow.cpp | 57 +- retroshare-gui/src/gui/chat/PopupChatWindow.h | 4 + .../src/gui/chat/PopupChatWindow.ui | 49 +- .../src/gui/settings/RsharePeerSettings.cpp | 39 + .../src/gui/settings/RsharePeerSettings.h | 5 + retroshare-gui/src/gui/style/RSStyle.cpp | 114 ++ retroshare-gui/src/gui/style/RSStyle.h | 58 + retroshare-gui/src/gui/style/StyleDialog.cpp | 161 ++ retroshare-gui/src/gui/style/StyleDialog.h | 63 + retroshare-gui/src/gui/style/StyleDialog.ui | 273 +++ retroshare-gui/src/lang/retroshare_de.qm | Bin 322852 -> 325648 bytes retroshare-gui/src/lang/retroshare_de.ts | 474 +++-- 16 files changed, 1957 insertions(+), 934 deletions(-) create mode 100644 retroshare-gui/src/gui/style/RSStyle.cpp create mode 100644 retroshare-gui/src/gui/style/RSStyle.h create mode 100644 retroshare-gui/src/gui/style/StyleDialog.cpp create mode 100644 retroshare-gui/src/gui/style/StyleDialog.h create mode 100644 retroshare-gui/src/gui/style/StyleDialog.ui diff --git a/retroshare-gui/src/RetroShare.pro b/retroshare-gui/src/RetroShare.pro index 2c6c097a2..1f47e1316 100644 --- a/retroshare-gui/src/RetroShare.pro +++ b/retroshare-gui/src/RetroShare.pro @@ -305,6 +305,8 @@ HEADERS += rshare.h \ gui/common/PeerDefs.h \ gui/common/PopularityDefs.h \ gui/common/GroupTreeWidget.h \ + gui/style/RSStyle.h \ + gui/style/StyleDialog.h \ gui/MessagesDialog.h \ gui/help/browser/helpbrowser.h \ gui/help/browser/helptextbrowser.h \ @@ -411,7 +413,8 @@ FORMS += gui/StartDialog.ui \ gui/feeds/AttachFileItem.ui \ gui/im_history/ImHistoryBrowser.ui \ gui/groups/CreateGroup.ui \ - gui/common/GroupTreeWidget.ui + gui/common/GroupTreeWidget.ui \ + gui/style/StyleDialog.ui SOURCES += main.cpp \ rshare.cpp \ @@ -507,6 +510,8 @@ SOURCES += main.cpp \ gui/common/PeerDefs.cpp \ gui/common/PopularityDefs.cpp \ gui/common/GroupTreeWidget.cpp \ + gui/style/RSStyle.cpp \ + gui/style/StyleDialog.cpp \ gui/settings/rsharesettings.cpp \ gui/settings/RsharePeerSettings.cpp \ gui/settings/rsettings.cpp \ diff --git a/retroshare-gui/src/gui/chat/PopupChatDialog.cpp b/retroshare-gui/src/gui/chat/PopupChatDialog.cpp index b8aa7cfd7..1b2755fdf 100644 --- a/retroshare-gui/src/gui/chat/PopupChatDialog.cpp +++ b/retroshare-gui/src/gui/chat/PopupChatDialog.cpp @@ -104,7 +104,7 @@ PopupChatDialog::PopupChatDialog(const std::string &id, const QString &name, QWi peerStatus = 0; last_status_send_time = 0 ; - style.setStyleFromSettings(ChatStyle::TYPE_PRIVATE); + chatStyle.setStyleFromSettings(ChatStyle::TYPE_PRIVATE); /* Hide or show the frames */ showAvatarFrame(PeerSettings->getShowAvatarFrame(dialogId)); @@ -169,6 +169,9 @@ PopupChatDialog::PopupChatDialog(const std::string &id, const QString &name, QWi // load settings processSettings(true); + // load style + PeerSettings->getStyle(dialogId, "PopupChatDialog", style); + // initialize first status StatusInfo peerStatusInfo; // No check of return value. Non existing status info is handled as offline. @@ -643,7 +646,7 @@ void PopupChatDialog::addChatMsg(bool incoming, const std::string &id, const QSt type = incoming ? ChatStyle::FORMATMSG_INCOMING : ChatStyle::FORMATMSG_OUTGOING; } - QString formatMsg = style.formatMessage(type, name, recvTime, message, formatFlag); + QString formatMsg = chatStyle.formatMessage(type, name, recvTime, message, formatFlag); if (addToHistory) { historyKeeper.addMessage(incoming, id, name, sendTime, recvTime, message); @@ -762,7 +765,7 @@ void PopupChatDialog::on_closeInfoFrameButton_clicked() void PopupChatDialog::setColor() { bool ok; - QRgb color = QColorDialog::getRgba(ui.chattextEdit->textColor().rgba(), &ok, this); + QRgb color = QColorDialog::getRgba(ui.chattextEdit->textColor().rgba(), &ok, window()); if (ok) { mCurrentColor = QColor(color); PeerSettings->setPrivateChatColor(dialogId, mCurrentColor.name()); @@ -910,32 +913,32 @@ void PopupChatDialog::addExtraPicture() { // select a picture file QString file; - if (misc::getOpenFileName(this, RshareSettings::LASTDIR_IMAGES, tr("Load Picture File"), "Pictures (*.png *.xpm *.jpg)", file)) { + if (misc::getOpenFileName(window(), RshareSettings::LASTDIR_IMAGES, tr("Load Picture File"), "Pictures (*.png *.xpm *.jpg)", file)) { addAttachment(file.toUtf8().constData(), 1); } } void PopupChatDialog::addAttachment(std::string filePath,int flag) { - /* add a AttachFileItem to the attachment section */ - std::cerr << "PopupChatDialog::addExtraFile() hashing file."; - std::cerr << std::endl; + /* add a AttachFileItem to the attachment section */ + std::cerr << "PopupChatDialog::addExtraFile() hashing file."; + std::cerr << std::endl; - /* add widget in for new destination */ - AttachFileItem *file = new AttachFileItem(filePath); - //file-> - - if(flag==1) - file->setPicFlag(1); + /* add widget in for new destination */ + AttachFileItem *file = new AttachFileItem(filePath); + //file-> - ui.vboxLayout->addWidget(file, 1, 0); + if(flag==1) + file->setPicFlag(1); - //when the file is local or is finished hashing, call the fileHashingFinished method to send a chat message - if (file->getState() == AFI_STATE_LOCAL) { + ui.vboxLayout->addWidget(file, 1, 0); + + //when the file is local or is finished hashing, call the fileHashingFinished method to send a chat message + if (file->getState() == AFI_STATE_LOCAL) { fileHashingFinished(file); - } else { + } else { QObject::connect(file,SIGNAL(fileFinished(AttachFileItem *)), SLOT(fileHashingFinished(AttachFileItem *))) ; - } + } } void PopupChatDialog::fileHashingFinished(AttachFileItem* file) @@ -1120,7 +1123,7 @@ bool PopupChatDialog::fileSave() bool PopupChatDialog::fileSaveAs() { QString fn; - if (misc::getSaveFileName(this, RshareSettings::LASTDIR_HISTORY, tr("Save as..."), tr("Text File (*.txt );;All Files (*)"), fn)) { + if (misc::getSaveFileName(window(), RshareSettings::LASTDIR_HISTORY, tr("Save as..."), tr("Text File (*.txt );;All Files (*)"), fn)) { setCurrentFileName(fn); return fileSave(); } @@ -1248,6 +1251,21 @@ void PopupChatDialog::updatePeersCustomStateString(const QString& peer_id, const void PopupChatDialog::on_actionMessageHistory_triggered() { - ImHistoryBrowser imBrowser(dialogId, historyKeeper, ui.chattextEdit, this); + ImHistoryBrowser imBrowser(dialogId, historyKeeper, ui.chattextEdit, window()); imBrowser.exec(); } + +bool PopupChatDialog::setStyle() +{ + if (style.showDialog(window())) { + PeerSettings->setStyle(dialogId, "PopupChatDialog", style); + return true; + } + + return false; +} + +const RSStyle &PopupChatDialog::getStyle() +{ + return style; +} diff --git a/retroshare-gui/src/gui/chat/PopupChatDialog.h b/retroshare-gui/src/gui/chat/PopupChatDialog.h index 33334673b..0a323ddc0 100644 --- a/retroshare-gui/src/gui/chat/PopupChatDialog.h +++ b/retroshare-gui/src/gui/chat/PopupChatDialog.h @@ -34,6 +34,7 @@ class ChatInfo; #include #include "gui/im_history/IMHistoryKeeper.h" #include "ChatStyle.h" +#include "gui/style/RSStyle.h" class PopupChatDialog : public QWidget { @@ -59,6 +60,8 @@ public: int getPeerStatus() { return peerStatus; } void focusDialog(); void activate(); + bool setStyle(); + const RSStyle &getStyle(); public slots: void updateStatus(const QString &peer_id, int status); @@ -144,9 +147,11 @@ private: bool typing; int peerStatus; IMHistoryKeeper historyKeeper; - ChatStyle style; + ChatStyle chatStyle; bool m_manualDelete; + RSStyle style; + /** Qt Designer generated object */ Ui::PopupChatDialog ui; }; diff --git a/retroshare-gui/src/gui/chat/PopupChatDialog.ui b/retroshare-gui/src/gui/chat/PopupChatDialog.ui index 6160017c3..18ef93418 100644 --- a/retroshare-gui/src/gui/chat/PopupChatDialog.ui +++ b/retroshare-gui/src/gui/chat/PopupChatDialog.ui @@ -19,320 +19,329 @@ - + 0 - - - 0 - - - 1 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 14 - 16777215 - - - - QFrame#frame{border: transparent} - - - QFrame::StyledPanel - - - QFrame::Raised - - - + + + + 0 + + + 0 + + + + 0 - - - - - 14 - 31 - - - - - 14 - 31 - - - - - - - - 16 - 31 - - - - true - - - - - - - Qt::Vertical - - - - 12 - 335 - - - - - - - - - - - - 132 - 16777215 - - - - border: transparent; - - - QFrame::StyledPanel - - - QFrame::Raised - - + + 1 + - 6 - - - 6 - - - 6 + 0 - 9 + 0 - - - - - 116 - 116 - - - - - 116 - 116 - - - - QLabel{ -border-image: url(:/images/avatarstatus_bg.png); - -} - - - - - - Qt::AlignCenter - - - - - - - Qt::Vertical - - - - 61 - 141 - - - - - - - - - 116 - 116 - - - - - 116 - 116 - - - - QLabel{ -border-image: url(:/images/avatarstatus_bg.png); - -} - - - - - - Qt::AlignCenter - - - - - - - - - - QFrame#frame_2{border: transparent} - - - QFrame::StyledPanel - - - QFrame::Raised - - - - 2 - - - 6 - - - 6 - - - 6 - - - + + - + 0 0 - - - Arial - 13 - 75 - true - true - + + + 14 + 16777215 + - - TextLabel + + QFrame#frame{border: transparent} + + QFrame::StyledPanel + + + QFrame::Raised + + + + 0 + + + + + + 14 + 31 + + + + + 14 + 31 + + + + + + + + 16 + 31 + + + + true + + + + + + + Qt::Vertical + + + + 12 + 335 + + + + + - - - - - Arial - 9 - + + + + + 132 + 16777215 + - - TextLabel + + border: transparent; + + QFrame::StyledPanel + + + QFrame::Raised + + + + 6 + + + 6 + + + 6 + + + 9 + + + + + + 116 + 116 + + + + + 116 + 116 + + + + QLabel{ +border-image: url(:/images/avatarstatus_bg.png); + +} + + + + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + + 61 + 141 + + + + + + + + + 116 + 116 + + + + + 116 + 116 + + + + QLabel{ +border-image: url(:/images/avatarstatus_bg.png); + +} + + + + + + Qt::AlignCenter + + + + - - - - - - - QFrame#infoframe{border: 1px solid #DCDC41; + + + + QFrame#frame_2{border: transparent} + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 2 + + + 6 + + + 6 + + + 6 + + + + + + 0 + 0 + + + + + Arial + 13 + 75 + true + true + + + + TextLabel + + + + + + + + Arial + 9 + + + + TextLabel + + + + + + + + + + QFrame#infoframe{border: 1px solid #DCDC41; border-radius: 6px; background: #FFFFD7; background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #FFFFD7, stop:1 #FFFFB2);} - - - QFrame::StyledPanel - - - QFrame::Raised - - - - 6 - - - - - - 16 - 16 - - - + + QFrame::StyledPanel - - :/images/info16.png + + QFrame::Raised - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - - - TextLabel - - - - - - - - 16 - 16 - - - - Qt::NoFocus - - - Close - - - QToolButton + + + 6 + + + + + + 16 + 16 + + + + + + + :/images/info16.png + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + TextLabel + + + + + + + + 16 + 16 + + + + Qt::NoFocus + + + Close + + + QToolButton { border-image: url(:/images/closenormal.png) } @@ -345,67 +354,67 @@ border-image: url(:/images/closehover.png) QToolButton:pressed { border-image: url(:/images/closepressed.png) } - - - - - - true - + + + + + + true + + + + - - - - - - - - 347 - 30 - - - - - 16777215 - 30 - - - - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - 1 - - - 6 - - - + + - 28 - 28 + 347 + 30 - 28 - 28 + 16777215 + 30 - - Qt::NoFocus - - QPushButton::menu-indicator { + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 1 + + + 6 + + + + + + 28 + 28 + + + + + 28 + 28 + + + + Qt::NoFocus + + + QPushButton::menu-indicator { subcontrol-origin: padding; subcontrol-position: bottom right; } @@ -418,444 +427,447 @@ top: 1px; left: 1px; /* shift the arrow by 2 px */ QPushButton:hover { border: 1px solid #CCCCCC; } - - - - - - - :/images/configure.png:/images/configure.png - - - - 22 - 22 - - - - true - + + + + + + + :/images/configure.png:/images/configure.png + + + + 22 + 22 + + + + true + + + + + + + + 28 + 28 + + + + + 28 + 28 + + + + Qt::NoFocus + + + Attach a Picture + + + + + + + :/images/add_image24.png:/images/add_image24.png + + + + 24 + 24 + + + + true + + + + + + + + 28 + 28 + + + + Qt::NoFocus + + + Add a File for your Friend + + + + + + + :/images/add-share24.png:/images/add-share24.png + + + + 24 + 24 + + + + true + + + + + + + Qt::Horizontal + + + + 190 + 25 + + + + + + + + Send + + + + + + + + 0 + 0 + + + + + 28 + 28 + + + + + 28 + 28 + + + + Qt::NoFocus + + + + + + + 24 + 24 + + + + true + + + + + + + + 28 + 28 + + + + + 28 + 28 + + + + Qt::NoFocus + + + Bold + + + + + + + ../../../../../../../Dokumente und Einstellungen/Linux/.designer/backup../../../../../../../Dokumente und Einstellungen/Linux/.designer/backup + + + false + + + true + + + + + + + + 28 + 28 + + + + + 28 + 28 + + + + Qt::NoFocus + + + Underline + + + + + + + ../../../../../../../Dokumente und Einstellungen/Linux/.designer/backup../../../../../../../Dokumente und Einstellungen/Linux/.designer/backup + + + false + + + true + + + + + + + + 28 + 28 + + + + + 28 + 28 + + + + Qt::NoFocus + + + Italic + + + + + + + ../../../../../../../Dokumente und Einstellungen/Linux/.designer/backup../../../../../../../Dokumente und Einstellungen/Linux/.designer/backup + + + false + + + true + + + + + + + + 28 + 28 + + + + + 28 + 28 + + + + Qt::NoFocus + + + Font + + + + + + + ../../../../../../../Dokumente und Einstellungen/Linux/.designer/backup../../../../../../../Dokumente und Einstellungen/Linux/.designer/backup + + + false + + + true + + + + + + + + 28 + 28 + + + + + 28 + 28 + + + + Qt::NoFocus + + + Text Color + + + + + + true + + + + - - - - - 28 - 28 - - - - - 28 - 28 - - - - Qt::NoFocus - - - Attach a Picture - - - - - - - :/images/add_image24.png:/images/add_image24.png - - - - 24 - 24 - - - - true - - + + - - - - - 28 - 28 - + + + + 1 - - Qt::NoFocus - - - Add a File for your Friend - - - - - - - :/images/add-share24.png:/images/add-share24.png - - - - 24 - 24 - - - - true - - - - - - Qt::Horizontal + Qt::Vertical - - - 190 - 25 - + + 2 - - - - - - Send - - - - - - - - 0 - 0 - - - - - 28 - 28 - - - - - 28 - 28 - - - - Qt::NoFocus - - - - - - - 24 - 24 - - - - true - - - - - - - - 28 - 28 - - - - - 28 - 28 - - - - Qt::NoFocus - - - Bold - - - - - - - ../../../../../../../Dokumente und Einstellungen/Linux/.designer/backup../../../../../../../Dokumente und Einstellungen/Linux/.designer/backup - - - false - - - true - - - - - - - - 28 - 28 - - - - - 28 - 28 - - - - Qt::NoFocus - - - Underline - - - - - - - ../../../../../../../Dokumente und Einstellungen/Linux/.designer/backup../../../../../../../Dokumente und Einstellungen/Linux/.designer/backup - - - false - - - true - - - - - - - - 28 - 28 - - - - - 28 - 28 - - - - Qt::NoFocus - - - Italic - - - - - - - ../../../../../../../Dokumente und Einstellungen/Linux/.designer/backup../../../../../../../Dokumente und Einstellungen/Linux/.designer/backup - - - false - - - true - - - - - - - - 28 - 28 - - - - - 28 - 28 - - - - Qt::NoFocus - - - Font - - - - - - - ../../../../../../../Dokumente und Einstellungen/Linux/.designer/backup../../../../../../../Dokumente und Einstellungen/Linux/.designer/backup - - - false - - - true - - - - - - - - 28 - 28 - - - - - 28 - 28 - - - - Qt::NoFocus - - - Text Color - - - - - - true - - - - - - - - - - - - - 1 - - - Qt::Vertical - - - 2 - - - - - - - - 0 - 0 - - - - - 0 - 100 - - - - QTextBrowser{border: 1px solid #B8B6B1; + + + + + + + 0 + 0 + + + + + 0 + 100 + + + + QTextBrowser{border: 1px solid #B8B6B1; border-radius: 6px; background: white;} - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + <!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; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p></body></html> - - - true - - - true - + + + true + + + true + + + + - - - - - - - 0 - - - - - - - - 0 - - - 3 - - - - - - - - 0 - 0 - - - - - 0 - 30 - - - - Qt::CustomContextMenu - - - QTextEdit{border: 1px solid #B8B6B1; + + + + 0 + + + + + + + + 0 + + + 3 + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + Qt::CustomContextMenu + + + QTextEdit{border: 1px solid #B8B6B1; border-radius: 6px; background: white;} - + + + + + + + + 18 + 18 + + + + + 18 + 18 + + + + T + + + Qt::AlignCenter + + + + - - - - - - 18 - 18 - - - - - 18 - 18 - - - - T - - - Qt::AlignCenter - - - - - - - - + + + + + + diff --git a/retroshare-gui/src/gui/chat/PopupChatWindow.cpp b/retroshare-gui/src/gui/chat/PopupChatWindow.cpp index 32b61f640..7e0f563fc 100644 --- a/retroshare-gui/src/gui/chat/PopupChatWindow.cpp +++ b/retroshare-gui/src/gui/chat/PopupChatWindow.cpp @@ -28,6 +28,7 @@ #include "gui/settings/rsharesettings.h" #include "gui/settings/RsharePeerSettings.h" #include "gui/common/StatusDefs.h" +#include "gui/style/RSStyle.h" #include"util/misc.h" #include @@ -83,6 +84,7 @@ PopupChatWindow::PopupChatWindow(bool tabbed, QWidget *parent, Qt::WFlags flags) setAttribute(Qt::WA_DeleteOnClose, true); connect(ui.actionAvatar, SIGNAL(triggered()),this, SLOT(getAvatar())); + connect(ui.actionColor, SIGNAL(triggered()), this, SLOT(setStyle())); connect(ui.actionDockTab, SIGNAL(triggered()), this, SLOT(dockTab())); connect(ui.actionUndockTab, SIGNAL(triggered()), this, SLOT(undockTab())); @@ -120,18 +122,21 @@ void PopupChatWindow::showEvent(QShowEvent *event) } } +PopupChatDialog *PopupChatWindow::getCurrentDialog() +{ + if (tabbedWindow) { + return dynamic_cast(ui.tabWidget->currentWidget()); + } + + return chatDialog; +} + void PopupChatWindow::changeEvent(QEvent *event) { if (event->type() == QEvent::ActivationChange) { - if (tabbedWindow) { - PopupChatDialog *pcd = dynamic_cast(ui.tabWidget->currentWidget()); - if (pcd) { - pcd->activate(); - } - } else { - if (chatDialog) { - chatDialog->activate(); - } + PopupChatDialog *pcd = getCurrentDialog(); + if (pcd) { + pcd->activate(); } } } @@ -144,6 +149,7 @@ void PopupChatWindow::addDialog(PopupChatDialog *dialog) ui.horizontalLayout->addWidget(dialog); peerId = dialog->getPeerId(); chatDialog = dialog; + calculateStyle(dialog); } } @@ -297,6 +303,7 @@ void PopupChatWindow::tabCurrentChanged(int tab) if (pcd) { pcd->activate(); + calculateStyle(pcd); } } @@ -329,3 +336,35 @@ void PopupChatWindow::undockTab() } } } + +void PopupChatWindow::setStyle() +{ + PopupChatDialog *pcd = getCurrentDialog(); + + if (pcd && pcd->setStyle()) { + calculateStyle(pcd); + } +} + +void PopupChatWindow::calculateStyle(PopupChatDialog *dialog) +{ + QString toolSheet; + QString statusSheet; + QString widgetSheet; + + if (dialog) { + const RSStyle &style = dialog->getStyle(); + + QString styleSheet = style.getStyleSheet(); + + if (styleSheet.isEmpty() == false) { + toolSheet = QString("QToolBar{%1}").arg(styleSheet); + statusSheet = QString(".QStatusBar{%1}").arg(styleSheet); + widgetSheet = QString(".QWidget{%1}").arg(styleSheet); + } + } + + ui.chattoolBar->setStyleSheet(toolSheet); + ui.chatstatusbar->setStyleSheet(statusSheet); + ui.chatcentralwidget->setStyleSheet(widgetSheet); +} diff --git a/retroshare-gui/src/gui/chat/PopupChatWindow.h b/retroshare-gui/src/gui/chat/PopupChatWindow.h index a0f4750e2..698ce693b 100644 --- a/retroshare-gui/src/gui/chat/PopupChatWindow.h +++ b/retroshare-gui/src/gui/chat/PopupChatWindow.h @@ -58,6 +58,7 @@ private slots: void tabCurrentChanged(int tab); void dockTab(); void undockTab(); + void setStyle(); private: bool tabbedWindow; @@ -65,6 +66,9 @@ private: std::string peerId; PopupChatDialog *chatDialog; + PopupChatDialog *getCurrentDialog(); + void calculateStyle(PopupChatDialog *dialog); + /** Qt Designer generated object */ Ui::PopupChatWindow ui; }; diff --git a/retroshare-gui/src/gui/chat/PopupChatWindow.ui b/retroshare-gui/src/gui/chat/PopupChatWindow.ui index 863ba1b92..89ab82c63 100644 --- a/retroshare-gui/src/gui/chat/PopupChatWindow.ui +++ b/retroshare-gui/src/gui/chat/PopupChatWindow.ui @@ -23,32 +23,16 @@ - - - 0 - - - 0 - - - 0 - - - 1 - - - - - - - true - - - true - - - - + + + + + true + + + true + + @@ -82,6 +66,7 @@ false + @@ -121,6 +106,18 @@ Undock tab + + + + :/images/highlight.png:/images/highlight.png + + + Set Chat Window Color + + + Set Chat Window Color + + diff --git a/retroshare-gui/src/gui/settings/RsharePeerSettings.cpp b/retroshare-gui/src/gui/settings/RsharePeerSettings.cpp index 580e943cd..86fac1b50 100644 --- a/retroshare-gui/src/gui/settings/RsharePeerSettings.cpp +++ b/retroshare-gui/src/gui/settings/RsharePeerSettings.cpp @@ -31,6 +31,7 @@ #include #include "RsharePeerSettings.h" +#include "gui/style/RSStyle.h" /** The file in which all settings of he peers will read and written. */ #define SETTINGS_FILE (RsInit::RsProfileConfigDirectory() + "/RSPeers.conf") @@ -206,3 +207,41 @@ void RsharePeerSettings::setShowAvatarFrame(const std::string &peerId, bool valu { return set(peerId, "ShowAvatarFrame", value); } + +void RsharePeerSettings::getStyle(const std::string &peerId, const QString &name, RSStyle &style) +{ + std::string gpgId; + if (getGpgIdOfSslId(peerId, gpgId) == false) { + /* gpg id not found */ + return; + } + + beginGroup(QString::fromStdString(gpgId)); + beginGroup("style"); + beginGroup(name); + + style.readSetting(*this); + + endGroup(); + endGroup(); + endGroup(); +} + +void RsharePeerSettings::setStyle(const std::string &peerId, const QString &name, RSStyle &style) +{ + std::string gpgId; + if (getGpgIdOfSslId(peerId, gpgId) == false) { + /* gpg id not found */ + return; + } + + beginGroup(QString::fromStdString(gpgId)); + beginGroup("style"); + beginGroup(name); + + style.writeSetting(*this); + + endGroup(); + endGroup(); + endGroup(); +} diff --git a/retroshare-gui/src/gui/settings/RsharePeerSettings.h b/retroshare-gui/src/gui/settings/RsharePeerSettings.h index c312ad77c..ab8cf8a9e 100644 --- a/retroshare-gui/src/gui/settings/RsharePeerSettings.h +++ b/retroshare-gui/src/gui/settings/RsharePeerSettings.h @@ -24,6 +24,8 @@ #include +class RSStyle; + /** Handles saving and restoring RShares's settings for peers */ class RsharePeerSettings : public QSettings { @@ -43,6 +45,9 @@ public: bool getShowAvatarFrame(const std::string &peerId); void setShowAvatarFrame(const std::string &peerId, bool value); + void getStyle(const std::string &peerId, const QString &name, RSStyle &style); + void setStyle(const std::string &peerId, const QString &name, RSStyle &style); + protected: /** Default constructor. */ RsharePeerSettings(); diff --git a/retroshare-gui/src/gui/style/RSStyle.cpp b/retroshare-gui/src/gui/style/RSStyle.cpp new file mode 100644 index 000000000..1b677e060 --- /dev/null +++ b/retroshare-gui/src/gui/style/RSStyle.cpp @@ -0,0 +1,114 @@ +/**************************************************************** + * 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 + +#include "RSStyle.h" +#include "StyleDialog.h" + +RSStyle::RSStyle() +{ + styleType = STYLETYPE_NONE; +} + +/*static*/ int RSStyle::neededColors(StyleType styleType) +{ + switch (styleType) { + case STYLETYPE_NONE: + return 0; + case STYLETYPE_SOLID: + return 1; + case STYLETYPE_GRADIENT: + return 2; + } + + return 0; +} + +QString RSStyle::getStyleSheet() const +{ + QString sheet; + + switch (styleType) { + case STYLETYPE_NONE: + break; + case STYLETYPE_SOLID: + sheet = "background-color: "; + break; + case STYLETYPE_GRADIENT: + sheet = "background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 , stop:1 );"; + break; + } + + if (sheet.isEmpty() == false) { + /* Replace colors */ + for (int i = 0; i < colors.size(); i++) { + sheet.replace(QString("").arg(i + 1), colors[i].name()); + } + } + + return sheet; +} + +bool RSStyle::showDialog(QWidget *parent) +{ + StyleDialog dlg(*this, parent); + int result = dlg.exec(); + if (result == QDialog::Accepted) { + dlg.getStyle(*this); + return true; + } + + return false; +} + +void RSStyle::readSetting (QSettings &settings) +{ + int type = (StyleType) settings.value("styleType").toInt(); + if (type >= 0 && type <= STYLETYPE_MAX) { + styleType = (StyleType) type; + } else { + styleType = STYLETYPE_NONE; + } + + colors.empty(); + + int size = settings.beginReadArray("colors"); + for (int i = 0; i < size; i++) { + settings.setArrayIndex(i); + colors.append(QColor(settings.value("value").toString())); + } + settings.endArray(); +} + +void RSStyle::writeSetting (QSettings &settings) +{ + settings.setValue("styleType", styleType); + + settings.beginWriteArray("colors"); + int size = colors.size(); + for (int i = 0; i < size; i++) { + settings.setArrayIndex(i); + settings.setValue("value", colors[i].name()); + } + settings.endArray(); +} diff --git a/retroshare-gui/src/gui/style/RSStyle.h b/retroshare-gui/src/gui/style/RSStyle.h new file mode 100644 index 000000000..bdc5cf93c --- /dev/null +++ b/retroshare-gui/src/gui/style/RSStyle.h @@ -0,0 +1,58 @@ +/**************************************************************** + * 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 _RSSTYLE_H +#define _RSSTYLE_H + +#include +class QSettings; + +class RSStyle +{ +public: + enum StyleType + { + STYLETYPE_NONE = 0, + STYLETYPE_SOLID = 1, + STYLETYPE_GRADIENT = 2, + STYLETYPE_MAX = 2 + }; + +public: + RSStyle(); + + QString getStyleSheet() const; + + bool showDialog(QWidget *parent); + + static int neededColors(StyleType styleType); + + void readSetting (QSettings &settings); + void writeSetting (QSettings &settings); + +public: + StyleType styleType; + QList colors; +}; + +#endif + diff --git a/retroshare-gui/src/gui/style/StyleDialog.cpp b/retroshare-gui/src/gui/style/StyleDialog.cpp new file mode 100644 index 000000000..ffbc22245 --- /dev/null +++ b/retroshare-gui/src/gui/style/StyleDialog.cpp @@ -0,0 +1,161 @@ +/**************************************************************** + * + * RetroShare is distributed under the following license: + * + * Copyright (C) 2006, crypton + * + * 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 "gui/settings/rsharesettings.h" + +#include "StyleDialog.h" +#include "gui/style/RSStyle.h" + +/** Default constructor */ +StyleDialog::StyleDialog(RSStyle &style, QWidget *parent, Qt::WFlags flags) : QDialog(parent, flags) +{ + /* Invoke Qt Designer generated QObject setup routine */ + ui.setupUi(this); + + /* Load window postion */ + QByteArray geometry = Settings->valueFromGroup("StyleDialog", "Geometry", QByteArray()).toByteArray(); + if (geometry.isEmpty() == false) { + restoreGeometry(geometry); + } + +// setWindowIcon(QIcon(":/images/rstray3.png")); + + connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(onOK())); + connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(reject())); + + connect(ui.color1Button, SIGNAL(clicked()), this, SLOT(chooseColor())); + connect(ui.color2Button, SIGNAL(clicked()), this, SLOT(chooseColor())); + + /* Initialize style combobox */ + ui.styleComboBox->addItem(tr("None"), RSStyle::STYLETYPE_NONE); + ui.styleComboBox->addItem(tr("Solid"), RSStyle::STYLETYPE_SOLID); + ui.styleComboBox->addItem(tr("Gradient"), RSStyle::STYLETYPE_GRADIENT); + + ui.styleComboBox->setCurrentIndex(style.styleType); + connect(ui.styleComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(showButtons())); + + /* Add pushbuttons and labels */ + pushButtons.append(ui.color1Button); + pushButtons.append(ui.color2Button); + + labels.append(ui.color1Label); + labels.append(ui.color2Label); + + /* Set pushbuttons visible */ + showButtons(); + + /* Init colors */ + for (int i = 0; i < pushButtons.size(); i++) { + if (i < style.colors.size()) { + colors[pushButtons[i]] = style.colors[i]; + } else { + colors[pushButtons[i]] = Qt::white; + } + } + + drawButtons(); + drawPreview(); +} + +/** Destructor. */ +StyleDialog::~StyleDialog() +{ + /* Save window postion */ + Settings->setValueToGroup("StyleDialog", "Geometry", saveGeometry()); +} + +void StyleDialog::onOK() +{ + accept(); +} + +int StyleDialog::neededColors() +{ + return RSStyle::neededColors((RSStyle::StyleType) ui.styleComboBox->itemData(ui.styleComboBox->currentIndex()).toInt()); +} + +void StyleDialog::getStyle(RSStyle &style) +{ + style.styleType = (RSStyle::StyleType) ui.styleComboBox->itemData(ui.styleComboBox->currentIndex()).toInt(); + + style.colors.clear(); + + int count = qMin(neededColors(), pushButtons.size()); + for (int i = 0; i < count; i++) { + style.colors.append(colors[pushButtons[i]]); + } +} + +void StyleDialog::showButtons() +{ + int count = neededColors(); + for (int i = 0; i < pushButtons.size(); i++) { + pushButtons[i]->setVisible(i < count); + labels[i]->setVisible(i < count); + } + + drawPreview(); +} + +void StyleDialog::drawButtons() +{ + QPixmap pxm(16,14); + + QMap::iterator it; + for (it = colors.begin(); it != colors.end(); it++) { + pxm.fill(it.value()); + it.key()->setIcon(pxm); + } +} + +void StyleDialog::drawPreview() +{ + RSStyle style; + getStyle(style); + + QString widgetSheet; + + QString styleSheet = style.getStyleSheet(); + if (styleSheet.isEmpty() == false) { + widgetSheet = QString(".QWidget{%1}").arg(styleSheet); + } + + ui.previewWidget->setStyleSheet(widgetSheet); +} + +void StyleDialog::chooseColor() +{ + QPushButton *button = dynamic_cast(sender()); + if (button == NULL) { + return; + } + + QColor color = QColorDialog::getColor(colors[button]); + if (color.isValid()) { + colors[button] = color; + + drawButtons(); + drawPreview(); + } +} diff --git a/retroshare-gui/src/gui/style/StyleDialog.h b/retroshare-gui/src/gui/style/StyleDialog.h new file mode 100644 index 000000000..db4a6f0e0 --- /dev/null +++ b/retroshare-gui/src/gui/style/StyleDialog.h @@ -0,0 +1,63 @@ +/**************************************************************** + * RetroShare is distributed under the following license: + * + * Copyright (C) 2006, crypton + * + * 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 _STYLEDIALOG_H +#define _STYLEDIALOG_H + +#include +#include + +#include "ui_StyleDialog.h" + +class QPushButton; +class RSStyle; + +class StyleDialog : public QDialog +{ + Q_OBJECT + +public: + /** Default constructor */ + StyleDialog(RSStyle &style, QWidget *parent = 0, Qt::WFlags flags = 0); + /** Default destructor */ + ~StyleDialog(); + + void getStyle(RSStyle &style); + +private slots: + void onOK(); + void chooseColor(); + void showButtons(); + +private: + QMap colors; + QList pushButtons; + QList labels; + + void drawButtons(); + int neededColors(); + void drawPreview(); + + /** Qt Designer generated object */ + Ui::StyleDialog ui; +}; + +#endif diff --git a/retroshare-gui/src/gui/style/StyleDialog.ui b/retroshare-gui/src/gui/style/StyleDialog.ui new file mode 100644 index 000000000..e9b41d95e --- /dev/null +++ b/retroshare-gui/src/gui/style/StyleDialog.ui @@ -0,0 +1,273 @@ + + + StyleDialog + + + Qt::NonModal + + + + 0 + 0 + 387 + 227 + + + + + 0 + 0 + + + + + 387 + 227 + + + + Define Style + + + + :/images/rstray3.png:/images/rstray3.png + + + true + + + + 0 + + + 0 + + + + + + 0 + 0 + + + + QFrame#frame{background-image: url(:/images/connect/connectFriendBanner.png);} + + + + QFrame::NoFrame + + + QFrame::Plain + + + + 9 + + + 6 + + + 9 + + + 6 + + + + + + 64 + 64 + + + + + 64 + 64 + + + + + + + :/images/library.png + + + true + + + + + + + + 18 + 75 + true + + + + <!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; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<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:18pt; color:#ffffff;">Define Style</span></p></body></html> + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + + + + 0 + 0 + + + + Choose color + + + + + + + + + + + 0 + 0 + + + + Choose color + + + + + + + + + + + 0 + 0 + + + + Color 2 + + + + + + + + 0 + 0 + + + + Color 1 + + + + + + + + 0 + 0 + + + + + 150 + 0 + + + + + + + + + 0 + 0 + + + + Style + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 0 + 5000 + + + + + + + + + + + 0 + 0 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + true + + + + + + + + + + + + + diff --git a/retroshare-gui/src/lang/retroshare_de.qm b/retroshare-gui/src/lang/retroshare_de.qm index 97f1f84fc11fc61fdb9aacdd090b5f4af3dd49c3..2609f8a54c38e3ee856acff67a1426a40cf7490b 100644 GIT binary patch delta 16432 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 delta 15519 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 CertificatePage - + Certificate files Zertifikat-Dateien @@ -1025,13 +1025,18 @@ p, li { white-space: pre-wrap; } Set all to read Alle als gelesen markieren + + + Enable Auto-download + + Create Channel Kanal erstellen - + Unsubscribe Abbestellen @@ -1051,7 +1056,7 @@ p, li { white-space: pre-wrap; } Kanal abbestellen - + Own Channels Meine Kanäle @@ -1072,7 +1077,7 @@ p, li { white-space: pre-wrap; } - + Post to Channel Kanalbeitrag erstellen @@ -1102,12 +1107,12 @@ p, li { white-space: pre-wrap; } Verteile Kanal - + No Channel Selected Keinen Kanal gewählt - + Edit Channel Details Kanal-Details bearbeiten @@ -1384,7 +1389,7 @@ p, li { white-space: pre-wrap; } ConfCertDialog - + Cancel Abbrechen @@ -1394,7 +1399,7 @@ p, li { white-space: pre-wrap; } OK - + Peer Info Nachbar Info @@ -1419,7 +1424,7 @@ p, li { white-space: pre-wrap; } Adresse des Nachbarn - + Deny Friend Blockiere Freund @@ -1429,13 +1434,13 @@ p, li { white-space: pre-wrap; } Als Freund wählen - - + + Sign GPG key Unterzeichne GPG Schlüssel - + Your trust in this peer is: Dein Vertrauen zu diesem Nachbar ist: @@ -1516,7 +1521,29 @@ p, li { white-space: pre-wrap; } Voll - + + <!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; } +</style></head><body style=" font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Signing a friend's key is a way to express your trust into this friend, to your other friends. Besides, only signed peers will receive information about your other trusted friends.</p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Signing a key cannot be undone, so do it wisely.</p></body></html> + + + + + <!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; } +</style></head><body style=" font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Signing a friend's key is a way to express your trust into this friend, to your other friends. Besides, only signed peers will receive information about your other trusted friends.</p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Signing a key cannot be undone, so do it wisely.</p></body></html> + + + + Apply and Close Übernehmen und Schliessen @@ -1590,7 +1617,7 @@ und meinen GPG Schlüssel nicht unterzeichnet Vielleicht ist das Passwort falsch - + Trust Vertrauen @@ -1615,7 +1642,7 @@ und meinen GPG Schlüssel nicht unterzeichnet Kopiere Nachbar - + Certificate Zertifikat @@ -1623,7 +1650,7 @@ und meinen GPG Schlüssel nicht unterzeichnet ConnectFriendWizard - + Connect Friend Wizard Assistent um sich zu einem Freund zu verbinden @@ -2782,7 +2809,7 @@ p, li { white-space: pre-wrap; } Durchsuchen - + Set Incoming Directory Ordner für eingehende Dateien @@ -2831,7 +2858,17 @@ Das ist nützlich, wenn Du eine externe Festplatte freigibst und die Datei nicht Bereinige Hash Cache - + + Auto-check shared directories every + + + + + minute(s) + + + + Partials Directory Temporäre Dateien @@ -2966,7 +3003,7 @@ Das ist nützlich, wenn Du eine externe Festplatte freigibst und die Datei nicht EmailPage - + Invite Friends by Email @@ -3289,6 +3326,44 @@ p, li { white-space: pre-wrap; } Direkte Freund-Übertragung / Verfügbarkeit angenommen + + FlatStyle_RDM + + + Friends Directories + Dateien von Freunden + + + + My Directories + Meine Ordner + + + + Size + Grösse + + + + Age + Alter + + + + Friend + Freund + + + + Share Type + Freigabe Typ + + + + Directory + Ordner + + FofPage @@ -4891,7 +4966,7 @@ p, li { white-space: pre-wrap; } IntroPage - + &Make friend with selected friends of my friends &Füge ausgewählte Freunde Deiner Freunde hinzu @@ -5208,20 +5283,20 @@ p, li { white-space: pre-wrap; } - + %1 new messages %1 neue Nachrichten - + - + %1 new message %1 neue Nachricht - + You have %1 completed downloads Du hast %1 fertige Downloads @@ -5256,7 +5331,7 @@ p, li { white-space: pre-wrap; } %1 Freunde verbunden - + It seems to be an old RetroShare link. Please use copy instead. Es scheint ein alter RetroShare Link zu sein. Bitte kopiere den Link stattdessen. @@ -5266,12 +5341,12 @@ p, li { white-space: pre-wrap; } Link ist fehlerhaft. - + %1 friend connected %1 Freund verbunden - + Internal Error Interener Fehler @@ -5292,7 +5367,7 @@ p, li { white-space: pre-wrap; } Zeigen - + RetroShare @@ -5351,15 +5426,15 @@ p, li { white-space: pre-wrap; } - + You have %1 new messages Du hast %1 neue Nachrichten - + - + You have %1 new message Du hast %1 neue Nachricht @@ -5379,7 +5454,7 @@ p, li { white-space: pre-wrap; } Schliessen - + Minimize Minimieren @@ -5404,7 +5479,7 @@ p, li { white-space: pre-wrap; } - + Help Hilfe @@ -5414,7 +5489,7 @@ p, li { white-space: pre-wrap; } Über - + Forums Foren @@ -5425,7 +5500,7 @@ p, li { white-space: pre-wrap; } RetroShare %1 eine sichere und dezentralisierte Kommunikationsplattform - + Open Messages Öffne Nachrichten @@ -5435,12 +5510,12 @@ p, li { white-space: pre-wrap; } Anwendungen - + Plugins - + Do you really want to exit RetroShare ? Willst Du RetroShare wirklich beenden? @@ -5450,7 +5525,7 @@ p, li { white-space: pre-wrap; } Wirklich beenden? - + Low disk space warning Wenig Festplatenspeicher @@ -8076,7 +8151,7 @@ p, li { white-space: pre-wrap; } PopupChatDialog - + Hide Avatar Avatar verstecken @@ -8086,7 +8161,7 @@ p, li { white-space: pre-wrap; } Avatar zeigen - + Do you really want to physically delete the history? Willst Du wirklich den Nachrichtenverlauf physisch löschen? @@ -8106,30 +8181,30 @@ p, li { white-space: pre-wrap; } Nachrichten, die Du versendest gehen bei diesem Freund erst wieder ein wenn er Online ist - - + + Bold Fett - - + + Underline Unterstrichen - - + + Italic Kursiv - + Text Color Textfarbe - + Clear offline messages Entferne offline Nachrichten @@ -8149,12 +8224,12 @@ p, li { white-space: pre-wrap; } Nachrichtenverlauf leeren - + Font Schriftart - + Delete Chat History Nachrichtenverlauf löschen @@ -8164,12 +8239,12 @@ p, li { white-space: pre-wrap; } Löscht den gespeicherten und angezeigten Chat Verlauf - + Send Senden - + Disable Emoticons Deaktiviere Emoticons @@ -8195,12 +8270,12 @@ p, li { white-space: pre-wrap; } Ordner können nicht für Drag'n'Drop genutzt werden. Nur Dateien werden akzeptiert. - + Add a File for your Friend Füge eine Datei für deinen Freund hinzu - + Save Chat History Nachrichtenverlauf speichern @@ -8216,18 +8291,18 @@ p, li { white-space: pre-wrap; } Text Datei (*.txt );;Alle Dateien (*) - + Your Friend is offline Do you want to send them a Message instead Dein Freund ist Offline willst du ihm stattdessen eine Nachricht senden - + Attach a Picture Bild anhängen - + is Idle and may not reply antwortet möglicherweise nicht, da der Status auf "Untätig" gesetzt wurde @@ -8247,7 +8322,7 @@ Do you want to send them a Message instead ist Offline. - + Paste RetroShare Link RetroShare Link einfügen @@ -8270,7 +8345,7 @@ Do you want to send them a Message instead PopupChatWindow - + Avatar Avatar @@ -8292,7 +8367,13 @@ Do you want to send them a Message instead Tab abdocken - + + + Set Chat Window Color + Setze Farbe des Chat Fensters + + + RetroShare RetroShare @@ -9262,76 +9343,83 @@ p, li { white-space: pre-wrap; } RemoteDirModel - Friends Directories - Dateien von Freunden + Dateien von Freunden - My Directories - Meine Ordner + Meine Ordner - Size - Grösse + Grösse - Share Type - Freigabe Typ + Freigabe Typ - What's new - Was ist neu + Was ist neu - Age - Alter + Alter - Anonymous - Anonym + Anonym + + + Anonymous and browsable by friends + Anonym und Durchsuchbar von Freunden + + + Only browsable by friends + Nur Durchsuchbar von Freunden + + + NEW + NEU + + + FILE + DATEI + + + Files + Dateien + + + File + Datei + + + DIR + ORDNER + + + + RetroshareDirModel + + + Anonymous + Anonym Anonymous and browsable by friends - Anonym und Durchsuchbar von Freunden + Anonym und Durchsuchbar von Freunden Only browsable by friends - Nur Durchsuchbar von Freunden + Nur Durchsuchbar von Freunden NEW - NEU - - - - - FILE - DATEI - - - - Files - Dateien - - - - File - Datei - - - - - DIR - ORDNER + NEU @@ -9400,7 +9488,7 @@ p, li { white-space: pre-wrap; } RsidPage - + RetroShare ID RetroShare ID @@ -9497,7 +9585,7 @@ p, li { white-space: pre-wrap; } Freunden empfehlen - + Remove Entfernen @@ -9508,7 +9596,7 @@ p, li { white-space: pre-wrap; } - + Folder Ordner @@ -9568,7 +9656,7 @@ p, li { white-space: pre-wrap; } Such ID - + Download Notice Download @@ -10207,13 +10295,13 @@ p, li { white-space: pre-wrap; } SharedFilesDialog - - + + Download Herunterladen - + Splitted View Geteiltes Fenster @@ -10276,23 +10364,33 @@ p, li { white-space: pre-wrap; } Zurücksetzen - + + Tree view + + + + + Flat view + + + + check files Prüfe Dateien - - + + Open File Datei öffnen - + Open Folder Ordner öffnen - + Set command for opening this file Setze eine Regel zum Öffnen dieser Datei @@ -10317,7 +10415,7 @@ p, li { white-space: pre-wrap; } Sende RetroShare Link - + Copy retroshare Links to Clipboard Kopiere RetroShare Links in die Zwischenablage @@ -10347,7 +10445,7 @@ p, li { white-space: pre-wrap; } Füge die Links zur Verknüpfungs-Wolke hinzu - + Recommend in a message to Empfehle in einer Nachricht an @@ -10967,6 +11065,63 @@ p, li { white-space: pre-wrap; } Abbrechen + + StyleDialog + + + Define Style + Definiere Farben + + + + <!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; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<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:18pt; color:#ffffff;">Define Style</span></p></body></html> + <!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; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<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:18pt; color:#ffffff;">Definiere Farben</span></p></body></html> + + + + + Choose color + Farbe wählen + + + + Color 2 + Farbe 2 + + + + Color 1 + Farbe 1 + + + + Style + Stil + + + + None + Kein + + + + Solid + Farbe + + + + Gradient + Farbverlauf + + SubDestItem @@ -11100,7 +11255,7 @@ p, li { white-space: pre-wrap; } TextPage - + Use text representation of the PGP certificates. Verwende diesen Text als PGP Zertifikat. @@ -11110,7 +11265,7 @@ p, li { white-space: pre-wrap; } Der folgende Text ist Ihr PGP Zertifikat. Sie können es zu Ihrem Freund geben - + Save your Cert into a File Zertifikat als Datei speichern @@ -11120,7 +11275,12 @@ p, li { white-space: pre-wrap; } Bitte füge das PGP-Zertifikat von Ihre Freunde in das Feld unten ein - + + Clean certificate + + + + Save as... Speichern unter... @@ -11140,12 +11300,12 @@ p, li { white-space: pre-wrap; } - + Text certificate Text-Zertifikat - + Copy your Cert to Clipboard Kopiere dein Zertifikat in die Zwischenablage @@ -11155,7 +11315,7 @@ p, li { white-space: pre-wrap; } Starte das Standard-Emailprogramm - + Connect Friend Help Verbindungshilfe @@ -11170,7 +11330,7 @@ p, li { white-space: pre-wrap; } Dein Zertiifkat ist in in die Zwischenablage kopiert worden - + RetroShare Invite RetroShare Einladung @@ -11452,7 +11612,17 @@ p, li { white-space: pre-wrap; } Details: - + + File preview + + + + + File %1 preview failed. + + + + Open Transfer Öffne Übertragung @@ -11462,7 +11632,7 @@ p, li { white-space: pre-wrap; } Datei %1 ist nicht komplett. Wenn es eine Media Datei ist dann versuche "Vorschau". - + Are you sure that you want to cancel and delete these files? Soll dieser Download wirklich abgebrochen und gelöscht werden? @@ -11586,6 +11756,66 @@ p, li { white-space: pre-wrap; } Erzwinge Überprüfung + + TreeStyle_RDM + + + + FILE + DATEI + + + + Files + Dateien + + + + File + Datei + + + + + DIR + ORDNER + + + + Friends Directories + Dateien von Freunden + + + + My Directories + Meine Ordner + + + + Size + Grösse + + + + Age + Alter + + + + Friend + Freund + + + + Share Type + Freigabe Typ + + + + What's new + Was ist neu + + TrustView