Compare commits

...

1 Commits

Author SHA1 Message Date
Mario Fetka 3200be221c Import release 2.0.6 2011-02-08 19:31:37 +00:00
33 changed files with 779 additions and 314 deletions
-16
View File
@@ -1,16 +0,0 @@
# Build files and dirs
build*
# KDevelop and other IDE-specific project files
*.kdev*
# Doxygen files
apidocs/
kmess.tag
# Mac stuff
.DS_Store
finkbuild
# ./configure script stuff
Makefile
-3
View File
@@ -1,3 +0,0 @@
[submodule "contrib/isf-qt"]
path = contrib/isf-qt
url = git://gitorious.org/kmess/libisf-qt.git
+1
View File
@@ -253,6 +253,7 @@
Timo Tambet <ttambet@gmail.com>
- Contact Changed and Group Changed notifications.
- Contact added user dialog tabbing
KMerlin <http://kmerlin.olsd.de/>
- Inspiration and assorted code
+2 -2
View File
@@ -150,7 +150,7 @@ INCLUDE_DIRECTORIES( ${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ${LIBXM
# Switch between the following two commands to force using a predefined version number
# EXECUTE_PROCESS( COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/cmake/get-git-version.sh OUTPUT_VARIABLE KMESS_VERSION )
SET( KMESS_VERSION "2.0.5" )
SET( KMESS_VERSION "2.0.6" )
#### Define compiler flags ####
@@ -178,7 +178,7 @@ ENDIF( CMAKE_COMPILER_IS_GNUCXX )
# - relwithdebinfo (release with debug info)
# - minsizerel (minsize release)
# Uncomment the next line to always force building in full debug mode
# SET( CMAKE_BUILD_TYPE debugfull )
SET( CMAKE_BUILD_TYPE debugfull )
# Enable the KMess debug output when compiling a debug build
IF( CMAKE_BUILD_TYPE STREQUAL debugfull OR KMESS_DEBUG_OUTPUT EQUAL 1 )
+35
View File
@@ -1,4 +1,39 @@
--- 2.0.6 released ---
2011-01-13 (Adam)
* Fix bug where KMess couldn't login due to badly formed URL commands.
2011-01-08 (Valerio)
* Fixed crash when taking any action in the Contact Added User dialog.
Also removed an unnecessary signal-bouncing slot.
* Fixed a dangling pointer issue when the Contact Added User dialog was
shown, closed and shown again.
2011-01-05 (Adam)
* Add new widget, FaderWidget, which smoothly fades between the initial view
and the contact list. Disable by setting NoFadeEffect to true under the
MainWindow section of kmessrc.
2011-01-02 (Pano)
* Merged an updated Japanese translation by Daniel E. Moctezuma.
* Merged an updated Spanish translation by Daniel E. Moctezuma.
* Merged an updated German translation.
2010-12-24 (Adam)
* Fix retrieval of roaming display picture.
2010-12-23 (Adam)
* Fix a problem where roaming service profile data was invalid.
2010-12-13 (Valerio)
* Fixed "Visit Link" context-menu icon in chat. Thanks to IRC's agostino for the
heads-up.
2010-11-16 (Adam)
* (Finally) merged in a modified patch by Timo Tambet that groups all
"contact added user" windows as tabs under a single dialog.
--- 2.0.5 released ---
2010-10-23 (Valerio)
+1 -1
View File
@@ -5,7 +5,7 @@
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = KMess
PROJECT_NUMBER = 2.0.5
PROJECT_NUMBER = 2.0.6
OUTPUT_DIRECTORY = ./apidocs
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English
+18 -1
View File
@@ -1,9 +1,26 @@
Changes between KMess SVN and 2.0.5:
Changes between KMess Git and 2.0.6:
--------------------------------------
- None yet.
Changes between KMess 2.0.6 and 2.0.5:
--------------------------------------
- fix bug where KMess couldn't login due to badly formed URL commands.
- fixed crash when taking any action in the Contact Added User dialog.
- fixed a possible crash when using the Contact Added User dialog.
- Added a fading effect when switching between the initial view
and the contact list.
- fixed retrieval of display pictures from online MSN storage.
- fixed a problem where roaming service profile data was invalid.
- fixed "Visit Link" context-menu icon in chat. Thanks to IRC's agostino.
- improved Contact Added User dialog with tabs. Thanks ti Timo Tambet.
- updated Japanese translation by Daniel E. Moctezuma.
- updated Spanish translation by Daniel E. Moctezuma.
- updated German translation.
Changes between KMess 2.0.5 and 2.0.4:
--------------------------------------
Vendored
+1 -1
View File
@@ -54,7 +54,7 @@ DEBUG=0
# Globals
cd `dirname $0`
SRC_DIR="$PWD"
KMESS_VER="`./cmake/get-svn-version.sh`"
KMESS_VER="`./cmake/get-git-version.sh`"
-6
View File
@@ -1,6 +0,0 @@
# Build files and dirs
build*
# KDevelop and other IDE-specific project files
*.kdev*
+6 -6
View File
@@ -10,14 +10,14 @@ msgstr ""
"Project-Id-Version: de\n"
"Report-Msgid-Bugs-To: http://www.kmess.org/board/\n"
"POT-Creation-Date: 2010-08-04 19:23+0200\n"
"PO-Revision-Date: 2010-06-27 14:36+0200\n"
"PO-Revision-Date: 2010-08-29 00:07+0200\n"
"Last-Translator: Panagiotis Papadopoulos <pano_90@gmx.net>\n"
"Language-Team: German <kde-i18n-de@kde.org>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 1.0\n"
"X-Generator: Lokalize 1.1\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#: account.cpp:45 account.cpp:755
@@ -2984,8 +2984,8 @@ msgid ""
"If you feel your name is missing here, please contact us too!"
msgstr ""
"Sie sind eingeladen Fehlerkorrekturen und Verbesserungen im KMess-Forum zu "
"veröffentlichen!\n"
"Wenn Sie denken, dass Ihr Name hier fehlt kontaktieren Sie uns bitte!"
"veröffentlichen.\n"
"Wenn Sie denken, dass Ihr Name hier fehlt kontaktieren Sie uns bitte."
#: main.cpp:194
msgid "Your name here?"
@@ -5617,7 +5617,7 @@ msgid ""
"are not using the computer for a few minutes. If this option is not "
"available, KMess was built without support for this feature."
msgstr ""
"Ist diese Option aktiviert, wird Ihr Status automatisch auf „Inaktiv“ "
"Ist diese Option aktiviert, wird Ihr Status automatisch auf „Inaktiv“ "
"gesetzt, wenn Sie Ihren Computer für einige Minuten nicht benutzen. Falls "
"diese Option nicht verfügbar ist, wurde KMess ohne Unterstützung für diese "
"Funktion kompiliert."
@@ -6321,7 +6321,7 @@ msgid ""
msgstr ""
"Ist diese Option aktiviert, wird eine Benachrichtigung angezeigt, sobald "
"eine E-Mail in Ihrem Posteingang eintrifft. Die Anzahl der ungelesen E-Mail-"
"Nachrichten, wird über der Kontaktliste angezeigt. Diese Option ist nur für "
"Nachrichten wird über der Kontaktliste angezeigt. Diese Option ist nur für "
"„Live Mail“-Zugänge verfügbar."
#. i18n: file: settings/contactlistpage.ui:26
+30 -28
View File
@@ -9,19 +9,20 @@
# Alexis Medina <alexismedina@gmail.com>, 2009.
# Manuel Ramírez <elpreto@kde.org.ar>, 2009.
# Mauricio Muñoz Lucero <real_mml@gmail.com>, 2009, 2010.
# Daniel E. Moctezuma <democtezuma@gmail.com>, 2010.
msgid ""
msgstr ""
"Project-Id-Version: es\n"
"Report-Msgid-Bugs-To: http://www.kmess.org/board/\n"
"POT-Creation-Date: 2010-08-04 19:23+0200\n"
"PO-Revision-Date: 2010-03-01 09:45+0100\n"
"Last-Translator: Mauricio Muñoz Lucero <real_mml@gmail.com>\n"
"PO-Revision-Date: 2010-12-13 19:26-0800\n"
"Last-Translator: Daniel E. Moctezuma <democtezuma@gmail.com>\n"
"Language-Team: Spanish <kde-i18n-doc@kde.org>\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 1.0\n"
"X-Generator: Lokalize 1.1\n"
"First-Translator: Javier Cuesta Alcocer <yovoya30ks@hotmail.com>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Language: es_AR\n"
@@ -128,8 +129,9 @@ msgid ""
"<html>KMess could not save the log for the chat with &quot;%1&quot;:<br /"
">The chat logs directory, &quot;%2&quot;, does not exist.</html>"
msgstr ""
"<html>KMess no pudo guardar el historial de esta conversación.<br />No "
"existe el directorio de historiales de conversación &quot;%1&quot;.</html>"
"<html>KMess no pudo guardar el historial de la conversación con "
"&quot;%1&quot;.<br />No "
"existe el directorio de historiales de conversación &quot;%2&quot;.</html>"
#: chat/chat.cpp:956
msgctxt "Message shown in the chat window (when the wink name is unknown)"
@@ -473,7 +475,6 @@ msgstr ""
"guardar los historiales."
#: chat/chatview.cpp:563
#, fuzzy
msgctxt "Chat log saving dialog, file type filter"
msgid ""
"*.html *.htm|Web Page (*.html)\n"
@@ -481,7 +482,6 @@ msgid ""
msgstr ""
"*.html *.htm|Página web (*.html)\n"
"*.txt|Documento de texto plano (*.txt)\n"
"*.xml|Documento XML (*.xml)"
#: chat/chatview.cpp:581
#, kde-format
@@ -2050,7 +2050,6 @@ msgid "[%1] %2 goes offline"
msgstr "[%1] %2 se desconectó"
#: kmessview.cpp:440
#, fuzzy
msgid "Search in contact list..."
msgstr "Buscar entre los contactos..."
@@ -2157,7 +2156,7 @@ msgstr "Presione aquí para cambiar su seudónimo"
#: kmessview.cpp:1845
msgctxt "Default personal message shown in the contact list"
msgid "[i]Click to set a personal message[/i]"
msgstr ""
msgstr "[i]Presione aquí para definir un mensale personal[/i]"
#: kmessview.cpp:1846
msgctxt "Default personal message tooltip"
@@ -2196,14 +2195,16 @@ msgstr[0] "%1 nuevo mensaje de correo electrónico"
msgstr[1] "%1 nuevos mensajes de correo electrónico"
#: kmessview.cpp:2253
#, fuzzy
msgid "Show contacts what you are listening to (click to disable)"
msgstr "Mostrarle a mis contactos la &canción que estoy escuchando"
msgstr ""
"Mostrarle a mis contactos la canción que estoy escuchando (presione para "
"deshabilitar)"
#: kmessview.cpp:2258
#, fuzzy
msgid "Show contacts what you are listening to (click to enable)"
msgstr "Mostrarle a mis contactos la &canción que estoy escuchando"
msgstr ""
"Mostrarle a mis contactos la canción que estoy escuchando (presione para "
"habilitar)"
#: kmessviewdelegate.cpp:298
#, kde-format
@@ -2881,8 +2882,10 @@ msgstr ""
"contacto en la ventana de conversacion"
#: main.cpp:182
#, fuzzy
msgid "Internationalization fixes, drag'n'drop of images into display pictures"
msgstr ""
"Correcciones a la internacionalización, drag'n'drop de imágenes para mostrar"
#: main.cpp:182
msgid "Marco Mentasti"
@@ -2890,7 +2893,7 @@ msgstr "Marco Mentasti"
#: main.cpp:183
msgid "Francesco Nwokeka"
msgstr ""
msgstr "Francesco Nwokeka"
#: main.cpp:183
msgid "Now Listening toggle button above the contact list."
@@ -2969,12 +2972,14 @@ msgstr "¿Su nombre aquí?"
#: main.cpp:197 rc.cpp:1
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Juan Pablo González Tognarelli,Manuel Ramírez,Guillermo Arana"
msgstr ""
"Juan Pablo González Tognarelli,Manuel Ramírez,Guillermo Arana,Daniel E. "
"Moctezuma"
#: main.cpp:198
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your email addresses"
msgstr ",,elgui02@gmail.com"
msgstr ",,elgui02@gmail.com,democtezuma@gmail.com"
#: main.cpp:204
msgid "Do not show the contact list window initially"
@@ -4137,9 +4142,8 @@ msgid "Contact changed status"
msgstr ""
#: notification/macnotification.cpp:66
#, fuzzy
msgid "You received a new e-mail message"
msgstr "%1 nuevo mensaje de correo electrónico"
msgstr "Ha recibido un nuevo correo electrónico"
#: notification/macnotification.cpp:72
msgid "A contact nudged you!"
@@ -4169,9 +4173,8 @@ msgid "A contact changed status"
msgstr ""
#: notification/macnotification.cpp:107
#, fuzzy
msgid "KMess notification"
msgstr "Icono de KMess"
msgstr "Notificaciones de KMess"
#: notification/newemailnotification.cpp:92
#, kde-format
@@ -4196,32 +4199,32 @@ msgid "Docking in System Tray"
msgstr "Minimizado en la bandeja de sistema"
#: notification/newsystemtraywidget.cpp:205
#, fuzzy, kde-format
#, kde-format
msgctxt ""
"Tray icon text tooltip when connected, %1 is the friendly name, %2 is the "
"status"
msgid "Connected as %1 (%2)"
msgstr "Conectando a %1, puerto %2"
msgstr "Conectado como %1 (%2)"
#: notification/newsystemtraywidget.cpp:209
#, fuzzy, kde-format
#, kde-format
msgctxt ""
"Tray icon HTML tooltip when connected, %1 is the friendly name, %2 is the "
"status"
msgid "<p>Connected as:<br/><b>%1</b> (%2)</p>"
msgstr "<br><b>%1</b> (%2)%3"
msgstr "<p>Conectado como:<br/><b>%1</b> (%2)</p>"
#: notification/newsystemtraywidget.cpp:216
#, fuzzy
msgctxt "Tray icon text tooltip when not connected"
msgid "Not connected"
msgstr "Conectado"
msgstr "No conectado"
#: notification/newsystemtraywidget.cpp:219
#, fuzzy
msgctxt "Tray icon HTML tooltip when not connected"
msgid "<p>Not connected</p>"
msgstr "<p>Se ha perdido la conexión con la red.</p>"
msgstr "<p>No conectado</p>"
#: notification/notificationmanager.cpp:120
msgctxt "Button text for KDE notification boxes"
@@ -4901,9 +4904,8 @@ msgstr "Filtro de historial"
#. i18n: file: dialogs/chathistorydialog.ui:83
#. i18n: ectx: property (text), widget (QLabel, label_)
#: rc.cpp:113
#, fuzzy
msgid "Chat date:"
msgstr "Estilo de &conversación:"
msgstr "Fecha de la conversación:"
#. i18n: file: dialogs/contactaddeduserdialog.ui:52
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
+42 -64
View File
@@ -4,21 +4,21 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Daniel E. Moctezuma <shinsen27@gmail.com>, 2009, 2010.
# Daniel E. Moctezuma <democtezuma@gmail.com>, 2009, 2010.
msgid ""
msgstr ""
"Project-Id-Version: ja\n"
"Report-Msgid-Bugs-To: http://www.kmess.org/board/\n"
"POT-Creation-Date: 2010-08-04 19:23+0200\n"
"PO-Revision-Date: 2010-07-07 20:43-0700\n"
"Last-Translator: Daniel E. Moctezuma <shinsen27@gmail.com>\n"
"Language-Team: 日本語 <Kdeveloper@kde.gr.jp>\n"
"PO-Revision-Date: 2010-12-28 00:30-0800\n"
"Last-Translator: Daniel E. Moctezuma <democtezuma@gmail.com>\n"
"Language-Team: Japanese <Kdeveloper@kde.gr.jp>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Lokalize 1.0\n"
"X-Generator: Lokalize 1.1\n"
#: account.cpp:45 account.cpp:755
msgid "I am away from my computer"
@@ -110,13 +110,13 @@ msgid "%1 (This message was sent automatically)"
msgstr "%1 (このメッセージは自動的に送信されました)"
#: chat/chat.cpp:821
#, fuzzy, kde-format
#, kde-format
msgid ""
"<html>KMess could not save the log for the chat with &quot;%1&quot;:<br /"
">The chat logs directory, &quot;%2&quot;, does not exist.</html>"
msgstr ""
"<html>KMess はの会話のチャット・ログを保存できませんでした:<br/>&quot;"
"%1&quot; のチャット・ログのディレクトリは存在しません。</html>"
"<html>KMess は &quot;%1&quot; さんとの会話のチャット・ログを保存できませんでした:<br/>&quot;"
"%2&quot; のチャット・ログのディレクトリは存在しません。</html>"
#: chat/chat.cpp:956
msgctxt "Message shown in the chat window (when the wink name is unknown)"
@@ -133,8 +133,7 @@ msgstr "&quot;%1&quot; のウインクを送信しました!"
msgid ""
"The chat has been disabled because you are no longer connected to the Live "
"Messenger server."
msgstr ""
"Live Messengerのサーバにもう接続していませんからチャットが無効にされました。"
msgstr "Live Messengerのサーバにもう接続していませんからチャットが無効にされました。"
#: chat/chat.cpp:1157
msgctxt "Warning message shown in chat"
@@ -155,8 +154,7 @@ msgstr ""
msgctxt "Warning message shown in chat, %1 is the contact's friendly name"
msgid ""
"%1 has sent you a voice clip, but KMess does not support voice clips yet."
msgstr ""
"%1 さんからボイスクリップを受信しましたがその機能はまだサポートしていません。"
msgstr "%1 さんからボイスクリップを受信しましたがその機能はまだサポートしていません。"
#: chat/chat.cpp:1194
#, kde-format
@@ -178,8 +176,7 @@ msgstr "知り合いは手書きメッセージをサポートしていません
msgctxt "Warning message shown in chat, %1 is the contact's friendly name"
msgid ""
"%1 has sent you a Live Messenger feature that KMess does not support yet."
msgstr ""
"%1 さんから KMess がまだサポートしないLive Messengerの機能を受信しました。"
msgstr "%1 さんから KMess がまだサポートしないLive Messengerの機能を受信しました。"
#: chat/chat.cpp:1245
#, kde-format
@@ -347,8 +344,7 @@ msgstr "%2 さんにこのメッセージの配信に失敗しました:<br/>%
msgid ""
"The file &quot;%1&quot; could not be found on your computer, and the "
"download failed."
msgstr ""
"&quot;%1&quot; のファイルは見つからなくて、ダウンロードに失敗しました。"
msgstr "&quot;%1&quot; のファイルは見つからなくて、ダウンロードに失敗しました。"
#: chat/chat.cpp:1649
#, kde-format
@@ -453,7 +449,6 @@ msgstr ""
"保存しているフォルダで書き込み許可があるのを検証してください。"
#: chat/chatview.cpp:563
#, fuzzy
msgctxt "Chat log saving dialog, file type filter"
msgid ""
"*.html *.htm|Web Page (*.html)\n"
@@ -461,7 +456,6 @@ msgid ""
msgstr ""
"*.html *.htm|Web Page (*.html)\n"
"*.txt|Plain Text Document (*.txt)\n"
"*.xml|XML Document (*.xml)"
#: chat/chatview.cpp:581
#, kde-format
@@ -645,7 +639,7 @@ msgstr "フォント(&F)"
#: chat/chatwindow.cpp:538
msgid "Font &Color"
msgstr "フォンの色(&C)"
msgstr "フォンの色(&C)"
#: chat/chatwindow.cpp:539
msgid "C&lear Chat Window"
@@ -701,16 +695,14 @@ msgstr "不明なコマンド"
#: chat/chatwindow.cpp:1548
msgctxt "Error message shown in chat"
msgid "Failed to send the handwritten message: the contacts do not support it."
msgstr ""
"手書きのメッセージの送信に失敗しました:知り合いはサポートしていません。"
msgstr "手書きのメッセージの送信に失敗しました:知り合いはサポートしていません。"
#: chat/chatwindow.cpp:1586
msgctxt "Error message shown in chat"
msgid ""
"Failed to send the handwritten message: an error has occurred while creating "
"it."
msgstr ""
"%1 さんに手書きのメッセージの送信に失敗しました:作成中エラーが発生しました。"
msgstr "%1 さんに手書きのメッセージの送信に失敗しました:作成中エラーが発生しました。"
#: chat/chatwindow.cpp:1867
msgctxt "Chat window caption, without contact name"
@@ -1708,8 +1700,7 @@ msgid ""
msgid_plural ""
"Waiting %1 seconds before reconnection...<br /><a href='%2'>Reconnect now!</"
"a>"
msgstr[0] ""
"再接続する前に%1秒を待っています...<br /><a href='%2'>すぐに再接続!</a>"
msgstr[0] "再接続する前に%1秒を待っています...<br /><a href='%2'>すぐに再接続!</a>"
#: initialview.cpp:662
msgctxt "Button label"
@@ -1734,8 +1725,7 @@ msgstr "有効なメールアドレスを入力してください"
#: kmess.cpp:218
#, kde-format
msgid "<html>The contact <b>%1</b> is already in your contact list.</html>"
msgstr ""
"<html><b>%1</b> の知り合いはあなたのコンタクトリストに既にいます。</html>"
msgstr "<html><b>%1</b> の知り合いはあなたのコンタクトリストに既にいます。</html>"
#: kmess.cpp:218
msgid "Contact Information"
@@ -1908,7 +1898,7 @@ msgstr "検索バーを表示(&S)"
#: kmessinterface.cpp:177
msgid "Show &Empty Groups"
msgstr "空グループを表示(&G)"
msgstr "空グループを表示(&G)"
#: kmessinterface.cpp:178
msgid "&Display Pictures Size"
@@ -2002,7 +1992,6 @@ msgid "[%1] %2 goes offline"
msgstr "[%1] %2 サインアウトしました"
#: kmessview.cpp:440
#, fuzzy
msgid "Search in contact list..."
msgstr "知り合いの検索..."
@@ -2828,7 +2817,7 @@ msgstr "Francesco Nwokeka"
#: main.cpp:183
msgid "Now Listening toggle button above the contact list."
msgstr ""
msgstr "コンタクトリストの上の「今聴いてる曲名を表示」のトグルボタン。"
#: main.cpp:186
msgid "Inspiration and assorted code"
@@ -3108,8 +3097,7 @@ msgstr "招待が中止されました。内部エラーが発生しました。
#: network/applications/mimeapplication.cpp:170
msgid "The invitation was aborted. Timeout while waiting for user to accept."
msgstr ""
"招待が中止されました。ユーザの承諾を待ちながら、タイムアウトが発生しました。"
msgstr "招待が中止されました。ユーザの承諾を待ちながら、タイムアウトが発生しました。"
#: network/applications/mimeapplication.cpp:175
msgid "The invitation was aborted. Timeout while waiting for file data."
@@ -3200,8 +3188,7 @@ msgstr ""
#: network/applications/p2papplication.cpp:3499
#: network/applications/p2papplication.cpp:3583
msgid "The invitation was cancelled. A timeout occurred waiting for data."
msgstr ""
"招待がキャンセルされました。データを待ちながら、タイムアウトが発生しました。"
msgstr "招待がキャンセルされました。データを待ちながら、タイムアウトが発生しました。"
#: network/applications/p2papplicationbase.cpp:622
#: network/applications/p2papplicationbase.cpp:1045
@@ -3214,8 +3201,7 @@ msgstr "転送に失敗しました。"
#: network/applications/p2papplicationbase.cpp:1030
msgid "The transfer failed. Timeout while waiting for user to accept."
msgstr ""
"転送に失敗しました。ユーザの承諾を待ちながら、タイムアウトが発生しました。"
msgstr "転送に失敗しました。ユーザの承諾を待ちながら、タイムアウトが発生しました。"
#: network/applications/p2papplicationbase.cpp:1049
msgid "The transfer failed. An internal error occured."
@@ -3359,15 +3345,13 @@ msgstr "知り合いは許可及び禁止リストに追加できません"
msgid ""
"The group name is already present in your contact list. Please use a "
"different name"
msgstr ""
"グループ名はコンタクトリストに既にあります。他の名前を入力してください。"
msgstr "グループ名はコンタクトリストに既にあります。他の名前を入力してください。"
#: network/msnconnection.cpp:437
msgid ""
"Your contact list has too many groups; you are allowed to only have at most "
"30"
msgstr ""
"コンタクトリストはたくさんのグループがあります。最大のグループ数は30つです。"
msgstr "コンタクトリストはたくさんのグループがあります。最大のグループ数は30つです。"
#: network/msnconnection.cpp:441
msgid "This group cannot be changed"
@@ -3379,7 +3363,7 @@ msgstr "知り合いはこのグループに追加していません"
#: network/msnconnection.cpp:450
msgid "This group is not empty"
msgstr "グループは空ではありません"
msgstr "グループは空ではありません"
#: network/msnconnection.cpp:454
msgid "The group name is too long; it cannot be longer than 61 characters"
@@ -3400,7 +3384,7 @@ msgstr "無効なグループ"
#: network/msnconnection.cpp:467
msgid "Empty domain"
msgstr "空きドメイン"
msgstr "ドメインが指定されていません"
#: network/msnconnection.cpp:471
msgid "Wrong ADL command format"
@@ -3499,8 +3483,7 @@ msgstr "不良 USR チケット"
#: network/msnconnection.cpp:576
msgid "Error accessing contact list, try again later"
msgstr ""
"コンタクトリストにアクセスできませんでした。後でもう一度試してください。"
msgstr "コンタクトリストにアクセスできませんでした。後でもう一度試してください。"
#: network/msnconnection.cpp:585
msgid ""
@@ -3774,8 +3757,7 @@ msgstr ""
#: network/msnsocketbase.cpp:135
msgctxt "Dialog box message"
msgid "Enter your username and password to access the network proxy."
msgstr ""
"ネットワークプロキシに接続するためにユーザ名とパスワードを入力してください。"
msgstr "ネットワークプロキシに接続するためにユーザ名とパスワードを入力してください。"
#: network/msnsockethttp.cpp:691
#, kde-format
@@ -3819,8 +3801,7 @@ msgctxt "Error message"
msgid ""
"The specified email address, \"%1\", does not belong to a Live Messenger "
"account!"
msgstr ""
"入力したメールアドレス \"%1\" は、Live Messengerのアカウントに属しません!"
msgstr "入力したメールアドレス \"%1\" は、Live Messengerのアカウントに属しません!"
#: network/soap/addressbookservice.cpp:853
#: network/soap/addressbookservice.cpp:876
@@ -4473,8 +4454,7 @@ msgctxt "Feedback dialog text, text to disallow feature requests"
msgid ""
"Please, do not ask for new features: this kind of request will be ignored."
"<br/>"
msgstr ""
"新しい機能を尋ねないでください:そのようなリクエストは無視します。<br/>"
msgstr "新しい機能を尋ねないでください:そのようなリクエストは無視します。<br/>"
#: utils/likeback/likebackdialog.cpp:183
#, kde-format
@@ -4728,7 +4708,7 @@ msgstr "チャット履歴のフィルタ"
#: rc.cpp:113
#, fuzzy
msgid "Chat date:"
msgstr "チャットスタイル(&C):"
msgstr "チャットの日付:"
#. i18n: file: dialogs/contactaddeduserdialog.ui:52
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
@@ -4966,8 +4946,9 @@ msgstr "送信"
#. i18n: file: dialogs/networkwindow.ui:132
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: rc.cpp:248
#, fuzzy
msgid "Command payload (can be empty):"
msgstr "コマンドのペイロード(空きになれる):"
msgstr "コマンドのペイロード(指定しないでもいい):"
#. i18n: file: dialogs/transferentry.ui:196
#. i18n: ectx: property (text), widget (KUrlLabel, openLabel_)
@@ -5021,8 +5002,7 @@ msgstr ""
#: rc.cpp:277
msgid ""
"Enter here the email address of your registered Passport or Live account"
msgstr ""
"登録したパスポートまたはLiveアカウントのメールアドレスを入力してください。"
msgstr "登録したパスポートまたはLiveアカウントのメールアドレスを入力してください。"
#. i18n: file: initialview.ui:195
#. i18n: ectx: property (text), widget (QLabel, TextLabel3)
@@ -5085,8 +5065,7 @@ msgstr "自動的にサインイン"
#: rc.cpp:313
msgid ""
"Click this button to start using KMess, or to cancel a connection attempt"
msgstr ""
"このボタンをクリックして、KMess を使用するまたは接続の試しをキャンセルする。"
msgstr "このボタンをクリックして、KMess を使用するまたは接続の試しをキャンセルする。"
#. i18n: file: initialview.ui:444
#. i18n: ectx: property (text), widget (KUrlLabel, newAccountLabel_)
@@ -5507,8 +5486,7 @@ msgstr "チャット履歴を有効にする"
msgid ""
"If enabled, KMess additionaly saves your chat logs as HTML or plain text "
"files"
msgstr ""
"有効にすると、チャット履歴は HTML またはプレーンテキストとして保存します"
msgstr "有効にすると、チャット履歴は HTML またはプレーンテキストとして保存します"
#. i18n: file: settings/chatloggingpage.ui:39
#. i18n: ectx: property (title), widget (QGroupBox, saveChatsToFileCheckBox_)
@@ -5663,7 +5641,7 @@ msgstr "年、月、日"
#. i18n: ectx: property (toolTip), widget (QRadioButton, singleDirectoryRadioButton_)
#: rc.cpp:597
msgid "Place all saved chat logs directly in the directory specified below"
msgstr ""
msgstr "チャット履歴は以下の指定するディレクトリを保存"
#. i18n: file: settings/chatloggingpage.ui:227
#. i18n: ectx: property (whatsThis), widget (QRadioButton, singleDirectoryRadioButton_)
@@ -5754,11 +5732,12 @@ msgstr "チャットウィンドウでウインクを表示するのを有効に
#. i18n: file: settings/chatstylepage.ui:246
#. i18n: ectx: property (whatsThis), widget (QCheckBox, showWinksCheckBox_)
#: rc.cpp:648
#, fuzzy
msgid ""
"If enabled, winks you send or receive will be displayed in the chat window. "
"Please note that in order to use this feature, you need to have a working "
"Flash-plugin installed."
msgstr ""
msgstr "有効にすると、チャットウィンドウに送信するまたは受信するウインクを表示します(Flash プラグインが必要です)。"
#. i18n: file: settings/chatstylepage.ui:249
#. i18n: ectx: property (text), widget (QCheckBox, showWinksCheckBox_)
@@ -6122,11 +6101,11 @@ msgstr "カスタムコマンド(&S)"
#. i18n: file: settings/miscellaneouspage.ui:247
#. i18n: ectx: property (whatsThis), widget (QLineEdit, customMailClientEdit_)
#: rc.cpp:842 rc.cpp:877
#, no-c-format
#, fuzzy, no-c-format
msgid ""
"Specify the path of a program to use to open links; a '%u' here will be "
"replaced with the links' URL."
msgstr ""
msgstr "ハイパーリンクを開くプログラムを指定できます。URL は '%u' として置き換えます。"
#. i18n: file: settings/miscellaneouspage.ui:126
#. i18n: ectx: property (text), widget (QLabel, customBrowserInfo_)
@@ -6161,8 +6140,7 @@ msgstr "アカウントがサポートしたら、Live Mailを使う(&L)"
#. i18n: ectx: property (toolTip), widget (QRadioButton, useKDEMailClientRadio_)
#: rc.cpp:858
msgid "Choose this option to use the email client used by the rest of KDE."
msgstr ""
"このオプションを選択して、KDE で使っているメールクライアントを使います。"
msgstr "このオプションを選択して、KDE で使っているメールクライアントを使います。"
#. i18n: file: settings/miscellaneouspage.ui:170
#. i18n: ectx: property (text), widget (QRadioButton, useKDEMailClientRadio_)
+3 -1
View File
@@ -30,6 +30,7 @@ SET(kmess_SOURCES
dialogs/awaymessagedialog.cpp
dialogs/chathistorydialog.cpp
dialogs/contactaddeduserdialog.cpp
dialogs/contactaddeduserwidget.cpp
dialogs/contactentry.cpp
dialogs/contactpropertiesdialog.cpp
dialogs/invitedialog.cpp
@@ -101,6 +102,7 @@ SET(kmess_SOURCES
utils/xautolock.cpp
utils/xmlfunctions.cpp
utils/gradientelidelabel.cpp
utils/faderwidget.cpp
account.cpp
accountaction.cpp
accountsmanager.cpp
@@ -128,7 +130,7 @@ SET(kmess_UI_FILES
dialogs/addemoticondialog.ui
dialogs/awaymessagedialog.ui
dialogs/chathistorydialog.ui
dialogs/contactaddeduserdialog.ui
dialogs/contactaddeduserwidget.ui
dialogs/transferentry.ui
dialogs/transferwindow.ui
dialogs/contactentry.ui
+1 -1
View File
@@ -970,7 +970,7 @@ void ChatView::slotShowContextMenu( const QString &clickedUrl, const QPoint &poi
}
else
{
urlAction = new KAction( KIcon( "launch" ), i18n("Visit &Link"), this );
urlAction = new KAction( KIcon( "document-open-remote" ), i18n("Visit &Link"), this );
connect( urlAction, SIGNAL(triggered(bool)), this, SLOT(slotVisitAddress()) );
contextMenu->addAction( urlAction );
+61 -88
View File
@@ -1,9 +1,11 @@
/***************************************************************************
contactaddeduserdialog.cpp - description
contactaddeduserdialog.cpp
-------------------
begin : Sun Apr 14 2002
copyright : (C) 2002 by Mike K. Bennett
email : mkb137b@hotmail.com
copyright : (C) 2010 by Timo Tambet
email : ttambet@gmail.com
***************************************************************************/
/***************************************************************************
@@ -16,11 +18,8 @@
***************************************************************************/
#include "contactaddeduserdialog.h"
#include "../contact/contact.h"
#include "../model/contactlist.h"
#include "../contact/group.h"
#include "../currentaccount.h"
#include "../kmessdebug.h"
#include "contactaddeduserwidget.h"
#include "../utils/kmessconfig.h"
@@ -28,73 +27,38 @@
/**
* Constructor
*
* The dialog is instantly shown as modal when the class is instantiated.
* This KDialog creates a QTabWidget which holds ContactAddedUserWidget instances. New
* instances can be added by calling addTab().
*
* @param contactHandle Reference to the handle of the contact that has added you
* @param contactFriendlyName The friendly name of the contact
*/
ContactAddedUserDialog::ContactAddedUserDialog( const QString &contactHandle, const QString &contactFriendlyName )
: KDialog()
, Ui::ContactAddedUserDialog()
, contactHandle_( contactHandle )
ContactAddedUserDialog::ContactAddedUserDialog( const QString& contactHandle, const QString& contactFriendlyName, QWidget* parent )
: KDialog(parent)
{
// Load the ui file in a main qwidget
tabWidget_ = new QTabWidget( this );
setMainWidget( tabWidget_ );
setObjectName( "ContactAddedUser" );
QWidget *mainWidget = new QWidget( this );
setupUi( mainWidget );
setMainWidget( mainWidget );
// Let the dialog destroy itself when it's done
setAttribute( Qt::WA_DeleteOnClose );
//adjust or restore saved size
adjustSize();
restoreDialogSize( KMessConfig::instance()->getGlobalConfig( "ContactAddedUserDialog" ) );
setButtons(KDialog::Close);
restoreDialogSize( KMessConfig::instance()->getGlobalConfig( "ContactAddedUserDialog" ));
// Update the window properties
setCaption( i18n( "You have been added by someone" ) );
// Update the window properties
setWindowTitle( i18n( "You have been added by someone" ));
tabWidget_->setTabsClosable(true);
// Set up the label
if( contactHandle == contactFriendlyName )
{
messageLabel_->setText( i18n( "%1\nhas added you to his or her contact list."
, contactHandle ) );
}
else
{
messageLabel_->setText( i18n( "%1 (%2)\nhas added you to his or her contact list."
, contactFriendlyName
, contactHandle ) );
}
addTab( contactHandle, contactFriendlyName );
// if they're already a friend, ie in the contact list, don't allow the "add" option to
// be selected. only options should be to allow or block.
Contact *c = CurrentAccount::instance()->getContactList()->getContactByHandle( contactHandle );
if ( c && c->isFriend() )
{
addContactOption_->setEnabled( false );
}
// Fill up the groups list from the contactlist data
QList<Group*> groupList( CurrentAccount::instance()->getContactList()->getGroupList() );
QListWidgetItem *item;
foreach( const Group *group, groupList )
{
if( ! group->isSpecialGroup() )
{
item = new QListWidgetItem( group->getName(), groupList_ );
// Set the groupId in the item's data, to retrieve it later
item->setData( Qt::UserRole, group->getId() );
item->setFlags( Qt::ItemIsUserCheckable | Qt::ItemIsEnabled );
item->setCheckState( Qt::Unchecked );
}
}
connect( tabWidget_, SIGNAL( tabCloseRequested(int) ),
this, SLOT( slotCloseTab(int) ) );
}
/**
* @brief Destructor
*
@@ -108,56 +72,65 @@ ContactAddedUserDialog::~ContactAddedUserDialog()
/**
* @brief Called when the user pressed the "ok" button
*
* @brief Called when a new contact request is received
*/
void ContactAddedUserDialog::accept()
void ContactAddedUserDialog::addTab( const QString& contactHandle, const QString& contactFriendlyName )
{
QStringList groupIds;
ContactAddedUserWidget *widget = new ContactAddedUserWidget( contactHandle, contactFriendlyName );
if( addContactOption_->isChecked() )
{
// Find all checked items in the list
QListWidgetItem *item;
for( int i = 0; i < groupList_->count(); i++ )
{
item = groupList_->item( i );
if( item->checkState() == Qt::Checked )
{
// Retrieve the group id from the item's data
groupIds.append( item->data( Qt::UserRole ).toString() );
}
}
connect( widget, SIGNAL( userChoice(QString,QStringList,int) ),
this, SIGNAL( userChoice(QString,QStringList,int) ) );
emit userChoice( contactHandle_, groupIds, ADD );
}
else if( allowContactOption_->isChecked() )
if ( contactFriendlyName != contactHandle )
{
emit userChoice( contactHandle_, groupIds, ALLOW );
tabWidget_->addTab( widget, contactFriendlyName );
}
else
{
emit userChoice( contactHandle_, groupIds, BLOCK );
tabWidget_->addTab( widget, contactHandle );
}
// Call parent
KDialog::accept();
connect( widget, SIGNAL( destroyed(QObject*) ),
this, SLOT ( slotTabDeleted() ) );
}
/**
* @brief Called when the user pressed the "cancel" button
*
*/
void ContactAddedUserDialog::reject()
* @brief Called when the user wants to ignore a request.
*
* Close the tab as if the user clicked "ignore the request" and confirmed.
*/
void ContactAddedUserDialog::slotCloseTab( int index )
{
// No choice for the moment, the question will be asked the next time
ContactAddedUserWidget* widget = static_cast<ContactAddedUserWidget*>( tabWidget_->widget( index ) );
if( ! widget )
{
return;
}
// Call parent
KDialog::reject();
widget->reject();
}
#include "contactaddeduserdialog.moc"
/**
* @brief Slot to destroy the window when all tabs are gone.
*
* When a tab gets destroyed - for whatever reason - check if
* any tabs are left. If none, the window has to be closed.
*/
void ContactAddedUserDialog::slotTabDeleted()
{
// When the destroyed() signal is sent out for a tab, it's not yet gone
// from the tab widget; so it still counts the tab, and we have to fix
// the count ourselves
int count = tabWidget_->count() - 1;
if( count <= 0 )
{
deleteLater();
}
}
+14 -25
View File
@@ -18,51 +18,40 @@
#ifndef CONTACTADDEDUSERDIALOG_H
#define CONTACTADDEDUSERDIALOG_H
#include "ui_contactaddeduserdialog.h"
#include <KDialog>
class QTabWidget;
/**
* The dialog for when someone has added the user to his or her contact list.
*
* @author Mike K. Bennett
* @author Mike K. Bennett, Timo Tambet
* @ingroup Dialogs
*/
class ContactAddedUserDialog : public KDialog, private Ui::ContactAddedUserDialog
class ContactAddedUserDialog : public KDialog
{
Q_OBJECT
public:
// Return types for the dialog
enum ReturnCode
{
ADD = 0
, ALLOW = 1
, BLOCK = 2
};
public:
// The constructor
ContactAddedUserDialog( const QString &contactHandle, const QString &contactFriendlyName );
ContactAddedUserDialog( const QString& contactHandle, const QString& contactFriendlyName, QWidget *parent = 0 );
// The destructor
virtual ~ContactAddedUserDialog();
void addTab( const QString& contactHandle, const QString& contactFriendlyName );
public slots: // Protected slots
// The user pressed the "ok" button
virtual void accept();
// The user pressed the "cancel" button
virtual void reject();
private: // Private properties
// The handle of the contact who has added the user
QString contactHandle_;
private slots:
void slotCloseTab( int index );
void slotTabDeleted();
signals:
// Notify of the choice made by the user
void userChoice( const QString &handle, const QStringList &groupsId, const int code );
void userChoice( const QString &handle, const QStringList &groupIds, const int code );
private:
QTabWidget *tabWidget_;
};
#endif
+154
View File
@@ -0,0 +1,154 @@
/***************************************************************************
contactaddeduserwidget.cpp - QWidget class with
QTabWidget
-------------------
begin : Friday Sept 24 2010
copyright : (C) 2010 by Timo Tambet
email : ttambet@gmail.com
copyright : (C) 2002 by Mike K. Bennett
email : mkb137b@hotmail.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) any later version. *
* *
***************************************************************************/
#include "contactaddeduserwidget.h"
#include "../contact/contact.h"
#include "../model/contactlist.h"
#include "../contact/group.h"
#include "../currentaccount.h"
#include "../kmessdebug.h"
#include "../utils/kmessconfig.h"
#include <kstandardguiitem.h>
/**
* Constructor
*
* This contains all the widgets for selecting what action to perform when a user adds you
* to their contact list. Multiple instances of this widget are added to the QTabWidget in
* ContactAddedUserDialog.
*
* @param contactHandle Reference to the handle of the contact that has added you
* @param contactFriendlyName The friendly name of the contact
*/
ContactAddedUserWidget::ContactAddedUserWidget( const QString& contactHandle, const QString& contactFriendlyName )
: QWidget()
, Ui::ContactAddedUserWidget()
, contactHandle_( contactHandle )
{
setupUi( this );
buttonbox->addButton( KStandardGuiItem::ok(), QDialogButtonBox::AcceptRole, this, SLOT( accept()));
buttonbox->addButton( KStandardGuiItem::discard(), QDialogButtonBox::RejectRole, this, SLOT( reject()));
if( contactHandle == contactFriendlyName )
{
messageLabel_->setText( i18n( "%1\nhas added you to his or her contact list."
, contactHandle ) );
}
else
{
messageLabel_->setText( i18n( "%1 (%2)\nhas added you to his or her contact list."
, contactFriendlyName
, contactHandle ) );
}
// if they're already a friend, ie in the contact list, don't allow the "add" option to
// be selected. only options should be to allow or block.
Contact *c = CurrentAccount::instance()->getContactList()->getContactByHandle( contactHandle );
if ( c && c->isFriend() )
{
addContactOption_->setEnabled( false );
}
// Fill up the groups list from the contactlist data
QList<Group*> groupList( CurrentAccount::instance()->getContactList()->getGroupList() );
QListWidgetItem *item;
foreach( const Group *group, groupList )
{
if( ! group->isSpecialGroup() )
{
item = new QListWidgetItem( group->getName(), groupList_ );
// Set the groupId in the item's data, to retrieve it later
item->setData( Qt::UserRole, group->getId() );
item->setFlags( Qt::ItemIsUserCheckable | Qt::ItemIsEnabled );
item->setCheckState( Qt::Unchecked );
}
}
}
/**
* @brief Destructor
*
*/
ContactAddedUserWidget::~ContactAddedUserWidget()
{
}
/**
* @brief Called when the user pressed the "ok" button
*
*/
void ContactAddedUserWidget::accept()
{
QStringList groupIds;
if( addContactOption_->isChecked() )
{
// Find all checked items in the list
QListWidgetItem *item;
for( int i = 0; i < groupList_->count(); i++ )
{
item = groupList_->item( i );
if( item->checkState() == Qt::Checked )
{
// Retrieve the group id from the item's data
groupIds.append( item->data( Qt::UserRole ).toString() );
}
}
emit userChoice( contactHandle_, groupIds, ADD );
}
else if( allowContactOption_->isChecked() )
{
emit userChoice( contactHandle_, groupIds, ALLOW );
}
else if ( blockContactOption_->isChecked() )
{
emit userChoice( contactHandle_, groupIds, BLOCK );
}
// The widget is not necessary anymore, delete it
deleteLater();
}
/**
* @brief Called when the user pressed the "cancel" button
*
*/
void ContactAddedUserWidget::reject()
{
// Communicate the user choice
emit userChoice( contactHandle_, QStringList(), IGNORE );
// The widget is not necessary anymore, delete it
deleteLater();
}
#include "contactaddeduserwidget.moc"
+69
View File
@@ -0,0 +1,69 @@
/***************************************************************************
contactaddeduserwidget.h -
-------------------
begin : Friday Sept 24 2010
copyright : (C) 2010 by Timo Tambet
email : ttambet@gmail.com
copyright : (C) 2002 - ... by Mike K. Bennett
email : mkb137b@hotmail.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) any later version. *
* *
***************************************************************************/
#ifndef CONTACTADDEDUSERWIDGET_H
#define CONTACTADDEDUSERWIDGET_H
#include "ui_contactaddeduserwidget.h"
/**
* The dialog for when someone has added the user to his or her contact list.
*
* @author Timo Tambet, Mike K. Bennett
* @ingroup Dialogs
*/
class ContactAddedUserWidget : public QWidget, private Ui::ContactAddedUserWidget
{
Q_OBJECT
public:
// Return types for the dialog
enum ReturnCode
{
ADD = 0
, ALLOW = 1
, BLOCK = 2
, IGNORE = 3
};
public:
// The constructor
ContactAddedUserWidget( const QString& contactHandle, const QString& contactFriendlyName );
// The destructor
virtual ~ContactAddedUserWidget();
public slots: // Protected slots
// The user pressed the "ok" button
void accept();
// The user pressed the "cancel" button
void reject();
private: // Private properties
// The handle of the contact who has added the user
QString contactHandle_;
signals:
// Notify of the choice made by the user
void userChoice( const QString &handle, const QStringList &groupsId, const int code );
};
#endif
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ContactAddedUserDialog</class>
<widget class="QWidget" name="ContactAddedUserDialog">
<class>ContactAddedUserWidget</class>
<widget class="QWidget" name="ContactAddedUserWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>417</width>
<height>363</height>
<width>472</width>
<height>389</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
@@ -23,7 +23,7 @@
<string/>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
<set>Qt::AlignHCenter|Qt::AlignTop</set>
</property>
<property name="wordWrap">
<bool>false</bool>
@@ -111,7 +111,7 @@
<item>
<widget class="QRadioButton" name="allowContactOption_">
<property name="text">
<string>&amp;Do not add this person, but allow him or her to see your status</string>
<string>&amp;Do not add this person, but allow him or her to see your status</string>
</property>
</widget>
</item>
@@ -141,10 +141,24 @@
</property>
</spacer>
</item>
<item>
<widget class="KDialogButtonBox" name="buttonbox">
<property name="standardButtons">
<set>QDialogButtonBox::NoButton</set>
</property>
</widget>
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
<customwidgets>
<customwidget>
<class>KDialogButtonBox</class>
<extends>QDialogButtonBox</extends>
<header>kdialogbuttonbox.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections>
<connection>
+40 -14
View File
@@ -31,6 +31,7 @@
#include "dialogs/awaymessagedialog.h"
#include "dialogs/chathistorydialog.h"
#include "dialogs/contactaddeduserdialog.h"
#include "dialogs/contactaddeduserwidget.h"
#include "dialogs/listexportdialog.h"
#include "dialogs/transferwindow.h"
#include "model/contactlist.h"
@@ -48,6 +49,7 @@
#include "utils/kmessshared.h"
#include "utils/nowlisteningclient.h"
#include "utils/richtextparser.h"
#include "utils/faderwidget.h"
#include "account.h"
#include "accountsmanager.h"
#include "accountaction.h"
@@ -88,6 +90,7 @@ KMess::KMess( QWidget *parent )
contactStatusNotification_(0),
newEmailNotification_(0),
addressBookNotifications_(0),
contactAddedUserDialog_(0),
idleTimer_(0),
initialized_(false),
initialView_(0),
@@ -538,12 +541,19 @@ void KMess::showContactAddedUserDialog( const QString handle )
#endif
// Show a dialog and let the user choose whether to add, allow, or block the contact.
ContactAddedUserDialog *dialog = new ContactAddedUserDialog( handle , handle );
if ( !contactAddedUserDialog_ )
{
contactAddedUserDialog_ = new ContactAddedUserDialog( handle , handle );
}
else
{
contactAddedUserDialog_->addTab( handle, handle );
}
connect( dialog, SIGNAL( userChoice(const QString&,const QStringList&,const int) ),
this, SLOT ( slotContactAddedUserDialogChoice(const QString&,const QStringList&,const int) ) );
connect( contactAddedUserDialog_, SIGNAL( userChoice( const QString&, const QStringList&, const int)),
this, SLOT( slotContactAddedUserDialogChoice( const QString&, const QStringList&, const int )));
dialog->show();
contactAddedUserDialog_->show();
}
@@ -1042,22 +1052,27 @@ void KMess::slotContactAddedUserDialogChoice( const QString &handle, const QStri
<< "Group list:" << groupIds;
#endif
switch( (ContactAddedUserDialog::ReturnCode) code )
switch( (ContactAddedUserWidget::ReturnCode) code )
{
case ContactAddedUserDialog::ADD:
case ContactAddedUserWidget::ADD:
// Add the contact to the allowed and friends lists
msnNotificationConnection_->addNewContact( handle, groupIds );
break;
case ContactAddedUserDialog::ALLOW:
case ContactAddedUserWidget::ALLOW:
// Add the contact to the allowed list
msnNotificationConnection_->allowContact( handle );
break;
case ContactAddedUserDialog::BLOCK:
case ContactAddedUserWidget::BLOCK:
// Add the contact to the blocked list.
msnNotificationConnection_->blockContact( handle );
break;
case ContactAddedUserWidget::IGNORE:
default:
// Action ignored
break;
}
}
@@ -1352,7 +1367,7 @@ bool KMess::initChatMaster()
connect( chatMaster_, SIGNAL( unblockContact(QString) ),
msnNotificationConnection_, SLOT ( unblockContact(QString) ) );
connect( chatMaster_, SIGNAL( addContact(QString) ),
msnNotificationConnection_, SLOT ( addNewContact(QString) ) );
msnNotificationConnection_, SLOT ( addNewContact(QString, const QStringList) ) );
connect( chatMaster_, SIGNAL( removeContact(QString,bool) ),
msnNotificationConnection_, SLOT ( removeContact(QString,bool) ) );
connect( chatMaster_, SIGNAL( allowContact(QString) ),
@@ -1880,11 +1895,6 @@ void KMess::switchViewToContactList()
view_->deleteLater();
view_ = 0;
}
if( initialView_ )
{
initialView_->deleteLater();
initialView_ = 0;
}
#ifdef KMESSTEST
KMESS_ASSERT( msnNotificationConnection_ != 0 );
@@ -1934,6 +1944,22 @@ void KMess::switchViewToContactList()
// Set it as the application's main widget
setCentralWidget( view_ );
bool nofade = KMessConfig::instance()->getGlobalConfig( "MainWindow" ).readEntry( "NoFadeEffect", false );
if ( ! nofade )
{
FaderWidget *fader = new FaderWidget( initialView_, view_ );
fader->setDuration( 1000 );
fader->resize( initialView_->size() );
fader->start();
}
if( initialView_ )
{
initialView_->deleteLater();
initialView_ = 0;
}
}
+4 -2
View File
@@ -23,10 +23,10 @@
#include <QList>
#include <QHash>
#include <QPointer>
#include <Solid/Networking>
// Forward declarations
class Account;
class AccountAction;
@@ -49,6 +49,7 @@ class KMessView;
class MsnNotificationConnection;
class NowListeningClient;
class QItemSelection;
class ContactAddedUserDialog;
@@ -228,6 +229,8 @@ class KMess : public KMessInterface
NewEmailNotification *newEmailNotification_;
// The notification object for when a new contact added
AddressBookNotifications *addressBookNotifications_;
// Contact added user dialog object
QPointer<ContactAddedUserDialog> contactAddedUserDialog_;
// A pointer to the instance of the current account
CurrentAccount *currentAccount_;
// The idle timer
@@ -246,7 +249,6 @@ class KMess : public KMessInterface
KMessView *view_;
// The DBus class
KMessDBus *dbus_;
};
#endif
+2 -2
View File
@@ -63,8 +63,8 @@
#define KMESSDEBUG_CONTACTBASE
#define KMESSDEBUG_CONTACTEXTENSION
#define KMESSDEBUG_CONTACTLIST
// #define KMESSDEBUG_CONTACTLISTMODELTEST
// #define KMESSDEBUG_CONTACTLISTMODEL
#define KMESSDEBUG_CONTACTLISTMODELTEST
#define KMESSDEBUG_CONTACTLISTMODEL
#define KMESSDEBUG_GROUP
+12 -5
View File
@@ -32,6 +32,7 @@
#include "contact/specialgroups.h"
#include "dialogs/addcontactdialog.h"
#include "dialogs/chathistorydialog.h"
#include "dialogs/contactaddeduserwidget.h"
#include "dialogs/contactaddeduserdialog.h"
#include "dialogs/transferentry.h"
#include "dialogs/transferwindow.h"
@@ -377,8 +378,10 @@ void KMessTest::testContactAddedUserDialog()
testGroupsAndContacts();
ContactAddedUserDialog *dialog = new ContactAddedUserDialog( "someone@hotmail.com", "SomeNickName" );
dialog->addTab( "someone1@hotmail.com", "SomeNickName1" );
connect( dialog, SIGNAL( userChoice(const QString&, const QStringList&, const int) ),
connect( dialog, SIGNAL( userChoice(const QString&, const QStringList&, const int) ),
this, SLOT ( testContactAddedUserDialogSlot(const QString&, const QStringList&, const int) ) );
dialog->show();
@@ -387,21 +390,25 @@ void KMessTest::testContactAddedUserDialog()
void KMessTest::testContactAddedUserDialogSlot( const QString &handle, const QStringList &groupsId, const int code )
{
switch( (ContactAddedUserDialog::ReturnCode) code )
switch( (ContactAddedUserWidget::ReturnCode) code )
{
case ContactAddedUserDialog::ADD:
case ContactAddedUserWidget::ADD:
kmDebug() << "result: Add contact" << handle;
kmDebug() << "result: Adding in groups" << groupsId;
break;
case ContactAddedUserDialog::ALLOW:
case ContactAddedUserWidget::ALLOW:
kmDebug() << "result: Allow contact" << handle;
break;
case ContactAddedUserDialog::BLOCK:
case ContactAddedUserWidget::BLOCK:
kmDebug() << "result: Block contact" << handle;
break;
case ContactAddedUserWidget::IGNORE:
kmDebug() << "result: Ignore request of contact" << handle;
break;
default:
kmDebug() << "result: undefined, contact:" << handle;
break;
+18 -2
View File
@@ -1452,7 +1452,15 @@ void KMessView::slotItemClicked( const QModelIndex &index, const bool accidental
return;
}
contactListView_->setExpanded( index, ! itemData[ "isExpanded" ].toBool() );
// Keep the group expansion state volatile while filtering (don't save it)
if( ! viewModel_->filterRegExp().isEmpty() )
{
contactListView_->setExpanded( index, ! contactListView_->isExpanded( index ) );
}
else
{
contactListView_->setExpanded( index, ! itemData[ "isExpanded" ].toBool() );
}
break;
@@ -1949,6 +1957,10 @@ void KMessView::slotSearchContact( const QString& searchFor )
searchEdit_->setStyleSheet( "" );
}
// True if the user was filtering for something and wanted to filter for something else;
// used to maintain the group expansion states while refining the search terms
bool isFilteringAgain = ( ! searchExpression.isEmpty() && ! viewModel_->filterRegExp().isEmpty() );
viewModel_->setFilterRegExp( searchExpression );
// Show or hide groups which do or do not contain results
@@ -1985,7 +1997,11 @@ void KMessView::slotSearchContact( const QString& searchFor )
bool isHidden = ( ! viewModel_->hasChildren( index ) );
contactListView_->setRowHidden( row, QModelIndex(), isHidden );
contactListView_->setExpanded( index, true );
if( ! isFilteringAgain )
{
contactListView_->setExpanded( index, true );
}
}
// When the search terms are removed, enable back all groups
else
+1 -1
View File
@@ -183,7 +183,7 @@ int main(int argc, char *argv[])
aboutData.addCredit( ki18n("Anastasios Bourazanis"), ki18n("Emoticon preview in settings page,clickable contact properties dialog text"), "a.brzns" "@" "gmail" "." "com");
aboutData.addCredit( ki18n("Marco Mentasti"), ki18n("Internationalization fixes, drag'n'drop of images into display pictures"), "marcomentasti" "@" "gmail" "." "com" );
aboutData.addCredit( ki18n("Francesco Nwokeka"), ki18n("Now Listening toggle button above the contact list."), "" );
aboutData.addCredit( ki18n("Timo Tambet"), ki18n("Contact Changed and Group Changed notifications"), "ttambet" "@" "gmail" "." "com" );
aboutData.addCredit( ki18n("Timo Tambet"), ki18n("Contact Changed and Group Changed notifications, contact added user dialog tabbing"), "ttambet" "@" "gmail" "." "com" );
// Other apps
aboutData.addCredit( ki18n("KMerlin (kmerlin.olsd.de)"), ki18n("Inspiration and assorted code"));
+10 -7
View File
@@ -173,6 +173,16 @@ bool ContactListModelFilter::filterAcceptsRow( int sourceRow, const QModelIndex&
return false;
}
// Manage contact searches: the list view sets the filter expression, and we use it here;
// however only contacts within their original group are shown
if( ! filterRegExp().isEmpty() )
{
isVisible = ( itemData[ "group" ] != SpecialGroups::ONLINE
&& itemData[ "group" ] != SpecialGroups::OFFLINE );
isVisible = isVisible && ( QSortFilterProxyModel::filterAcceptsRow( sourceRow, sourceParent ) );
break;
}
Status contactStatus = (Status) itemData[ "status" ].toInt();
// Contacts in special groups are always visible. Their group may be not, though.
@@ -212,13 +222,6 @@ bool ContactListModelFilter::filterAcceptsRow( int sourceRow, const QModelIndex&
break;
}
}
// Manage contact searches: the list view sets the filter expression, and we use it here
if( isVisible && ! filterRegExp().isEmpty() )
{
isVisible = ( QSortFilterProxyModel::filterAcceptsRow( sourceRow, sourceParent ) );
break;
}
}
break;
+8
View File
@@ -596,6 +596,11 @@ void MimeMessage::setBinaryBody(const QByteArray &data)
// Split a line between field and value
void MimeMessage::splitLine(QString& field, QString& value, const QString& line) const
{
if ( line.isEmpty() )
{
return;
}
int index;
index = line.indexOf(":");
if ( index >= 0 )
@@ -628,6 +633,9 @@ void MimeMessage::splitHead(QStringList& stringList, const QString& head) const
stringList = head.split("\n");
for( int i = 0; i < stringList.count(); i++ )
{
// special case for email headers (apparently?)
if ( stringList[i].startsWith( "\t" ) ) continue;
stringList[i] = stringList[i].trimmed();
}
}
+2 -6
View File
@@ -1029,16 +1029,12 @@ void MsnNotificationConnection::goOnline()
hash.insert( QString::number(ack), "INBOX" );
// Ask for compose URL
ack = sendCommand("URL", "COMPOSE");
ack = sendCommand("URL", "COMPOSE some.invalid@kmess.email" );
hash.insert( QString::number(ack), "COMPOSE" );
// Ask the personal profile URL
ack = sendCommand("URL", "PROFILE");
ack = sendCommand("URL", "PROFILE 0x" + QString::number( CurrentAccount::instance()->getLanguageCode().toInt(), 8 ) );
hash.insert( QString::number(ack), "PROFILE" );
// Ask the URL for change account info
ack = sendCommand("URL", "PERSON");
hash.insert( QString::number(ack), "PERSON" );
}
// Notify observers that the server is connected
+9 -3
View File
@@ -579,6 +579,9 @@ void AddressBookService::parseAddressBook( const QDomElement &body )
QString information;
QStringList guidList;
QString cid;
int blp = 0;
for( int index = 0; index < contactsNode.count(); index++ )
{
const QDomNode contact( contactsNode.item( index ) );
@@ -591,11 +594,10 @@ void AddressBookService::parseAddressBook( const QDomElement &body )
// Check if the contact type is Me: it has the information about personal profile
if( contactType == "Me" )
{
const QString cid( XmlFunctions::getNodeValue( contactInfo, "CID" ) );
cid = XmlFunctions::getNodeValue( contactInfo, "CID" );
// Search for "<annotations>...<Annotation><name>MSN.IM.BLP<name><value>VALUE<value><Annotation>.."
const QDomNodeList annotations( contactInfo.toElement().elementsByTagName( "Annotation" ) );
int blp = 0; // = 0 fixes compile time warning
for( int index2 = 0; index2 < annotations.count(); index2++ )
{
const QDomNode annotation( annotations.at( index2 ) );
@@ -608,7 +610,6 @@ void AddressBookService::parseAddressBook( const QDomElement &body )
}
}
emit gotPersonalInformation( cid, blp );
continue;
}
@@ -687,6 +688,11 @@ void AddressBookService::parseAddressBook( const QDomElement &body )
// Signal that the of address book has been parsed
emit gotAddressBookList( contacts );
// adam (16 Jan 11) - shifted the signal emit for this
// to after the address book is parsed. This prevents SOAP timeouts
// with Roaming Service requests for large contact lists.
emit gotPersonalInformation( cid, blp );
}
+23 -17
View File
@@ -351,9 +351,29 @@ void RoamingService::processProfileResult( const QDomElement &body )
const QDomNode expressionProfile( XmlFunctions::getNode( body, "GetProfileResponse/GetProfileResult/ExpressionProfile" ) );
QString fullPictureUrl( XmlFunctions::getNodeValue( expressionProfile, "StaticUserTilePublicURL" ) );
QString pictureLastModified( XmlFunctions::getNodeValue( expressionProfile, "Photo/DateModified" ) );
QString pictureName( XmlFunctions::getNodeValue( expressionProfile, "Photo/Name" ) );
// adam (23 Dec 10): if this node is missing, something is fubar with the profile.
// solution is to create a new one.
if ( expressionProfile.isNull() )
{
createProfile();
return;
}
const QDomNodeList streams( XmlFunctions::getNode( expressionProfile, "Photo" ).toElement().elementsByTagName( "DocumentStream" ) );
QString fullPictureUrl;
QString remotePictureHash;
for( int i = 0; i < streams.count(); i++ )
{
const QDomNode node( streams.at(i) );
QString name( XmlFunctions::getNodeValue( node, "DocumentStreamName" ) );
if ( name == "UserTileStatic" )
{
fullPictureUrl = XmlFunctions::getNodeValue( node, "PreAuthURL" );
break;
}
}
QString pictureLastModified( XmlFunctions::getNodeValue( expressionProfile, "DateModified" ) );
// This message also contains DisplayName
profileResourceId_ = XmlFunctions::getNodeValue( expressionProfile, "ResourceID" );
@@ -394,20 +414,6 @@ void RoamingService::processProfileResult( const QDomElement &body )
return;
}
// check if we don't have a picture with the same name (the msn server converts the image to jpeg and compresses it when storing,
// so the hash changes and kmess can't see that the image is actually the same as one he uploaded earlier)
const QString pictureDir( KMessConfig::instance()->getAccountDirectory( currentAccount->getHandle() ) + "/displaypics/" );
const QString localPicture( pictureDir + pictureName + ".png" ); // accountpage always saves the images in png format
if( QFile::exists( localPicture ) )
{
#ifdef KMESSDEBUG_ROAMINGSERVICE
kmDebug() << "Have a local picture with the same name (" << localPicture << "), not downloading display picture";
#endif
lastKnownDisplayPicturePath_ = localPicture;
currentAccount->setPicturePath( localPicture );
return;
}
// Check if the picture on the server is newer
const QString displayPicturePath( currentAccount->getPicturePath( false /* don't fallback to the kmess default pic */ ) );
QFileInfo info( displayPicturePath );
+128
View File
@@ -0,0 +1,128 @@
/***************************************************************************
faderwidget.h - smoothly fades one widget to reveal a second
based on the Qt "Fade-Effects" demo; updated to use a
QWidget source.
-------------------
begin : Wednesday 05 Jan 2011
copyright : (C) 2011 by Adam Goossens
email : adam.goossens@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) any later version. *
* *
***************************************************************************/
#include <QTimeLine>
#include <QPainter>
#include <QSize>
#include <stdint.h>
#include "../kmessdebug.h"
#include "faderwidget.h"
/**
* Construct a new FaderWidget.
*
* \arg begin is the source widget. A pixmap will be grabbed from this widget and will be
* used as the fading source.
*
* \arg parent must be a valid QWidget and should be the widget you are fading out to.
*
* @param begin Source widget which will "fade out"
* @param parent Widget which is being revealed.
*/
FaderWidget::FaderWidget( QWidget *begin, QWidget *parent )
: QWidget( parent )
{
timeline_ = new QTimeLine( 1000, this ); // 1sec fade by default
timeline_->setFrameRange( 1000, 0 );
connect( timeline_, SIGNAL( frameChanged( int ) ),
this, SLOT( update() ) );
KMESS_ASSERT( parent );
KMESS_ASSERT( begin );
resize( parent->size() );
setAttribute( Qt::WA_DeleteOnClose );
pixmap_ = QPixmap::grabWidget( begin );
}
/**
* Change the duration of the fade.
*
* The default is 1000ms (1sec)
* @param milliseconds Fade duration
*/
void FaderWidget::setDuration( uint16_t milliseconds )
{
if ( timeline_->state() == QTimeLine::Running )
{
kWarning() << "Cannot change duration whilst fade is running";
return;
}
timeline_->setDuration( milliseconds );
}
/**
* Start the fade effect.
*
* Calling this whilst the fade is already running has no effect.
*/
void FaderWidget::start()
{
if ( timeline_->state() == QTimeLine::Running )
{
kWarning() << "Fade is already running.";
return;
}
timeline_->start();
show();
}
/**
* Stop the fade effect.
*
* Calling this whilst already stopped has no effect.
*/
void FaderWidget::stop()
{
timeline_->stop();
}
/**
* Paint the grabbed pixmap with a given opacity over our parent widget.
*/
void FaderWidget::paintEvent( QPaintEvent * )
{
QPainter painter( this );
qreal frame = timeline_->currentFrame();
painter.setOpacity( frame / 1000 ); // 1000 frames possible
painter.drawPixmap( 0, 0, pixmap_ );
if ( frame <= 0 )
{
close();
}
}
#include "faderwidget.moc"
+60
View File
@@ -0,0 +1,60 @@
/***************************************************************************
faderwidget.h - smoothly fades one widget to reveal a second
based on the Qt "Fade-Effects" demo; updated to use a
QWidget source.
-------------------
begin : Wednesday 05 Jan 2011
copyright : (C) 2011 by Adam Goossens
email : adam.goossens@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) any later version. *
* *
***************************************************************************/
#ifndef FADERWIDGET_H
#define FADERWIDGET_H
#include <stdint.h>
#include <QWidget>
#include <QPixmap>
#include <QSize>
class QPaintEvent;
class QTimeLine;
/**
* A Fader Widget will fade out one widget to reveal another.
*
* It is (rather heavily) based on the Fade-Effects Qt demo, but updated to use
* a QWidget source rather than a solid colour.
*
* @author Adam Goossens (adam@kmess.org)
*/
class FaderWidget : public QWidget
{
Q_OBJECT
public:
FaderWidget( QWidget *begin, QWidget *parent = 0 );
void setDuration( uint16_t milliseconds );
void start();
void stop();
protected:
void paintEvent( QPaintEvent *event );
private:
QTimeLine *timeline_;
QPixmap pixmap_;
};
#endif
+4 -6
View File
@@ -139,13 +139,11 @@ QString KMessShared::createRequestFile( const QString &mailto, const QString &fo
return QString();
}
// this will have our (urlencoded) dodgy email address we used to satisfy URL COMPOSE
// at the initial login. replace it where we actually want it to go.
QString command( folder );
// Check if the user wants to send an email
if( ! mailto.isEmpty() )
{
command += "?mailto=1&to=" + mailto;
}
command = command.replace( "some.invalid%40kmess.email", mailto );
// Use the method into passport to compute the token
QString token( PassportLoginService::createHotmailToken( currentAccount->getToken( "Passport" ),