diff --git a/k3b.changes b/k3b.changes index 147e66e..03a59a3 100644 --- a/k3b.changes +++ b/k3b.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Thu Jul 23 12:59:15 CEST 2009 - beineri@opensuse.org + +- apply trunk diff (r1001450) when building on 11.2 + ------------------------------------------------------------------- Wed May 27 12:31:29 CEST 2009 - beineri@opensuse.org diff --git a/k3b.spec b/k3b.spec index b0679c7..66006a9 100644 --- a/k3b.spec +++ b/k3b.spec @@ -42,9 +42,10 @@ Group: Productivity/Multimedia/CD/Record Summary: A Universal CD and DVD Burning Application Requires: /usr/bin/cdrecord /usr/bin/mkisofs /usr/bin/cdrdao dvd+rw-tools Version: 1.66.0 -Release: 1 +Release: 2 # svn.kde.org/home/kde/trunk/extragear/multimedia/k3b Source0: k3b-1.66.0alpha2.tar.bz2 +Patch1: trunk.diff Patch2: kde41.diff BuildRoot: %{_tmppath}/%{name}-%{version}-build %kde4_runtime_requires @@ -82,7 +83,11 @@ Authors: %prep %setup -q -n k3b-%{version} +%if %suse_version > 1110 +%patch1 +%else %patch2 +%endif %build %cmake_kde4 -d build -- -DK3B_BUILD_K3BSETUP=OFF @@ -130,54 +135,3 @@ rm -rf $RPM_BUILD_ROOT /usr/%_lib/libk3bdevice.so %changelog -* Wed May 27 2009 beineri@opensuse.org -- update to 1.66 Alpha 2: many bugfixes -* Sun May 03 2009 cmorve69@yahoo.es -- Add support for Musepack/MPC -- Disable K3BSetup -* Thu Apr 23 2009 beineri@opensuse.org -- rename to k3b, update to 1.65.0 Alpha -* Sat Mar 21 2009 beineri@opensuse.org -- update to 4.2.1.svn942189 -* Wed Feb 25 2009 stbinner@suse.de -- update to 4.2.0.svn931376 -* Wed Feb 18 2009 stbinner@suse.de -- update to 4.2.0.svn927728 -* Sat Jan 24 2009 stbinner@suse.de -- update to 4.1.4.svn915827 -* Wed Jan 07 2009 stbinner@suse.de -- update to 4.1.4.svn907132 -* Tue Dec 16 2008 stbinner@suse.de -- update to 4.1.3.svn897517 -* Sat Nov 22 2008 stbinner@suse.de -- update to 4.1.3.svn887510 -* Fri Nov 07 2008 stbinner@suse.de -- update to 4.1.3.svn881374 -* Sat Sep 13 2008 stbinner@suse.de -- update to 4.1.1.svn860449 -* Fri Aug 22 2008 stbinner@suse.de -- update to 4.1.0.svn851044 -* Fri Jul 25 2008 stbinner@suse.de -- update to 4.1.0.svn837567 -* Wed Jul 16 2008 stbinner@suse.de -- update to 4.0.98.svn833153 -* Fri Jun 27 2008 dmueller@suse.de -- update to 4.0.84.svn825098 -* Tue Jun 03 2008 dmueller@suse.de -- update to 4.0.81.svn816194 -* Thu May 15 2008 dmueller@suse.de -- update to 4.0.74.svn808129 -* Wed May 07 2008 dmueller@suse.de -- update to 4.0.73.svn805196 -* Thu Apr 24 2008 dmueller@suse.de -- update to 4.0.71.svn800684 -* Fri Apr 18 2008 dmueller@suse.de -- update to 4.0.69.svn798537 -* Wed Apr 02 2008 dmueller@suse.de -- update to 4.0.68.svn792936 -* Fri Feb 15 2008 dmueller@suse.de -- update to 4.0.62.svn775117 -* Wed Nov 28 2007 dmueller@suse.de -- update to 3.96.0.svn742626 -* Thu Nov 01 2007 dmueller@suse.de -- update to 3.95.0.svn731749 diff --git a/trunk.diff b/trunk.diff new file mode 100644 index 0000000..c84c3c7 --- /dev/null +++ b/trunk.diff @@ -0,0 +1,4882 @@ +diff -ru CMakeLists.txt CMakeLists.txt +--- CMakeLists.txt 2009-05-26 20:43:38.000000000 +0200 ++++ CMakeLists.txt 2009-07-23 11:42:06.000000000 +0200 +@@ -6,7 +6,7 @@ + + ################## K3b version ################################ + set(K3B_VERSION_MAJOR 1) +-set(K3B_VERSION_MINOR 66) ++set(K3B_VERSION_MINOR 67) + set(K3B_VERSION_RELEASE 0) + set(K3B_VERSION_STRING "${K3B_VERSION_MAJOR}.${K3B_VERSION_MINOR}.${K3B_VERSION_RELEASE}") + +diff -ru k3bsetup/k3bsetup.desktop k3bsetup/k3bsetup.desktop +--- k3bsetup/k3bsetup.desktop 2009-05-26 16:22:58.000000000 +0200 ++++ k3bsetup/k3bsetup.desktop 2009-07-23 11:42:05.000000000 +0200 +@@ -1,12 +1,16 @@ + [Desktop Entry] + Encoding=UTF-8 + Comment=K3bSetup - modify permission for CD/DVD burning with K3b ++Comment[bg]=Настройване на K3b - промяна на правата за запис на CD/DVD ++Comment[da]=K3bSetup - ændr rettigheder til cd-/dvd-brænding med K3b + Comment[de]=K3b-Einrichtungsassistent - Zugriffsrechte zum Brennen mit K3b anpassen + Comment[es]=K3bSetup - modificar los permisos para la grabación de CD o DVD con K3b + Comment[et]=K3b seadistamine - võimalus muuta õigusi CD/DVD kirjutamiseks K3b-ga + Comment[fr]=K3bSetup - modification des droits d'accès pour la gravure de CD / DVD avec K3b ++Comment[it]=K3bSetup - modifica i permessi per CD/DVD per scrivere con K3b + Comment[km]=K3bSetup - កែប្រែ​សិទ្ធិ​សម្រាប់​ដុត​ស៊ីឌី/ឌីវីឌី​ដែល​មាន K3b + Comment[nb]=K3bSetup – endre tillatelser for CD-/DVD-brenning med K3b ++Comment[nds]=K3b-Inrichthölper - Verlöven för't Brennen vun CDs oder DVDs mit K3b ännern + Comment[nl]=K3bSetup - stelt de toegangsrechten in voor cd/dvd-branden met K3b + Comment[pt]=K3bSetup - modificar as permissões para a gravação de CDs/DVDs com o K3b + Comment[pt_BR]=Configurações Avançadas do K3b - modificar permissões para a queima de CD/DVD com o K3b +@@ -14,12 +18,17 @@ + Comment[sv]=Ställ in K3b: ändra rättigheter för att bränna cd/dvd med K3b + Comment[tr]=K3bSetup - K3b ile CD/DVD yazdırma izinlerini ayarlayın + Comment[uk]=K3bSetup — змініть права для запису КД/DVD у K3b ++Comment[x-test]=xxK3bSetup - modify permission for CD/DVD burning with K3bxx ++Comment[zh_TW]=K3bSetup - 變更 CD/DVD 燒錄的權限 + Exec=k3bsetup + Keywords=K3bSetup,k3bsetup ++Keywords[bg]=K3bSetup2,k3bsetup2,Настройване на K3b + Keywords[de]=K3b, Einrichtungsassistent, Rechte, Setup + Keywords[et]=K3bSetup,k3bsetup,k3b seadistamine ++Keywords[nds]=K3bSetup,k3bsetup,K3b-Inrichthölper + Keywords[pt_BR]=Configurações Avançadas do K3b,configurações avançadas do K3b + Keywords[sv]=Ställ in K3b,k3bsetup ++Keywords[x-test]=xxK3bSetup,k3bsetupxx + Name=K3bSetup + Name[bg]=Настройване на K3b + Name[de]=K3b-Einrichtungsassistent +@@ -62,6 +71,7 @@ + GenericName[he]=הגדרות צריבת CD ו DVD + GenericName[hne]=सीडी डीवीडी बर्निंग सेटअप + GenericName[hsb]=CD & DVD setup za palenje ++GenericName[it]=Impostazioni di scrittura per CD e DVD + GenericName[ja]=CD / DVD 作成の設定 + GenericName[km]=រៀបចំ​ការ​ដុត​ស៊ីឌី និង​ឌីវីឌី + GenericName[ko]=CD와 DVD 쓰기 설정 +@@ -85,3 +95,4 @@ + GenericName[uk]=Налаштування запису КД і DVD + GenericName[x-test]=xxCD & DVD Burning Setupxx + GenericName[zh_CN]=CD & DVD 刻录程序设置 ++GenericName[zh_TW]=CD 與 DVD 燒錄設定 +diff -ru kioslaves/videodvd/videodvd.desktop kioslaves/videodvd/videodvd.desktop +--- kioslaves/videodvd/videodvd.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ kioslaves/videodvd/videodvd.desktop 2009-07-23 11:42:06.000000000 +0200 +@@ -4,7 +4,7 @@ + URL=videodvd:/ + Icon=dvd_unmount + Name=Video DVD Browser +-Name[bg]=Браузър за видео DVD ++Name[bg]=Програма за преглед на видео DVD + Name[ca]=Navegador de DVDs de vídeo + Name[cs]=Prohlížeč Video DVD + Name[csb]=Przezérnik platów DVD Video +@@ -22,6 +22,7 @@ + Name[he]=דפדפן וידאו DVD + Name[hne]=वीडियो डीवीडी ब्राउजर + Name[hsb]=Wideo DVD Browser ++Name[it]=Navigatore DVD video + Name[ja]=ビデオ DVD ブラウザ + Name[km]=កម្មវិធី​រុករក​ឌីវីឌី​វីដេអូ + Name[ko]=비디오 DVD 탐색기 +@@ -44,6 +45,7 @@ + Name[uk]=Навігатор відео-DVD + Name[x-test]=xxVideo DVD Browserxx + Name[zh_CN]=视频 DVD 浏览器 ++Name[zh_TW]=影像 DVD 瀏覽器 + Open=false + X-KDE-TreeModule=Directory + X-KDE-KonqSidebarModule=konqsidebar_tree +diff -ru kioslaves/videodvd/videodvd.protocol kioslaves/videodvd/videodvd.protocol +--- kioslaves/videodvd/videodvd.protocol 2009-05-03 15:17:04.000000000 +0200 ++++ kioslaves/videodvd/videodvd.protocol 2009-07-23 11:42:06.000000000 +0200 +@@ -25,6 +25,7 @@ + Description[gl]=Un kioslave que permite copiar ficheiros desde un DVD de vídeo (incluindo a decifraxe) + Description[he]=עבד קלט/פלט של KDE המאפשר לקבצים להיות מועתקים מתקליטור וידאו של DVD (כולל פענוח) + Description[hsb]=kioslave, kiž zmóžni kopěrowanje datajow z Wideo-DVD (tež šifrowaneje) ++Description[it]=Un kioslave per permettere ai file di essere copiati da un DVD video (inclusa decifrazione) + Description[ja]=ビデオ DVD からファイルをコピーすることを可能にする kioslave (暗号解除も含む) + Description[km]=kioslave អនុញ្ញាត​ឲ្យ​ចម្លង​ឯកសារ​ពី​ឌីវីឌី​វីដេអូ (ដោយ​រួមបញ្ចូល​ការ​ឌិគ្រីប) + Description[ko]=비디오 DVD에서 파일을 복사하는 KIO 슬레이브 (암호화 해제 포함) +@@ -47,3 +48,4 @@ + Description[uk]=Підлеглий В/В, який дає змогу копіювати файли з відео-DVD (включаючи розшифровування) + Description[x-test]=xxA kioslave that allows files to be copied from a Video DVD (including decryption)xx + Description[zh_CN]=允许从视频 DVD(包括加密影碟)中复制文件的 kioslave ++Description[zh_TW]=允許檔案從影像 DVD 中(解壓並)複製出來的 kioslave +diff -ru libk3b/core/k3bglobals.cpp libk3b/core/k3bglobals.cpp +--- libk3b/core/k3bglobals.cpp 2009-05-27 11:58:34.000000000 +0200 ++++ libk3b/core/k3bglobals.cpp 2009-07-23 11:41:53.000000000 +0200 +@@ -34,7 +34,17 @@ + #include + #include + #include ++#if KDE_IS_VERSION(4,2,0) + #include ++#else ++#include ++#ifdef HAVE_SYS_STATVFS_H ++# include ++#endif ++#ifdef HAVE_SYS_VFS_H ++# include ++#endif ++#endif + + #include + #include +@@ -210,6 +220,7 @@ + + bool K3b::kbFreeOnFs( const QString& path, unsigned long& size, unsigned long& avail ) + { ++#if KDE_IS_VERSION(4,2,0) + KDiskFreeSpaceInfo fs = KDiskFreeSpaceInfo::freeSpaceInfo( path ); + if ( fs.isValid() ) { + size = fs.size()/1024; +@@ -219,6 +230,21 @@ + else { + return false; + } ++#else ++#ifdef HAVE_SYS_STATVFS_H ++ struct statvfs fs; ++ if( ::statvfs( QFile::encodeName(path), &fs ) == 0 ) { ++ unsigned long kBfak = fs.f_frsize/1024; ++ ++ size = fs.f_blocks*kBfak; ++ avail = fs.f_bavail*kBfak; ++ ++ return true; ++ } ++ else ++#endif ++ return false; ++#endif + } + + +diff -ru libk3b/core/k3bthreadjobcommunicationevent.cpp libk3b/core/k3bthreadjobcommunicationevent.cpp +--- libk3b/core/k3bthreadjobcommunicationevent.cpp 2009-03-23 09:47:00.000000000 +0100 ++++ libk3b/core/k3bthreadjobcommunicationevent.cpp 2009-07-23 11:41:53.000000000 +0200 +@@ -16,11 +16,8 @@ + + #include + +- +-K3b::ThreadJobCommunicationEvent::ThreadJobCommunicationEvent( int type ) +- : QEvent( QEvent::User ), +- m_type( type ), +- m_device( 0 ), ++K3b::ThreadJobCommunicationEvent::Data::Data() ++ : m_device( 0 ), + m_wantedMediaState( 0 ), + m_wantedMediaType( 0 ), + m_result( 0 ) +@@ -28,78 +25,69 @@ + } + + +-K3b::ThreadJobCommunicationEvent::~ThreadJobCommunicationEvent() +-{ +-} +- +- +-int K3b::ThreadJobCommunicationEvent::type() const +-{ +- return m_type; +-} + + +-K3b::Device::Device* K3b::ThreadJobCommunicationEvent::device() const ++K3b::Device::Device* K3b::ThreadJobCommunicationEvent::Data::device() const + { + return m_device; + } + + +-K3b::Device::MediaStates K3b::ThreadJobCommunicationEvent::wantedMediaState() const ++K3b::Device::MediaStates K3b::ThreadJobCommunicationEvent::Data::wantedMediaState() const + { + return m_wantedMediaState; + } + + +-K3b::Device::MediaTypes K3b::ThreadJobCommunicationEvent::wantedMediaType() const ++K3b::Device::MediaTypes K3b::ThreadJobCommunicationEvent::Data::wantedMediaType() const + { + return m_wantedMediaType; + } + + +-QString K3b::ThreadJobCommunicationEvent::message() const ++QString K3b::ThreadJobCommunicationEvent::Data::message() const + { + return m_text; + } + + +-QString K3b::ThreadJobCommunicationEvent::text() const ++QString K3b::ThreadJobCommunicationEvent::Data::text() const + { + return m_text; + } + + +-QString K3b::ThreadJobCommunicationEvent::caption() const ++QString K3b::ThreadJobCommunicationEvent::Data::caption() const + { + return m_caption; + } + + +-QString K3b::ThreadJobCommunicationEvent::yesText() const ++QString K3b::ThreadJobCommunicationEvent::Data::yesText() const + { + return m_yesText; + } + + +-QString K3b::ThreadJobCommunicationEvent::noText() const ++QString K3b::ThreadJobCommunicationEvent::Data::noText() const + { + return m_noText; + } + + +-int K3b::ThreadJobCommunicationEvent::intResult() const ++int K3b::ThreadJobCommunicationEvent::Data::intResult() const + { + return m_result; + } + + +-bool K3b::ThreadJobCommunicationEvent::boolResult() const ++bool K3b::ThreadJobCommunicationEvent::Data::boolResult() const + { + return ( m_result != 0 ); + } + + +-void K3b::ThreadJobCommunicationEvent::wait() ++void K3b::ThreadJobCommunicationEvent::Data::wait() + { + QMutex mutex; + mutex.lock(); +@@ -108,23 +96,43 @@ + } + + +-void K3b::ThreadJobCommunicationEvent::done( int result ) ++void K3b::ThreadJobCommunicationEvent::Data::done( int result ) + { + m_result = result; + m_threader.wakeAll(); + } + + ++K3b::ThreadJobCommunicationEvent::ThreadJobCommunicationEvent( int type ) ++ : QEvent( QEvent::User ), ++ m_type( type ), ++ m_data( new Data() ) ++{ ++} ++ ++ ++K3b::ThreadJobCommunicationEvent::~ThreadJobCommunicationEvent() ++{ ++ // Do NOT delete m_data here. It is needed after destruction by K3b::ThreadJob ++} ++ ++ ++int K3b::ThreadJobCommunicationEvent::type() const ++{ ++ return m_type; ++} ++ ++ + K3b::ThreadJobCommunicationEvent* K3b::ThreadJobCommunicationEvent::waitForMedium( K3b::Device::Device* device, + Device::MediaStates mediaState, + Device::MediaTypes mediaType, + const QString& message ) + { + K3b::ThreadJobCommunicationEvent* event = new K3b::ThreadJobCommunicationEvent( WaitForMedium ); +- event->m_device = device; +- event->m_wantedMediaState = mediaState; +- event->m_wantedMediaType = mediaType; +- event->m_text = message; ++ event->m_data->m_device = device; ++ event->m_data->m_wantedMediaState = mediaState; ++ event->m_data->m_wantedMediaType = mediaType; ++ event->m_data->m_text = message; + return event; + } + +@@ -135,10 +143,10 @@ + const QString& noText ) + { + K3b::ThreadJobCommunicationEvent* event = new K3b::ThreadJobCommunicationEvent( QuestionYesNo ); +- event->m_text = text; +- event->m_caption = caption; +- event->m_yesText = yesText; +- event->m_noText = noText; ++ event->m_data->m_text = text; ++ event->m_data->m_caption = caption; ++ event->m_data->m_yesText = yesText; ++ event->m_data->m_noText = noText; + return event; + } + +@@ -147,7 +155,7 @@ + const QString& caption ) + { + K3b::ThreadJobCommunicationEvent* event = new K3b::ThreadJobCommunicationEvent( BlockingInfo ); +- event->m_text = text; +- event->m_caption = caption; ++ event->m_data->m_text = text; ++ event->m_data->m_caption = caption; + return event; + } +diff -ru libk3b/core/k3bthreadjobcommunicationevent.h libk3b/core/k3bthreadjobcommunicationevent.h +--- libk3b/core/k3bthreadjobcommunicationevent.h 2009-03-23 09:47:00.000000000 +0100 ++++ libk3b/core/k3bthreadjobcommunicationevent.h 2009-07-23 11:41:53.000000000 +0200 +@@ -42,29 +42,55 @@ + + int type() const; + +- Device::Device* device() const; +- Device::MediaStates wantedMediaState() const; +- Device::MediaTypes wantedMediaType() const; +- QString message() const; +- +- QString text() const; +- QString caption() const; +- +- QString yesText() const; +- QString noText() const; +- +- int intResult() const; +- bool boolResult() const; +- + /** +- * Used by the calling thread to wait for the result ++ * Separate data object are used since events are deleted once delivered. ++ * However, we need the data after the event has been delivered. + */ +- void wait(); ++ class Data { ++ public: ++ Data(); ++ ++ Device::Device* device() const; ++ Device::MediaStates wantedMediaState() const; ++ Device::MediaTypes wantedMediaType() const; ++ QString message() const; ++ ++ QString text() const; ++ QString caption() const; ++ ++ QString yesText() const; ++ QString noText() const; ++ ++ int intResult() const; ++ bool boolResult() const; ++ ++ ++ /** ++ * Used by the calling thread to wait for the result ++ */ ++ void wait(); ++ ++ /** ++ * Signal back to the calling thread. ++ */ ++ void done( int result ); ++ ++ private: ++ Device::Device* m_device; ++ Device::MediaStates m_wantedMediaState; ++ Device::MediaTypes m_wantedMediaType; ++ QString m_text; ++ QString m_caption; ++ QString m_yesText; ++ QString m_noText; + +- /** +- * Signal back to the calling thread. +- */ +- void done( int result ); ++ QWaitCondition m_threader; ++ int m_result; ++ ++ friend class ThreadJobCommunicationEvent; ++ }; ++ ++ Data* data() const { return m_data; } + + static ThreadJobCommunicationEvent* waitForMedium( Device::Device* device, + Device::MediaStates mediaState, +@@ -81,16 +107,7 @@ + ThreadJobCommunicationEvent( int type ); + + int m_type; +- Device::Device* m_device; +- Device::MediaStates m_wantedMediaState; +- Device::MediaTypes m_wantedMediaType; +- QString m_text; +- QString m_caption; +- QString m_yesText; +- QString m_noText; +- +- QWaitCondition m_threader; +- int m_result; ++ Data* m_data; + }; + } + +diff -ru libk3b/core/k3bthreadjob.cpp libk3b/core/k3bthreadjob.cpp +--- libk3b/core/k3bthreadjob.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ libk3b/core/k3bthreadjob.cpp 2009-07-23 11:41:53.000000000 +0200 +@@ -20,6 +20,8 @@ + #include + #include + ++#include ++ + + class K3b::ThreadJob::Private + { +@@ -102,9 +104,10 @@ + mediaState, + mediaType, + message ); ++ QSharedPointer data( event->data() ); + QApplication::postEvent( this, event ); +- event->wait(); +- return (Device::MediaType)event->intResult(); ++ data->wait(); ++ return (Device::MediaType)data->intResult(); + } + + +@@ -117,9 +120,10 @@ + caption, + yesText, + noText ); ++ QSharedPointer data( event->data() ); + QApplication::postEvent( this, event ); +- event->wait(); +- return event->boolResult(); ++ data->wait(); ++ return data->boolResult(); + } + + +@@ -128,36 +132,38 @@ + { + K3b::ThreadJobCommunicationEvent* event = K3b::ThreadJobCommunicationEvent::blockingInformation( text, + caption ); ++ QSharedPointer data( event->data() ); + QApplication::postEvent( this, event ); +- event->wait(); ++ data->wait(); + } + + + void K3b::ThreadJob::customEvent( QEvent* e ) + { + if( K3b::ThreadJobCommunicationEvent* ce = dynamic_cast(e) ) { ++ K3b::ThreadJobCommunicationEvent::Data* data = ce->data(); + int result = 0; + switch( ce->type() ) { + case K3b::ThreadJobCommunicationEvent::WaitForMedium: +- result = K3b::Job::waitForMedia( ce->device(), +- ce->wantedMediaState(), +- ce->wantedMediaType(), +- ce->text() ); ++ result = K3b::Job::waitForMedia( data->device(), ++ data->wantedMediaState(), ++ data->wantedMediaType(), ++ data->text() ); + break; + + case K3b::ThreadJobCommunicationEvent::QuestionYesNo: +- result = K3b::Job::questionYesNo( ce->text(), +- ce->caption(), +- ce->yesText(), +- ce->noText() ) ++ result = K3b::Job::questionYesNo( data->text(), ++ data->caption(), ++ data->yesText(), ++ data->noText() ) + ? 1 : 0; + break; + + case K3b::ThreadJobCommunicationEvent::BlockingInfo: +- K3b::Job::blockingInformation( ce->text(), ce->caption() ); ++ K3b::Job::blockingInformation( data->text(), data->caption() ); + break; + } +- ce->done( result ); ++ data->done( result ); + } + } + +diff -ru libk3b/plugin/k3bplugin.desktop libk3b/plugin/k3bplugin.desktop +--- libk3b/plugin/k3bplugin.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ libk3b/plugin/k3bplugin.desktop 2009-07-23 11:41:57.000000000 +0200 +@@ -2,7 +2,6 @@ + Type=ServiceType + X-KDE-ServiceType=K3b/Plugin + Name=K3b Plugin +-Name[bg]=Приставка за K3b + Name[cs]=Modul K3b + Name[csb]=Wtëkôcz K3b + Name[da]=K3b-plugin +@@ -37,3 +36,4 @@ + Name[uk]=Додаток K3b + Name[x-test]=xxK3b Pluginxx + Name[zh_CN]=k3b 插件 ++Name[zh_TW]=K3b 外掛程式 +diff -ru libk3b/plugin/k3bprojectplugin.cpp libk3b/plugin/k3bprojectplugin.cpp +--- libk3b/plugin/k3bprojectplugin.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ libk3b/plugin/k3bprojectplugin.cpp 2009-07-23 11:41:57.000000000 +0200 +@@ -13,7 +13,7 @@ + */ + #include "k3bprojectplugin.h" + +-K3b::ProjectPlugin::ProjectPlugin( int type, bool gui, QObject* parent ) ++K3b::ProjectPlugin::ProjectPlugin( Type type, bool gui, QObject* parent ) + : K3b::Plugin( parent ), + m_type(type), + m_hasGUI(gui) +diff -ru libk3b/plugin/k3bprojectplugin.h libk3b/plugin/k3bprojectplugin.h +--- libk3b/plugin/k3bprojectplugin.h 2009-04-21 19:54:02.000000000 +0200 ++++ libk3b/plugin/k3bprojectplugin.h 2009-07-23 11:41:57.000000000 +0200 +@@ -15,14 +15,16 @@ + #ifndef _K3B_PROJECT_PLUGIN_H_ + #define _K3B_PROJECT_PLUGIN_H_ + ++#include "k3bdoc.h" + #include "k3bplugin.h" + ++#include ++ + #include "k3b_export.h" + + class KConfigGroup; + + namespace K3b { +- class Doc; + + /** + * In case your plugin provides a GUI it is recommended to use the +@@ -71,31 +73,19 @@ + Q_OBJECT + + public: ++ Q_DECLARE_FLAGS( Type, Doc::Type ) ++ + /** +- * @param type The type of the plugin ++ * @param type The type of the plugin which can be a combination of @see Doc::Type + * @param gui If true the plugin is supposed to provide a widget via @p createGUI(). In that case + * @p activate() will not be used. A plugin has a GUI if it's functionality is started + * by some user input. + */ +- ProjectPlugin( int type, bool gui = false, QObject* parent = 0 ); ++ ProjectPlugin( Type type, bool gui = false, QObject* parent = 0 ); + + virtual ~ProjectPlugin() { + } + +- // TODO: move this to Doc? +- enum Type { +- AUDIO_CD = 0x1, +- DATA_CD = 0x2, +- MIXED_CD = 0x4, +- VIDEO_CD = 0x8, +- MOVIX_CD = 0x10, +- DATA_DVD = 0x20, +- VIDEO_DVD = 0x40, +- MOVIX_DVD = 0x80, +- DATA_PROJECTS = DATA_CD|DATA_DVD, +- MOVIX_PROJECTS = MOVIX_CD|MOVIX_DVD +- }; +- + // TODO: maybe we should use something like "ProjectPlugin/AudioCD" based on the type? + QString category() const { return "ProjectPlugin"; } + +@@ -106,7 +96,7 @@ + * Needs to return a proper type. The default implementation returns the type specified + * in the constructor. + */ +- virtual int type() const { return m_type; } ++ virtual Type type() const { return m_type; } + + /** + * Text used for menu entries and the like. +@@ -148,7 +138,7 @@ + void setIcon( const QString& s ) { m_icon = s; } + + private: +- int m_type; ++ Type m_type; + bool m_hasGUI; + QString m_text; + QString m_toolTip; +@@ -157,5 +147,6 @@ + }; + } + ++Q_DECLARE_OPERATORS_FOR_FLAGS( K3b::ProjectPlugin::Type ) + + #endif +diff -ru libk3b/projects/audiocd/k3baudiodoc.cpp libk3b/projects/audiocd/k3baudiodoc.cpp +--- libk3b/projects/audiocd/k3baudiodoc.cpp 2009-04-15 11:34:06.000000000 +0200 ++++ libk3b/projects/audiocd/k3baudiodoc.cpp 2009-07-23 11:41:55.000000000 +0200 +@@ -26,29 +26,21 @@ + #include "k3bcore.h" + #include "k3baudiodecoder.h" + +- +-// QT-includes +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-// KDE-includes +-#include +-#include +-#include +-#include +-#include +-#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include + #include +-#include +- +-#include ++#include + + + class K3b::AudioDoc::Private +@@ -72,7 +64,6 @@ + m_lastTrack(0) + { + d = new Private; +- m_docType = AUDIO; + } + + K3b::AudioDoc::~AudioDoc() +@@ -497,12 +488,6 @@ + } + + +-QString K3b::AudioDoc::typeString() const +-{ +- return "audio"; +-} +- +- + bool K3b::AudioDoc::loadDocumentData( QDomElement* root ) + { + newDocument(); +diff -ru libk3b/projects/audiocd/k3baudiodoc.h libk3b/projects/audiocd/k3baudiodoc.h +--- libk3b/projects/audiocd/k3baudiodoc.h 2009-04-21 19:54:02.000000000 +0200 ++++ libk3b/projects/audiocd/k3baudiodoc.h 2009-07-23 11:41:55.000000000 +0200 +@@ -18,16 +18,10 @@ + #define K3BAUDIODOC_H + + #include "k3bdoc.h" +- + #include "k3bcdtext.h" + #include "k3btoc.h" + +-#include +-#include +-#include +-#include + #include "k3b_export.h" +-#include + + class QDomElement; + +@@ -53,6 +47,9 @@ + AudioDoc( QObject* ); + ~AudioDoc(); + ++ virtual Type type() const { return AudioProject; } ++ virtual QString typeString() const { return QString::fromLatin1("audio"); } ++ + QString name() const; + + bool newDocument(); +@@ -204,8 +201,6 @@ + /** reimplemented from Doc */ + bool saveDocumentData( QDomElement* ); + +- QString typeString() const; +- + private: + // the stuff for adding files + // --------------------------------------------------------- +diff -ru libk3b/projects/datacd/k3bdatadoc.cpp libk3b/projects/datacd/k3bdatadoc.cpp +--- libk3b/projects/datacd/k3bdatadoc.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ libk3b/projects/datacd/k3bdatadoc.cpp 2009-07-23 11:41:54.000000000 +0200 +@@ -34,25 +34,21 @@ + #include "k3bvalidators.h" + #include "k3bglobalsettings.h" + +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include + + #include + #include +@@ -263,12 +259,6 @@ + } + + +-QString K3b::DataDoc::typeString() const +-{ +- return QString::fromLatin1("data"); +-} +- +- + bool K3b::DataDoc::loadDocumentData( QDomElement* rootElem ) + { + if( !root() ) +diff -ru libk3b/projects/datacd/k3bdatadoc.h libk3b/projects/datacd/k3bdatadoc.h +--- libk3b/projects/datacd/k3bdatadoc.h 2009-04-21 19:54:02.000000000 +0200 ++++ libk3b/projects/datacd/k3bdatadoc.h 2009-07-23 11:41:54.000000000 +0200 +@@ -18,20 +18,16 @@ + + #include "k3bdoc.h" + #include "k3bdataitem.h" +- + #include "k3bisooptions.h" + +-#include +-#include +-//Added by qt3to4: ++#include + +-#include + #include ++ + #include "k3b_export.h" + + class KConfig; + class QString; +-class QStringList; + class QDomDocument; + class QDomElement; + +@@ -60,8 +56,8 @@ + DataDoc( QObject* parent = 0 ); + virtual ~DataDoc(); + +- virtual int type() const { return DATA; } +- virtual QString typeString() const; ++ virtual Type type() const { return DataProject; } ++ virtual QString typeString() const { return QString::fromLatin1("data"); } + + virtual QString name() const; + +diff -ru libk3b/projects/datacd/k3bdatajob.cpp libk3b/projects/datacd/k3bdatajob.cpp +--- libk3b/projects/datacd/k3bdatajob.cpp 2009-05-27 11:58:34.000000000 +0200 ++++ libk3b/projects/datacd/k3bdatajob.cpp 2009-07-23 11:41:54.000000000 +0200 +@@ -406,18 +406,24 @@ + jobFinished( false ); + } + } +- else if( !success ) { // on-the-fly +- // +- // In case the imager failed let's make sure the writer does not emit an unusable +- // error message. +- // +- if( m_writerJob && m_writerJob->active() ) +- m_writerJob->setSourceUnreadable( true ); +- +- // there is one special case which we need to handle here: the iso imager might be canceled +- // FIXME: the iso imager should not be able to cancel itself +- if( m_isoImager->hasBeenCanceled() && !this->hasBeenCanceled() ) +- cancel(); ++ else { // on-the-fly ++ if( success ) { ++ if ( !m_writerJob->active() ) ++ finishCopy(); ++ } ++ else { ++ // ++ // In case the imager failed let's make sure the writer does not emit an unusable ++ // error message. ++ // ++ if( m_writerJob && m_writerJob->active() ) ++ m_writerJob->setSourceUnreadable( true ); ++ ++ // there is one special case which we need to handle here: the iso imager might be canceled ++ // FIXME: the iso imager should not be able to cancel itself ++ if( m_isoImager->hasBeenCanceled() && !this->hasBeenCanceled() ) ++ cancel(); ++ } + } + } + } +@@ -467,77 +473,85 @@ + kDebug(); + + if( success ) { +- // allright +- // the writerJob should have emitted the "simulation/writing successful" signal ++ if ( !d->doc->onTheFly() || ++ !m_isoImager->active() ) { ++ finishCopy(); ++ } ++ } ++ else { ++ if ( !cancelAll() ) { ++ cleanup(); ++ jobFinished( false ); ++ } ++ } ++} + +- if( d->doc->verifyData() ) { +- if( !d->verificationJob ) { +- d->verificationJob = new K3b::VerificationJob( this, this ); +- connect( d->verificationJob, SIGNAL(infoMessage(const QString&, int)), +- this, SIGNAL(infoMessage(const QString&, int)) ); +- connect( d->verificationJob, SIGNAL(newTask(const QString&)), +- this, SIGNAL(newSubTask(const QString&)) ); +- connect( d->verificationJob, SIGNAL(newSubTask(const QString&)), +- this, SIGNAL(newSubTask(const QString&)) ); +- connect( d->verificationJob, SIGNAL(percent(int)), +- this, SLOT(slotVerificationProgress(int)) ); +- connect( d->verificationJob, SIGNAL(percent(int)), +- this, SIGNAL(subPercent(int)) ); +- connect( d->verificationJob, SIGNAL(finished(bool)), +- this, SLOT(slotVerificationFinished(bool)) ); +- connect( d->verificationJob, SIGNAL(debuggingOutput(const QString&, const QString&)), +- this, SIGNAL(debuggingOutput(const QString&, const QString&)) ); +- +- } +- d->verificationJob->clear(); +- d->verificationJob->setDevice( d->doc->burner() ); +- d->verificationJob->setGrownSessionSize( m_isoImager->size() ); +- d->verificationJob->addTrack( 0, d->checksumCache, m_isoImager->size() ); + +- emit burning(false); ++void K3b::DataJob::finishCopy() ++{ ++ // the writerJob should have emitted the "simulation/writing successful" signal + +- emit newTask( i18n("Verifying written data") ); ++ if( d->doc->verifyData() ) { ++ if( !d->verificationJob ) { ++ d->verificationJob = new K3b::VerificationJob( this, this ); ++ connect( d->verificationJob, SIGNAL(infoMessage(const QString&, int)), ++ this, SIGNAL(infoMessage(const QString&, int)) ); ++ connect( d->verificationJob, SIGNAL(newTask(const QString&)), ++ this, SIGNAL(newSubTask(const QString&)) ); ++ connect( d->verificationJob, SIGNAL(newSubTask(const QString&)), ++ this, SIGNAL(newSubTask(const QString&)) ); ++ connect( d->verificationJob, SIGNAL(percent(int)), ++ this, SLOT(slotVerificationProgress(int)) ); ++ connect( d->verificationJob, SIGNAL(percent(int)), ++ this, SIGNAL(subPercent(int)) ); ++ connect( d->verificationJob, SIGNAL(finished(bool)), ++ this, SLOT(slotVerificationFinished(bool)) ); ++ connect( d->verificationJob, SIGNAL(debuggingOutput(const QString&, const QString&)), ++ this, SIGNAL(debuggingOutput(const QString&, const QString&)) ); + +- d->verificationJob->start(); + } +- else { +- d->copiesDone++; ++ d->verificationJob->clear(); ++ d->verificationJob->setDevice( d->doc->burner() ); ++ d->verificationJob->setGrownSessionSize( m_isoImager->size() ); ++ d->verificationJob->addTrack( 0, d->checksumCache, m_isoImager->size() ); + +- if( d->copiesDone < d->copies ) { +- if( !K3b::eject( d->doc->burner() ) ) { +- blockingInformation( i18n("K3b was unable to eject the written disk. Please do so manually.") ); +- } +- +- bool failed = false; +- if( d->doc->onTheFly() ) +- failed = !startOnTheFlyWriting(); +- else +- failed = !prepareWriterJob() || !startWriterJob(); ++ emit burning(false); + +- if( failed ) { +- cancel(); +- } +- else if( !d->doc->onTheFly() ) { ++ emit newTask( i18n("Verifying written data") ); ++ ++ d->verificationJob->start(); ++ } ++ else { ++ d->copiesDone++; ++ ++ if( d->copiesDone < d->copies ) { ++ if( !K3b::eject( d->doc->burner() ) ) { ++ blockingInformation( i18n("K3b was unable to eject the written disk. Please do so manually.") ); ++ } ++ ++ bool failed = false; ++ if( d->doc->onTheFly() ) ++ failed = !startOnTheFlyWriting(); ++ else ++ failed = !prepareWriterJob() || !startWriterJob(); ++ ++ if( failed ) { ++ cancel(); ++ } ++ else if( !d->doc->onTheFly() ) { + #ifdef __GNUC__ + #warning Growisofs needs stdin to be closed in order to exit gracefully. Cdrecord does not. However, if closed with cdrecord we loose parts of stderr. Why? + #endif +- d->pipe->writeTo( m_writerJob->ioDevice(), d->usedWritingApp != K3b::WritingAppCdrecord ); +- d->pipe->open(true); +- } +- } +- else { +- cleanup(); +- if ( k3bcore->globalSettings()->ejectMedia() ) { +- K3b::Device::eject( d->doc->burner() ); +- } +- jobFinished(true); ++ d->pipe->writeTo( m_writerJob->ioDevice(), d->usedWritingApp != K3b::WritingAppCdrecord ); ++ d->pipe->open(true); + } + } +- } +- else { +- if ( !cancelAll() ) { ++ else { + cleanup(); +- jobFinished( false ); ++ if ( k3bcore->globalSettings()->ejectMedia() ) { ++ K3b::Device::eject( d->doc->burner() ); ++ } ++ jobFinished(true); + } + } + } +diff -ru libk3b/projects/datacd/k3bdatajob.h libk3b/projects/datacd/k3bdatajob.h +--- libk3b/projects/datacd/k3bdatajob.h 2009-04-21 19:54:02.000000000 +0200 ++++ libk3b/projects/datacd/k3bdatajob.h 2009-07-23 11:41:54.000000000 +0200 +@@ -106,6 +106,7 @@ + bool setupCdrdaoJob(); + bool setupGrowisofsJob(); + void startPipe(); ++ void finishCopy(); + + class Private; + Private* d; +diff -ru libk3b/projects/datacd/k3bdatamultisessionparameterjob.cpp libk3b/projects/datacd/k3bdatamultisessionparameterjob.cpp +--- libk3b/projects/datacd/k3bdatamultisessionparameterjob.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ libk3b/projects/datacd/k3bdatamultisessionparameterjob.cpp 2009-07-23 11:41:54.000000000 +0200 +@@ -200,15 +200,13 @@ + // 2. Special case for the 4GB boundary which seems to be enforced by a linux kernel issue + // + +- kDebug() << "(K3b::DataMultiSessionParameterJob) found empty or complete medium."; +- + if( d->doc->size() >= info.capacity().mode1Bytes()*9/10 || + d->doc->writingMode() == K3b::WritingModeSao ) { + return K3b::DataDoc::NONE; + } +- else if( ( info.capacity() < 2621440 /* ~ 5 GB */ && +- d->doc->size() + 11400 /* used size + project size + session gap */ > 2097152 /* 4 GB */ ) || +- d->doc->writingMode() == K3b::WritingModeSao ) { ++ else if( info.isDvdMedia() && ++ info.capacity() < 2621440 /* ~ 5 GB */ && ++ d->doc->length() + 11400 /* used size + project size + session gap */ > 2097152 /* 4 GB */ ) { + return K3b::DataDoc::NONE; + } + else { +diff -ru libk3b/projects/datacd/k3bdatapreparationjob.cpp libk3b/projects/datacd/k3bdatapreparationjob.cpp +--- libk3b/projects/datacd/k3bdatapreparationjob.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ libk3b/projects/datacd/k3bdatapreparationjob.cpp 2009-07-23 11:41:54.000000000 +0200 +@@ -26,6 +26,7 @@ + #include + + #include ++#include + #include + + namespace { +diff -ru libk3b/projects/datacd/k3bisoimager.cpp libk3b/projects/datacd/k3bisoimager.cpp +--- libk3b/projects/datacd/k3bisoimager.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ libk3b/projects/datacd/k3bisoimager.cpp 2009-07-23 11:41:54.000000000 +0200 +@@ -131,6 +131,8 @@ + { + kDebug(); + ++ cleanup(); ++ + if( m_canceled ) { + emit canceled(); + jobFinished(false); +@@ -179,8 +181,6 @@ + jobFinished( false ); + } + } +- +- cleanup(); + } + + +@@ -444,7 +444,7 @@ + // something went wrong when starting the program + // it "should" be the executable + kDebug() << "(K3b::IsoImager) could not start mkisofs"; +- emit infoMessage( i18n("Could not start %1.",QString("mkisofs")), K3b::Job::MessageError ); ++ emit infoMessage( i18n("Could not start %1.", QLatin1String("mkisofs")), K3b::Job::MessageError ); + jobFinished( false ); + cleanup(); + } +diff -ru libk3b/projects/k3bdoc.cpp libk3b/projects/k3bdoc.cpp +--- libk3b/projects/k3bdoc.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ libk3b/projects/k3bdoc.cpp 2009-07-23 11:41:56.000000000 +0200 +@@ -12,17 +12,6 @@ + * See the file "COPYING" for the exact licensing terms. + */ + +- +-// include files for Qt +-#include +-#include +-#include +- +-// include files for KDE +-#include +-#include +- +-// application specific includes + #include "k3bdoc.h" + #include "k3bglobals.h" + #include "k3bdevice.h" +@@ -30,6 +19,13 @@ + #include "k3bcore.h" + #include "k3bdevicemanager.h" + ++#include ++#include ++#include ++ ++#include ++#include ++ + + K3b::Doc::Doc( QObject* parent ) + : QObject( parent ), +diff -ru libk3b/projects/k3bdoc.h libk3b/projects/k3bdoc.h +--- libk3b/projects/k3bdoc.h 2009-03-21 23:36:06.000000000 +0100 ++++ libk3b/projects/k3bdoc.h 2009-07-23 11:41:56.000000000 +0200 +@@ -19,14 +19,12 @@ + #include "config-k3b.h" + #include "k3bglobals.h" + +-// include files for QT +-#include +-#include ++#include ++#include + +- +-// include files for KDE +-#include ++#include + #include ++ + #include "k3b_export.h" + + class QDomElement; +@@ -51,27 +49,27 @@ + Doc( QObject* = 0 ); + virtual ~Doc(); + +- enum DocType { +- AUDIO = 1, +- DATA, +- MIXED, +- VCD, +- MOVIX, +- VIDEODVD ++ enum Type { ++ AudioProject = 0x1, ++ DataProject = 0x2, ++ MixedProject = 0x4, ++ VcdProject = 0x8, ++ MovixProject = 0x10, ++ VideoDvdProject = 0x20 + }; + +- virtual int type() const { return m_docType; } ++ virtual Type type() const = 0; + + /** +- * \return A name for the project which might for example be used as a suggestion for a file name +- * when saving. The default implementation extracts a name from the URL. ++ * \return A string representation of the document type. + */ +- virtual QString name() const; ++ virtual QString typeString() const = 0; + + /** +- * \return A string representation of the document type. ++ * \return A name for the project which might for example be used as a suggestion for a file name ++ * when saving. The default implementation extracts a name from the URL. + */ +- virtual QString typeString() const = 0; ++ virtual QString name() const; + + /** + * The media types that are supported by this project type. +@@ -199,8 +197,6 @@ + virtual void addUrls( const KUrl::List& urls ) = 0; + + protected: +- int m_docType; +- + bool saveGeneralDocumentData( QDomElement* ); + + bool readGeneralDocumentData( const QDomElement& ); +diff -ru libk3b/projects/mixedcd/k3bmixeddoc.cpp libk3b/projects/mixedcd/k3bmixeddoc.cpp +--- libk3b/projects/mixedcd/k3bmixeddoc.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ libk3b/projects/mixedcd/k3bmixeddoc.cpp 2009-07-23 11:41:55.000000000 +0200 +@@ -14,19 +14,18 @@ + + #include "k3bmixeddoc.h" + #include "k3bmixedjob.h" +- + #include "k3bdatadoc.h" + #include "k3baudiodoc.h" + #include "k3bglobals.h" + #include "k3bmsf.h" + +-#include +-#include ++#include ++#include + +-#include +-#include +-#include +-#include ++#include ++#include ++#include ++#include + + + +diff -ru libk3b/projects/mixedcd/k3bmixeddoc.h libk3b/projects/mixedcd/k3bmixeddoc.h +--- libk3b/projects/mixedcd/k3bmixeddoc.h 2009-03-21 23:36:06.000000000 +0100 ++++ libk3b/projects/mixedcd/k3bmixeddoc.h 2009-07-23 11:41:55.000000000 +0200 +@@ -32,6 +32,9 @@ + public: + MixedDoc( QObject* parent = 0 ); + ~MixedDoc(); ++ ++ virtual Type type() const { return MixedProject; } ++ virtual QString typeString() const { return QString::fromLatin1("mixed"); } + + QString name() const; + +@@ -58,7 +61,6 @@ + DATA_SECOND_SESSION }; + + int mixedType() const { return m_mixedType; } +- int type() const { return MIXED; } + + void setURL( const KUrl& url ); + +@@ -79,7 +81,6 @@ + protected: + bool loadDocumentData( QDomElement* ); + bool saveDocumentData( QDomElement* ); +- QString typeString() const { return "mixed"; } + + private: + DataDoc* m_dataDoc; +diff -ru libk3b/projects/movixcd/k3bmovixdoc.cpp libk3b/projects/movixcd/k3bmovixdoc.cpp +--- libk3b/projects/movixcd/k3bmovixdoc.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ libk3b/projects/movixcd/k3bmovixdoc.cpp 2009-07-23 11:41:55.000000000 +0200 +@@ -17,21 +17,19 @@ + #include "k3bmovixdoc.h" + #include "k3bmovixjob.h" + #include "k3bmovixfileitem.h" +- + #include "k3bdiritem.h" + #include "k3bfileitem.h" + #include "k3bglobals.h" + +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include +-#include +-#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include + + + K3b::MovixDoc::MovixDoc( QObject* parent ) +@@ -51,12 +49,6 @@ + } + + +-QString K3b::MovixDoc::typeString() const +-{ +- return QString::fromLatin1("movix"); +-} +- +- + bool K3b::MovixDoc::newDocument() + { + m_loopPlaylist = 1; +diff -ru libk3b/projects/movixcd/k3bmovixdoc.h libk3b/projects/movixcd/k3bmovixdoc.h +--- libk3b/projects/movixcd/k3bmovixdoc.h 2009-04-21 19:54:02.000000000 +0200 ++++ libk3b/projects/movixcd/k3bmovixdoc.h 2009-07-23 11:41:55.000000000 +0200 +@@ -17,10 +17,10 @@ + #ifndef _K3B_MOVIX_DOC_H_ + #define _K3B_MOVIX_DOC_H_ + +- + #include "k3bdatadoc.h" + +-#include ++#include ++ + #include "k3b_export.h" + + class KUrl; +@@ -37,8 +37,8 @@ + MovixDoc( QObject* parent = 0 ); + virtual ~MovixDoc(); + +- virtual int type() const { return MOVIX; } +- virtual QString typeString() const; ++ virtual Type type() const { return MovixProject; } ++ virtual QString typeString() const { return QString::fromLatin1("movix"); } + + bool newDocument(); + +diff -ru libk3b/projects/videocd/k3bvcddoc.cpp libk3b/projects/videocd/k3bvcddoc.cpp +--- libk3b/projects/videocd/k3bvcddoc.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ libk3b/projects/videocd/k3bvcddoc.cpp 2009-07-23 11:41:56.000000000 +0200 +@@ -13,33 +13,28 @@ + * See the file "COPYING" for the exact licensing terms. + */ + +-// QT-includes +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-// KDE-includes +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-// K3b-includes + #include "k3bvcddoc.h" + #include "k3bvcdtrack.h" + #include "k3bvcdjob.h" + #include "k3bglobals.h" + #include "k3bmsf.h" + ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++ + #if 0 + bool desperate_mode = false; + bool preserve_header = false; +@@ -54,7 +49,6 @@ + m_tracks = 0L; + m_vcdOptions = new K3b::VcdOptions(); + +- m_docType = VCD; + m_vcdType = NONE; + + m_urlAddingTimer = new QTimer( this ); +@@ -407,12 +401,6 @@ + } + + +-QString K3b::VcdDoc::typeString() const +-{ +- return "vcd"; +-} +- +- + K3b::BurnJob* K3b::VcdDoc::newBurnJob( K3b::JobHandler* hdl, QObject* parent ) + { + return new K3b::VcdJob( this, hdl, parent ); +diff -ru libk3b/projects/videocd/k3bvcddoc.h libk3b/projects/videocd/k3bvcddoc.h +--- libk3b/projects/videocd/k3bvcddoc.h 2009-03-21 23:36:06.000000000 +0100 ++++ libk3b/projects/videocd/k3bvcddoc.h 2009-07-23 11:41:56.000000000 +0200 +@@ -16,21 +16,13 @@ + #ifndef K3BVCDDOC_H + #define K3BVCDDOC_H + +-// Qt Includes +-#include +-#include +-#include +-#include +-#include +-#include +- +-// Kde Includes +-#include +- +-// K3b Includes ++#include "k3bdoc.h" + #include "k3bvcdoptions.h" + #include "mpeginfo/k3bmpeginfo.h" +-#include "k3bdoc.h" ++ ++#include ++#include ++ + #include "k3b_export.h" + + class QTimer; +@@ -47,7 +39,8 @@ + VcdDoc( QObject* ); + ~VcdDoc(); + +- int type() const { return VCD; } ++ virtual Type type() const { return VcdProject; } ++ virtual QString typeString() const { return QString::fromLatin1("vcd"); } + + Device::MediaTypes supportedMediaTypes() const; + +@@ -156,8 +149,6 @@ + /** reimplemented from Doc */ + bool saveDocumentData( QDomElement* ); + +- QString typeString() const; +- + private: + VcdTrack* createTrack( const KUrl& url ); + void informAboutNotFoundFiles(); +diff -ru libk3b/projects/videodvd/k3bvideodvddoc.cpp libk3b/projects/videodvd/k3bvideodvddoc.cpp +--- libk3b/projects/videodvd/k3bvideodvddoc.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ libk3b/projects/videodvd/k3bvideodvddoc.cpp 2009-07-23 11:41:55.000000000 +0200 +@@ -15,12 +15,10 @@ + + #include "k3bvideodvddoc.h" + #include "k3bvideodvdjob.h" +- + #include "k3bdiritem.h" +- + #include "k3bisooptions.h" + +-#include ++#include + + + K3b::VideoDvdDoc::VideoDvdDoc( QObject* parent ) +diff -ru libk3b/projects/videodvd/k3bvideodvddoc.h libk3b/projects/videodvd/k3bvideodvddoc.h +--- libk3b/projects/videodvd/k3bvideodvddoc.h 2009-04-21 19:54:02.000000000 +0200 ++++ libk3b/projects/videodvd/k3bvideodvddoc.h 2009-07-23 11:41:55.000000000 +0200 +@@ -25,7 +25,8 @@ + VideoDvdDoc( QObject* parent = 0 ); + virtual ~VideoDvdDoc(); + +- virtual int type() const { return VIDEODVD; } ++ virtual Type type() const { return VideoDvdProject; } ++ virtual QString typeString() const { return QString::fromLatin1("video_dvd"); } + + Device::MediaTypes supportedMediaTypes() const; + +@@ -37,9 +38,6 @@ + + // TODO: implement load- and saveDocumentData since we do not need all those options + +- protected: +- virtual QString typeString() const { return "video_dvd"; } +- + private: + DirItem* m_videoTsDir; + }; +diff -ru libk3b/tools/k3biso9660.cpp libk3b/tools/k3biso9660.cpp +--- libk3b/tools/k3biso9660.cpp 2009-04-22 12:40:45.000000000 +0200 ++++ libk3b/tools/k3biso9660.cpp 2009-07-23 11:41:53.000000000 +0200 +@@ -618,6 +618,8 @@ + else + d->backend = new K3b::Iso9660DeviceBackend( d->cdDevice ); + } ++ else ++ return false; + } + + d->isOpen = d->backend->open(); +diff -ru libk3b/tools/k3bmediacache.cpp libk3b/tools/k3bmediacache.cpp +--- libk3b/tools/k3bmediacache.cpp 2009-05-27 11:58:34.000000000 +0200 ++++ libk3b/tools/k3bmediacache.cpp 2009-07-23 11:41:53.000000000 +0200 +@@ -75,24 +75,31 @@ + emit checkingMedium( m_deviceEntry->medium.device(), QString() ); + + // ++ // we block for writing before the update ++ // This is important to make sure we do not overwrite a reset operation ++ // ++ m_deviceEntry->writeMutex.lock(); ++ ++ // + // The medium has changed. We need to update the information. + // + K3b::Medium m( m_deviceEntry->medium.device() ); + m.update(); + + // block the info since it is not valid anymore +- m_deviceEntry->mutex.lock(); ++ m_deviceEntry->readMutex.lock(); + + m_deviceEntry->medium = m; + ++ // the information is valid. let the info go. ++ m_deviceEntry->readMutex.unlock(); ++ m_deviceEntry->writeMutex.unlock(); ++ + // + // inform the media cache about the media change + // + if( m_deviceEntry->blockedId == 0 ) + emit mediumChanged( m_deviceEntry->medium.device() ); +- +- // the information is valid. let the info go. +- m_deviceEntry->mutex.unlock(); + } + + if( m_deviceEntry->blockedId == 0 ) +@@ -173,19 +180,20 @@ + + int K3b::MediaCache::blockDevice( K3b::Device::Device* dev ) + { ++ kDebug() << dev->blockDeviceName(); + DeviceEntry* e = findDeviceEntry( dev ); + if( e ) { + if( e->blockedId ) + return -1; + else { + // block the information +- e->mutex.lock(); ++ e->readMutex.lock(); + + // create (hopefully) unique id + e->blockedId = KRandom::random(); + + // let the info go +- e->mutex.unlock(); ++ e->readMutex.unlock(); + + // wait for the thread to stop + e->thread->wait(); +@@ -200,12 +208,12 @@ + + bool K3b::MediaCache::unblockDevice( K3b::Device::Device* dev, int id ) + { ++ kDebug() << dev->blockDeviceName(); + DeviceEntry* e = findDeviceEntry( dev ); + if( e && e->blockedId && e->blockedId == id ) { + e->blockedId = 0; + + e->medium = K3b::Medium( dev ); +- emit mediumChanged( dev ); + + // restart the poll thread + e->thread->start(); +@@ -229,9 +237,9 @@ + K3b::Medium K3b::MediaCache::medium( K3b::Device::Device* dev ) + { + if( DeviceEntry* e = findDeviceEntry( dev ) ) { +- e->mutex.lock(); ++ e->readMutex.lock(); + K3b::Medium m = e->medium; +- e->mutex.unlock(); ++ e->readMutex.unlock(); + return m; + } + else +@@ -242,9 +250,9 @@ + K3b::Device::DiskInfo K3b::MediaCache::diskInfo( K3b::Device::Device* dev ) + { + if( DeviceEntry* e = findDeviceEntry( dev ) ) { +- e->mutex.lock(); ++ e->readMutex.lock(); + K3b::Device::DiskInfo di = e->medium.diskInfo(); +- e->mutex.unlock(); ++ e->readMutex.unlock(); + return di; + } + else +@@ -255,9 +263,9 @@ + K3b::Device::Toc K3b::MediaCache::toc( K3b::Device::Device* dev ) + { + if( DeviceEntry* e = findDeviceEntry( dev ) ) { +- e->mutex.lock(); ++ e->readMutex.lock(); + K3b::Device::Toc toc = e->medium.toc(); +- e->mutex.unlock(); ++ e->readMutex.unlock(); + return toc; + } + else +@@ -268,9 +276,9 @@ + K3b::Device::CdText K3b::MediaCache::cdText( K3b::Device::Device* dev ) + { + if( DeviceEntry* e = findDeviceEntry( dev ) ) { +- e->mutex.lock(); ++ e->readMutex.lock(); + K3b::Device::CdText cdt = e->medium.cdText(); +- e->mutex.unlock(); ++ e->readMutex.unlock(); + return cdt; + } + else +@@ -281,9 +289,9 @@ + QList K3b::MediaCache::writingSpeeds( K3b::Device::Device* dev ) + { + if( DeviceEntry* e = findDeviceEntry( dev ) ) { +- e->mutex.lock(); ++ e->readMutex.lock(); + QList ws = e->medium.writingSpeeds(); +- e->mutex.unlock(); ++ e->readMutex.unlock(); + return ws; + } + else +@@ -376,11 +384,13 @@ + void K3b::MediaCache::resetDevice( K3b::Device::Device* dev ) + { + if( DeviceEntry* e = findDeviceEntry( dev ) ) { +- e->mutex.lock(); + kDebug() << "Resetting medium in" << dev->blockDeviceName(); ++ e->writeMutex.lock(); ++ e->readMutex.lock(); + e->medium.reset(); +- e->mutex.unlock(); +- emit mediumChanged( dev ); ++ e->readMutex.unlock(); ++ e->writeMutex.unlock(); ++ // no need to emit mediumChanged here. The poll thread will act on it soon + } + } + +diff -ru libk3b/tools/k3bmediacache_p.h libk3b/tools/k3bmediacache_p.h +--- libk3b/tools/k3bmediacache_p.h 2009-02-23 00:22:53.000000000 +0100 ++++ libk3b/tools/k3bmediacache_p.h 2009-07-23 11:41:53.000000000 +0200 +@@ -28,7 +28,8 @@ + + int blockedId; + +- QMutex mutex; ++ QMutex readMutex; ++ QMutex writeMutex; + + MediaCache::PollThread* thread; + +diff -ru libk3b/tools/k3bmedium.cpp libk3b/tools/k3bmedium.cpp +--- libk3b/tools/k3bmedium.cpp 2009-04-30 01:12:43.000000000 +0200 ++++ libk3b/tools/k3bmedium.cpp 2009-07-23 11:41:53.000000000 +0200 +@@ -155,11 +155,14 @@ + d->diskInfo = d->device->diskInfo(); + + if( d->diskInfo.diskState() != K3b::Device::STATE_NO_MEDIA ) { +- kDebug() << "(K3b::Medium) found medium: (" << d->device->blockDeviceName() << ')' << endl ++ kDebug() << "found medium: (" << d->device->blockDeviceName() << ')' << endl + << "====================================================="; + d->diskInfo.debug(); + kDebug() << "====================================================="; + } ++ else { ++ kDebug() << "no medium found"; ++ } + + if( diskInfo().diskState() == K3b::Device::STATE_COMPLETE || + diskInfo().diskState() == K3b::Device::STATE_INCOMPLETE ) { +diff -ru plugins/decoder/ffmpeg/CMakeLists.txt plugins/decoder/ffmpeg/CMakeLists.txt +--- plugins/decoder/ffmpeg/CMakeLists.txt 2008-09-27 08:33:36.000000000 +0200 ++++ plugins/decoder/ffmpeg/CMakeLists.txt 2009-07-23 11:41:58.000000000 +0200 +@@ -3,14 +3,14 @@ + + ########### next target ############### + +-find_file(newffmpegavcodecpath avcodec.h /usr/include/libavcodec) +- +-if(newffmpegavcodecpath) ++if(FFMPEG_INCLUDE_DIR_OLD_STYLE) ++ message(STATUS "didn't find new ffmpegcodecpath") ++ include_directories (${FFMPEG_INCLUDE_DIR_OLD_STYLE}) ++else(FFMPEG_INCLUDE_DIR_OLD_STYLE) + message(STATUS "found new ffmpegcodecpath") + add_definitions(-DNEWFFMPEGAVCODECPATH) +-else(newffmpegavcodecpath) +- message(STATUS "didn't find new ffmpegcodecpath") +-endif(newffmpegavcodecpath) ++ include_directories (${FFMPEG_INCLUDE_DIR}) ++endif(FFMPEG_INCLUDE_DIR_OLD_STYLE) + + set(k3bffmpegdecoder_PART_SRCS k3bffmpegdecoder.cpp k3bffmpegwrapper.cpp ) + +diff -ru plugins/decoder/ffmpeg/k3bffmpegdecoder.desktop plugins/decoder/ffmpeg/k3bffmpegdecoder.desktop +--- plugins/decoder/ffmpeg/k3bffmpegdecoder.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ plugins/decoder/ffmpeg/k3bffmpegdecoder.desktop 2009-07-23 11:41:58.000000000 +0200 +@@ -14,6 +14,7 @@ + Name[gl]=Descodificador FFMpeg para K3b + Name[he]=מפענח FFMpeg של K3b + Name[hne]=के3बी एफएफएमपीईजी डिकोडर ++Name[it]=Decodificatore FFMpeg di K3b + Name[ja]=K3b FFMpeg デコーダ + Name[km]=កម្មវីធី​ឌិកូដ​ FFMpeg របស់ K3b + Name[ko]=K3b FFMpeg 디코더 +@@ -34,8 +35,8 @@ + Name[uk]=K3b декодувальник FFMpeg + Name[x-test]=xxK3b FFMpeg Decoderxx + Name[zh_CN]=K3b FFMpeg 解码器 ++Name[zh_TW]=K3b FFMpeg 解碼器 + Comment=Decoding module to decode wma files +-Comment[bg]=Декодиращ модул за wma файлове + Comment[cs]=Modul pro dekódování souborů wma + Comment[csb]=Mòdul dekòdërëjący lopczi wma + Comment[da]=Dekodermodul til dekodning af WMA-filer +@@ -50,6 +51,7 @@ + Comment[gl]=Modulo de descodificación para descodificar ficheiros wma + Comment[he]=מודול המפענח קבצי wma + Comment[hne]=डबल्यूएमए फाइल ल डिकोड करे बर डिकोडिंग माड्यूल ++Comment[it]=Decodifica modulare per i file WMA + Comment[ja]=WMA ファイルをデコードするモジュール + Comment[km]=ម៉ូឌុល​ឌិកូដ ដែលត្រូវ​ឌិកូដ​ឯកសារ wma + Comment[ko]=WMA 파일 디코딩 모듈 +@@ -69,6 +71,7 @@ + Comment[uk]=Модуль для декодування файлів wma + Comment[x-test]=xxDecoding module to decode wma filesxx + Comment[zh_CN]=用于解码 WMA 文件的解码模块 ++Comment[zh_TW]=解碼 wma 檔案格式的模組 + Type=Service + ServiceTypes=K3b/Plugin + Icon=preferences-plugin +diff -ru plugins/decoder/flac/k3bflacdecoder.desktop plugins/decoder/flac/k3bflacdecoder.desktop +--- plugins/decoder/flac/k3bflacdecoder.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ plugins/decoder/flac/k3bflacdecoder.desktop 2009-07-23 11:41:59.000000000 +0200 +@@ -14,6 +14,7 @@ + Name[gl]=Descodificador FLAC para K3b + Name[he]=מפענח FLAC של K3b + Name[hne]=के3बी फ्लेक डिकोडर ++Name[it]=Decodificatore FLAC di K3b + Name[ja]=K3b FLAC デコーダ + Name[km]=កម្មវិធី​ឌិកូដ FLAC របស់ K3b + Name[ko]=K3b FLAC 디코더 +@@ -34,8 +35,8 @@ + Name[uk]=K3b декодувальник FLAC + Name[x-test]=xxK3b FLAC Decoderxx + Name[zh_CN]=K3b FLAC 解码器 ++Name[zh_TW]=K3b FLAC 解碼器 + Comment=Decoding module to decode FLAC files +-Comment[bg]=Декодиращ модул за FLAC файлове + Comment[cs]=Modul pro dekódování souborů FLAC + Comment[csb]=Mòdul dekòdërëjący lopczi FLAC + Comment[da]=Dekodermodul til dekodning af FLAC-filer +@@ -50,6 +51,7 @@ + Comment[gl]=Módulo de descodificación de ficheiros FLAC + Comment[he]=מודול המפענח קבצי FLAC + Comment[hne]=फ्लेक फाइल ल डिकोड करे बर डिकोडिंग माड्यूल ++Comment[it]=Decodifica modulare per i file FLAC + Comment[ja]=FLAC ファイルをデコードするモジュール + Comment[km]=ម៉ូឌុល​ឌិកូដ ដែលត្រូវ​ឌិកូដ​ឯកសារ FLAC + Comment[ko]=FLAC 파일 디코딩 모듈 +@@ -69,6 +71,7 @@ + Comment[uk]=Модуль декодування для файлів FLAC + Comment[x-test]=xxDecoding module to decode FLAC filesxx + Comment[zh_CN]=用于解码 FLAC 文件的解码模块 ++Comment[zh_TW]=解碼 FLAC 檔案格式的模組 + Type=Service + ServiceTypes=K3b/Plugin + Icon=preferences-plugin +diff -ru plugins/decoder/libsndfile/k3blibsndfiledecoder.desktop plugins/decoder/libsndfile/k3blibsndfiledecoder.desktop +--- plugins/decoder/libsndfile/k3blibsndfiledecoder.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ plugins/decoder/libsndfile/k3blibsndfiledecoder.desktop 2009-07-23 11:41:59.000000000 +0200 +@@ -14,6 +14,7 @@ + Name[gl]=Descodificador Libsndfile para K3b + Name[he]=מפענח libsndfile של K3b + Name[hne]=के3बी लिबसेंडफाइल डिकोडर ++Name[it]=Decodificatore Libsndfile di K3b + Name[ja]=K3b Libsndfile デコーダ + Name[km]=កម្មវិធី​ឌិកូដ Libsndfile របស់ K3b + Name[ko]=K3b Libsndfile 디코더 +@@ -34,8 +35,8 @@ + Name[uk]=Декодер Libsndfile для K3b + Name[x-test]=xxK3b Libsndfile Decoderxx + Name[zh_CN]=K3b Libsndfile 解码器 ++Name[zh_TW]=K3b Libsndfile 解碼器 + Comment=Decoding module to decode audio files supported by libsndfile +-Comment[bg]=Декодиращ модул за декодиране на аудио файлове с поддръжка на libsndfile + Comment[cs]=Modul pro dekódování audio souborů posporovaných libsndfile + Comment[csb]=Mòdul dekòdërëjący lopczi aùdio wpiséróné przez libsndfile + Comment[da]=Dekodermodul til dekodning af filer som undersøttes af libsndfile +@@ -49,6 +50,7 @@ + Comment[ga]=Modúl díchódaithe a dhíchódaíonn comhaid fhuaime a dtacaíonn libsndfile leo + Comment[gl]=Módulo de descodificación de ficheiros de son soportados por libsndfile + Comment[he]=מודול המפענח קבצי שמע הנתמכים על ידי libsndfile ++Comment[it]=Decodifica modulare per i file audio supportati da libsndfile + Comment[ja]=libsndfile がサポートするオーディオファイルをデコードするモジュール + Comment[km]=ម៉ូឌុល​ឌិកូដ ដែលត្រូវ​ឌិកូដ​ឯកសារ​អូឌីយ៉ូ​ដែលបាន​គាំទ្រ​ដោយ libsndfile + Comment[ko]=libsndfile이 지원하는 오디오 파일 디코딩 모듈 +@@ -68,6 +70,7 @@ + Comment[uk]=Модуль декодування звукових файлів, що підтримується libsndfile + Comment[x-test]=xxDecoding module to decode audio files supported by libsndfilexx + Comment[zh_CN]=用于解码被 libsndfile 支持的文件的解码模块 ++Comment[zh_TW]=解碼 libsndfile 支援的音效檔的模組 + Type=Service + ServiceTypes=K3b/Plugin + Icon=preferences-plugin +diff -ru plugins/decoder/mp3/k3bmaddecoder.desktop plugins/decoder/mp3/k3bmaddecoder.desktop +--- plugins/decoder/mp3/k3bmaddecoder.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ plugins/decoder/mp3/k3bmaddecoder.desktop 2009-07-23 11:41:58.000000000 +0200 +@@ -14,6 +14,7 @@ + Name[gl]=Descodificador MAD para K3b + Name[he]=מפענח MAD של K3b + Name[hne]=के3बी एमएडी डिकोडर ++Name[it]=Decodificatore MAD di K3b + Name[ja]=K3b MAD デコーダ + Name[km]=កម្មវិធី​ឌិកូដ MAD របស់ K3b + Name[ko]=K3b MAD 디코더 +@@ -34,8 +35,8 @@ + Name[uk]=Декодер MAD для K3b + Name[x-test]=xxK3b MAD Decoderxx + Name[zh_CN]=K3b MAD 解码器 ++Name[zh_TW]=K3b MAD 解碼器 + Comment=Decoding module to decode MPEG 1 Layer III files +-Comment[bg]=Декодиращ модул за MPEG 1 Layer III файлове + Comment[cs]=Modul pro dekódování souborů MPEG 1 Layer III + Comment[csb]=Mòdul dekòdërëjący lopczi MPEG Layer III + Comment[da]=Dekodermodul til dekodning af MPEG 1 Layer III-filer +@@ -50,6 +51,7 @@ + Comment[gl]=Módulo de descodificación de ficheiros MPEG 1 capa III + Comment[he]=מודול המפענח קבצי MPEG 1 שכבה lll + Comment[hne]=एमपीईजी १ लेयर फाइल ल डिकोड करे बर डिकोडिंग माड्यूल ++Comment[it]=Decodifica modulare di file MPEG 1 Layer III + Comment[ja]=MPEG 1 Layer III ファイルをデコードするモジュール + Comment[km]=ម៉ូឌុល​ឌិកូដ ដែលត្រូវ​ឌិកូដ​ឯកសារ MPEG 1 ស្រទាប់ III + Comment[ko]=MPEG 1 레이어 3(MP3) 파일 디코딩 모듈 +@@ -69,6 +71,7 @@ + Comment[uk]=Модуль декодування файлів MPEG 1 Layer III + Comment[x-test]=xxDecoding module to decode MPEG 1 Layer III filesxx + Comment[zh_CN]=用于解码 MPEG 1 Layer III(mp3) 文件的解码模块 ++Comment[zh_TW]=解碼 MP3 檔案格式的模組 + Type=Service + ServiceTypes=K3b/Plugin + Icon=preferences-plugin +diff -ru plugins/decoder/musepack/k3bmpcdecoder.desktop plugins/decoder/musepack/k3bmpcdecoder.desktop +--- plugins/decoder/musepack/k3bmpcdecoder.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ plugins/decoder/musepack/k3bmpcdecoder.desktop 2009-07-23 11:41:59.000000000 +0200 +@@ -14,6 +14,7 @@ + Name[gl]=Descodificador Musepack para K3b + Name[he]=מפענח Musepack של K3b + Name[hne]=के3बी म्यूजपैक डिकोडर ++Name[it]=Decodificatore Musepack di K3b + Name[ja]=K3b Musepack デコーダ + Name[km]=កម្មវិធី​ឌិកូដ Musepack របស់ K3b + Name[ko]=K3b Musepack 디코더 +@@ -34,8 +35,8 @@ + Name[uk]=Декодер Musepack для K3b + Name[x-test]=xxK3b Musepack Decoderxx + Name[zh_CN]=K3b Musepack 解码器 ++Name[zh_TW]=K3b Musepack 解碼器 + Comment=Decoding module to decode Musepack audio files +-Comment[bg]=Декодиращ модул за аудио файлове Musepack + Comment[cs]=Modul pro dekódování souborů Musepack + Comment[csb]=Mòdul dekòdërëjący lopczi Musepack + Comment[da]=Dekodermodul til dekodning af Musepack-lydfiler +@@ -50,6 +51,7 @@ + Comment[gl]=Módulo de descodificación de ficheiros de son Musepack + Comment[he]=מודול המפענח קבצי שמע Musepack + Comment[hne]=म्यूजपैक फाइल ल डिकोड करे बर डिकोडिंग माड्यूल ++Comment[it]=Decodifica modulare per i file audio Musepack + Comment[ja]=Musepack オーディオファイルをデコードするモジュール + Comment[km]=ម៉ូឌុល​ឌិកូដ ដែលត្រូវ​ឌិកូដ​ឯកសារ​អូឌីយ៉ូ Musepack + Comment[ko]=Musepack 오디오 파일 디코딩 모듈 +@@ -69,6 +71,7 @@ + Comment[uk]=Модуль декодування звукових файлів Musepack + Comment[x-test]=xxDecoding module to decode Musepack audio filesxx + Comment[zh_CN]=用于解码 Musepack 音频文件的解码模块 ++Comment[zh_TW]=解碼 Musepack 音效檔格式的模組 + Type=Service + ServiceTypes=K3b/Plugin + Icon=preferences-plugin +diff -ru plugins/decoder/ogg/k3boggvorbisdecoder.desktop plugins/decoder/ogg/k3boggvorbisdecoder.desktop +--- plugins/decoder/ogg/k3boggvorbisdecoder.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ plugins/decoder/ogg/k3boggvorbisdecoder.desktop 2009-07-23 11:41:59.000000000 +0200 +@@ -14,6 +14,7 @@ + Name[gl]=Descodificador de Ogg Vorbis para K3b + Name[he]=מפענח Ogg Vorbis של K3b + Name[hne]=के3बी ओग वार्बिस डिकोडर ++Name[it]=Decodificatore Ogg Vorbis di K3b + Name[ja]=K3b Ogg Vorbis デコーダ + Name[km]=កម្មវិធី​ឌិកូដ Ogg Vorbis របស់ K3b + Name[ko]=K3b Ogg 보비스 디코더 +@@ -34,9 +35,9 @@ + Name[uk]=Декодер Ogg Vorbis для K3b + Name[x-test]=xxK3b Ogg Vorbis Decoderxx + Name[zh_CN]=K3b Ogg Vorbis 解码器 ++Name[zh_TW]=K3b Ogg Vorbis 解碼器 + X-KDE-ServiceTypes=K3b/Plugin + Comment=Decoding module to decode Ogg Vorbis files +-Comment[bg]=Декодиращ модул за Ogg Vorbis файлове + Comment[cs]=Modul pro dekódování souborů Ogg Vorbis + Comment[csb]=Mòdul dekòdërëjący lopczi Ogg Vorbis + Comment[da]=Dekodermodul til dekodning af Ogg Vorbis-filer +@@ -51,6 +52,7 @@ + Comment[gl]=Módulo de descodificación de ficheiros de son Ogg Vorbis + Comment[he]=מודול המפענח קבצי Ogg Vorbis + Comment[hne]=ओग वार्बिस फाइल ल डिकोड करे बर डिकोडिंग माड्यूल ++Comment[it]=Decodifica modulare per i file Ogg Vorbis + Comment[ja]=Ogg Vorbis ファイルをデコードするモジュール + Comment[km]=ម៉ូឌុល​ឌិកូដ ដែលត្រូវ​ឌិកូដ​ឯកសារ Ogg Vorbis + Comment[ko]=Ogg 보비스 파일 디코딩 모듈 +@@ -70,6 +72,7 @@ + Comment[uk]=Модуль декодування файлів Ogg Vorbis + Comment[x-test]=xxDecoding module to decode Ogg Vorbis filesxx + Comment[zh_CN]=用于解码 Ogg Vorbis 文件的解码模块 ++Comment[zh_TW]=解碼 Ogg Vorbis 檔案格式的模組 + Type=Service + ServiceTypes=K3b/Plugin + Icon=preferences-plugin +diff -ru plugins/decoder/skeleton.desktop plugins/decoder/skeleton.desktop +--- plugins/decoder/skeleton.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ plugins/decoder/skeleton.desktop 2009-07-23 11:41:59.000000000 +0200 +@@ -13,6 +13,7 @@ + Name[gl]=Descodificador ??? para K3b + Name[he]=מפענח ??? של K3b + Name[hne]=के3बी ??? डिकोडर ++Name[it]=Decodificatore ??? di K3b + Name[ja]=K3b ??? デコーダ + Name[km]=កម្មវិធី​ឌិកូដ ??? របស់ K3b + Name[ko]=K3b ??? 디코더 +@@ -32,8 +33,8 @@ + Name[uk]=Декодер ??? для K3b + Name[x-test]=xxK3b ??? Decoderxx + Name[zh_CN]=K3b ??? 解码器 ++Name[zh_TW]=K3b ??? 解碼器 + Comment=Decoding module to decode ??? files +-Comment[bg]=Декодиращ модул за ??? файлове + Comment[cs]=Modul pro dekódování souborů ??? + Comment[csb]=Mòdul dekòdërëjący lopczi ??? + Comment[da]=Dekodermodul til dekodning af ???-filer +@@ -47,6 +48,7 @@ + Comment[gl]=Módulo de descodificación de ficheiros ??? + Comment[he]=מודול המפענח קבצי ??? + Comment[hne]=??? फाइल ल डिकोड करे बर डिकोडिंग माड्यूल ++Comment[it]=Decodifica modulare dei file ??? + Comment[ja]=??? ファイルをデコードするモジュール + Comment[km]=ម៉ូឌុល​ឌិកូដ ដែលត្រូវ​ឌិកូដ​ឯកសារ ??? + Comment[ko]=??? 파일 디코딩 모듈 +@@ -66,6 +68,7 @@ + Comment[uk]=Модуль декодування файлів ??? + Comment[x-test]=xxDecoding module to decode ??? filesxx + Comment[zh_CN]=用于解码 ??? 文件的解码模块 ++Comment[zh_TW]=解碼 ??? 檔案的模組 + Type=Service + X-KDE-ServiceTypes=K3b/Plugin + +diff -ru plugins/decoder/wave/k3bwavedecoder.desktop plugins/decoder/wave/k3bwavedecoder.desktop +--- plugins/decoder/wave/k3bwavedecoder.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ plugins/decoder/wave/k3bwavedecoder.desktop 2009-07-23 11:41:58.000000000 +0200 +@@ -14,6 +14,7 @@ + Name[gl]=Descodificador de Wave para K3b + Name[he]=מפענח Wave של K3b + Name[hne]=के3बी वेव डिकोडर ++Name[it]=Decodificatore Wave di K3b + Name[ja]=K3b wave デコーダ + Name[km]=កម្មវិធី​ឌិកូដ Wave របស់ K3b + Name[ko]=K3b 웨이브 디코더 +@@ -34,8 +35,8 @@ + Name[uk]=Декодер Wave для K3b + Name[x-test]=xxK3b Wave Decoderxx + Name[zh_CN]=K3b Wave 解码器 ++Name[zh_TW]=K3b Wave 解碼器 + Comment=Decoding module to decode wave files +-Comment[bg]=Декодиращ модул за wave файлове + Comment[cs]=Modul pro dekódování souborů wave + Comment[csb]=Mòdul dekòdërëjący lopczi wave + Comment[da]=Dekodermodul til dekodning af wave-filer +@@ -50,6 +51,7 @@ + Comment[gl]=Módulo de descodificación de ficheiros wave + Comment[he]=מודול המפענח קבצי Wave + Comment[hne]=वेव फाइल ल डिकोड करे बर डिकोडिंग माड्यूल ++Comment[it]=Decodifica modulare di file WAVE + Comment[ja]=wave ファイルをデコードするモジュール + Comment[km]=ម៉ូឌុល​ឌិកូដ ដែលត្រូវ​ឌិកូដ​ឯកសារ wave + Comment[ko]=웨이브 파일 디코딩 모듈 +@@ -69,6 +71,7 @@ + Comment[uk]=Модуль декодування файлів wave + Comment[x-test]=xxDecoding module to decode wave filesxx + Comment[zh_CN]=用于解码 WAVE 文件的解码模块 ++Comment[zh_TW]=解碼 wave 檔案格式的模組 + Type=Service + ServiceTypes=K3b/Plugin + Icon=preferences-plugin +diff -ru plugins/encoder/external/k3bexternalencodercommand.cpp plugins/encoder/external/k3bexternalencodercommand.cpp +--- plugins/encoder/external/k3bexternalencodercommand.cpp 2009-05-26 13:37:33.000000000 +0200 ++++ plugins/encoder/external/k3bexternalencodercommand.cpp 2009-07-23 11:41:58.000000000 +0200 +@@ -28,7 +28,7 @@ + KSharedConfig::Ptr c = KGlobal::config(); + KConfigGroup grp(c,"K3bExternalEncoderPlugin" ); + +- QList cl; ++ QHash cl; + + QStringList cmds = grp.readEntry( "commands",QStringList() ); + for( QStringList::iterator it = cmds.begin(); it != cmds.end(); ++it ) { +@@ -43,21 +43,36 @@ + else if( cmdString[i] == "wave" ) + cmd.writeWaveHeader = true; + } +- cl.append(cmd); ++ cl.insert( cmd.name, cmd ); + } + + // some defaults +- if( cmds.isEmpty() ) { +- // check if the lame encoding plugin has been compiled ++ // check if the lame encoding plugin has been compiled + #ifndef HAVE_LAME +- K3bExternalEncoderCommand lameCmd; +- lameCmd.name = "Mp3 (Lame)"; +- lameCmd.extension = "mp3"; +- lameCmd.command = "lame -h --tt %t --ta %a --tl %m --ty %y --tc %c - %f"; ++ if ( !cl.contains( "Mp3 (Lame)" ) ) { ++ if( !KStandardDirs::findExe( "lame" ).isEmpty() ) { ++ K3bExternalEncoderCommand lameCmd; ++ lameCmd.name = "Mp3 (Lame)"; ++ lameCmd.extension = "mp3"; ++ lameCmd.command = "lame " ++ "-r " ++ "--bitwidth 16 " ++ "--little-endian " ++ "-s 44.1 " ++ "-h " ++ "--tt %t " ++ "--ta %a " ++ "--tl %m " ++ "--ty %y " ++ "--tc %c " ++ "- %f"; + +- cl.append( lameCmd ); ++ cl.insert( lameCmd.name, lameCmd ); ++ } ++ } + #endif + ++ if ( !cl.contains( "Flac" ) ) { + if( !KStandardDirs::findExe( "flac" ).isEmpty() ) { + K3bExternalEncoderCommand flacCmd; + flacCmd.name = "Flac"; +@@ -66,7 +81,7 @@ + "-V " + "-o %f " + "--force-raw-format " +- "--endian=big " ++ "--endian=little " + "--channels=2 " + "--sample-rate=44100 " + "--sign=signed " +@@ -78,9 +93,11 @@ + "-T ALBUM=%m " + "-"; + +- cl.append( flacCmd ); ++ cl.insert( flacCmd.name, flacCmd ); + } ++ } + ++ if ( !cl.contains( "Musepack" ) ) { + if( !KStandardDirs::findExe( "mppenc" ).isEmpty() ) { + K3bExternalEncoderCommand mppCmd; + mppCmd.name = "Musepack"; +@@ -97,14 +114,13 @@ + "--year %y " + "- " + "%f"; +- mppCmd.swapByteOrder = true; + mppCmd.writeWaveHeader = true; + +- cl.append( mppCmd ); ++ cl.insert( mppCmd.name, mppCmd ); + } + } + +- return cl; ++ return cl.values(); + } + + +diff -ru plugins/encoder/external/k3bexternalencoder.cpp plugins/encoder/external/k3bexternalencoder.cpp +--- plugins/encoder/external/k3bexternalencoder.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ plugins/encoder/external/k3bexternalencoder.cpp 2009-07-23 11:41:58.000000000 +0200 +@@ -1,10 +1,8 @@ + /* +- * +- * +- * Copyright (C) 2003-2008 Sebastian Trueg ++ * Copyright (C) 2003-2009 Sebastian Trueg + * + * This file is part of the K3b project. +- * Copyright (C) 1998-2008 Sebastian Trueg ++ * Copyright (C) 1998-2009 Sebastian Trueg + * + * 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 +@@ -26,9 +24,9 @@ + #include + #include + +-#include +-#include +-#include ++#include ++#include ++#include + + #include + +@@ -289,7 +287,7 @@ + return false; + } + +- return true; ++ return d->process->waitForBytesWritten( -1 ); + } + + +@@ -303,15 +301,7 @@ + + long written = 0; + +- // +- // we swap the bytes to reduce user irritation ;) +- // This is a little confused: We used to swap the byte order +- // in older versions of this encoder since little endian seems +- // to "feel" more natural. +- // So now that we have a swap option we have to invert it to ensure +- // compatibility +- // +- if( !d->cmd.swapByteOrder ) { ++ if( d->cmd.swapByteOrder ) { + char* buffer = new char[len]; + for( unsigned int i = 0; i < len-1; i+=2 ) { + buffer[i] = data[i+1]; +@@ -324,6 +314,8 @@ + else + written = d->process->write( data, len ); + ++ d->process->waitForBytesWritten( -1 ); ++ + return written; + } + else +diff -ru plugins/encoder/external/k3bexternalencoder.desktop plugins/encoder/external/k3bexternalencoder.desktop +--- plugins/encoder/external/k3bexternalencoder.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ plugins/encoder/external/k3bexternalencoder.desktop 2009-07-23 11:41:58.000000000 +0200 +@@ -14,6 +14,7 @@ + Name[gl]=Codificador externo de son para K3b + Name[he]=מקודד שמע חיצוני של K3b + Name[hne]=के३बी बाहरी आडियो एनकोडर ++Name[it]=Codificatore audio esterno di K3b + Name[ja]=K3b 外部オーディオエンコーダ + Name[km]=កម្មវិធី​អ៊ិនកូដ​អូឌីយ៉ូ​ខាងក្រៅ​របស់ K3b + Name[ko]=K3b 외부 오디오 인코더 +@@ -26,7 +27,7 @@ + Name[pt]=Codificador de Áudio Externo do K3b + Name[pt_BR]=Codificador de Áudio Externo do K3b + Name[ro]=Codor K3b Audio extern +-Name[ru]=Внешнй кодер звука ++Name[ru]=Внешний кодер звука + Name[sl]=K3b-jev zunanji zvočni kodirnik + Name[sv]=K3b extern ljudkodare + Name[th]=K3b - ตัวเข้ารหัสเสียงภายนอก +@@ -34,8 +35,8 @@ + Name[uk]=Зовнішній кодувальник аудіо для K3b + Name[x-test]=xxK3b External Audio Encoderxx + Name[zh_CN]=K3b 扩展音频编码器 ++Name[zh_TW]=K3b 外部音效編碼器 + Comment=Encoding module that allows specifying an encoding command +-Comment[bg]=Кодиращ модул, позволяващ задаването на команда + Comment[csb]=Mòdul kòdërëjący, jaczi zezwôlô na wpisanié kòderëjącegò pòletu + Comment[da]=Indkodningsmodul som muliggør angivelse af en indkodningskommando + Comment[de]=Kodierungsmodul zur Unterstützung externer Kodierprogramme +@@ -48,6 +49,7 @@ + Comment[ga]=Modúl ionchódaithe a cheadaíonn duit ordú ionchódaithe a roghnú + Comment[gl]=Módulo de codificación que permite especificar un comando + Comment[he]=מודול קידוד אשר מאפשר לציין פקודת קידוד ספציפית ++Comment[it]=Codifica modulare che permette di specificare un comando di codifica + Comment[ja]=エンコードコマンドの指定を可能にするエンコードモジュール + Comment[km]=ម៉ូឌុល​អ៊ិនកូដ ដែល​អនុញ្ញាត​ឲ្យ​បញ្ជាក់​ពាក្យបញ្ជា​អ៊ិនកូដ + Comment[lv]=Kodēšanas modulis, kurš ļauj norādīt kodēšanas komandu +@@ -66,6 +68,7 @@ + Comment[uk]=Модуль кодування, що дозволяє визначення команди кодування + Comment[x-test]=xxEncoding module that allows specifying an encoding commandxx + Comment[zh_CN]=允许指定编码命令的编码模块 ++Comment[zh_TW]=讓您透過指定外部指令的方式做編碼的模組 + Type=Service + ServiceTypes=K3b/Plugin + Icon=preferences-plugin +diff -ru plugins/encoder/external/k3bexternalencoder.h plugins/encoder/external/k3bexternalencoder.h +--- plugins/encoder/external/k3bexternalencoder.h 2009-04-21 19:54:02.000000000 +0200 ++++ plugins/encoder/external/k3bexternalencoder.h 2009-07-23 11:41:58.000000000 +0200 +@@ -1,10 +1,8 @@ + /* +- * +- * +- * Copyright (C) 2003-2008 Sebastian Trueg ++ * Copyright (C) 2003-2009 Sebastian Trueg + * + * This file is part of the K3b project. +- * Copyright (C) 1998-2008 Sebastian Trueg ++ * Copyright (C) 1998-2009 Sebastian Trueg + * + * 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 +diff -ru plugins/encoder/external/kcm_k3bexternalencoder.desktop plugins/encoder/external/kcm_k3bexternalencoder.desktop +--- plugins/encoder/external/kcm_k3bexternalencoder.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ plugins/encoder/external/kcm_k3bexternalencoder.desktop 2009-07-23 11:41:58.000000000 +0200 +@@ -1,6 +1,5 @@ + [Desktop Entry] + Name=K3b External Audio Encoder Config Widget +-Name[bg]=Настройване на K3b External Audio Encoder + Name[cs]=Externí audio enkodér K3b + Name[csb]=Òkno nastôwów bùtnowegò kòdera audio dlô K3b + Name[da]=Konfigurationskontrol til K3b ekstern lydindkodning +@@ -15,6 +14,7 @@ + Name[gl]=Widget de configuración do Codificador externo de son para K3b + Name[he]=וידג'ט הגדרות מקודד חיצוני של K3b + Name[hne]=के३बी बाहरी आडियो एनकोडर कान्फिग विजेट ++Name[it]=Elemento di configurazione codificatore audio esterno di K3b + Name[ja]=K3b 外部オーディオエンコーダ設定ウィジェット + Name[km]=ធាតុក្រាហ្វិក​កំណត់​រចនា​សម្ព័ន្ធ​កម្មវិធី​អ៊ិនកូដ​អូឌីយ៉ូ​ខាងក្រៅ​របស់ K3b + Name[lv]=K3b ārējā audio kodētāja konfigurācijas logdaļa +@@ -34,6 +34,7 @@ + Name[uk]=Віджет налаштування зовнішнього кодувальника звуку для K3b + Name[x-test]=xxK3b External Audio Encoder Config Widgetxx + Name[zh_CN]=K3b 扩展音频编码器配置部件 ++Name[zh_TW]=K3b 外部音效編碼器設定元件 + Type=Service + X-KDE-ServiceTypes=KCModule + X-KDE-Library=kcm_k3bexternalencoder +diff -ru plugins/encoder/lame/k3blameencoder.desktop plugins/encoder/lame/k3blameencoder.desktop +--- plugins/encoder/lame/k3blameencoder.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ plugins/encoder/lame/k3blameencoder.desktop 2009-07-23 11:41:58.000000000 +0200 +@@ -14,6 +14,7 @@ + Name[gl]=Codificador de Mp3 Lame para K3b + Name[he]=מקודד קבצי Lame Mp3 של K3b + Name[hne]=के३बी लेम एमपी३ एनकोडर ++Name[it]=Codificatore MP3 Lame di K3b + Name[ja]=K3b Lame MP3 エンコーダ + Name[km]=កម្មវិធី​អ៊ិនកូដ Lame Mp3 របស់ K3b + Name[ko]=K3b Lame Mp3 인코더 +@@ -34,8 +35,8 @@ + Name[uk]=Кодувальник Lame Mp3 для K3b + Name[x-test]=xxK3b Lame Mp3 Encoderxx + Name[zh_CN]=K3b Lame Mp3 编码器 ++Name[zh_TW]=K3b Lame MP3 編碼器 + Comment=Encoding module to encode MPEG1 Layer III (mp3) files +-Comment[bg]=Кодиращ модул за MPEG1 Layer III (mp3) файлове + Comment[csb]=Mòdul kòdërëjący lopczi MPEG1 Layer III (mp3) + Comment[da]=Indkodningsmodul til MPEG 1 Layer III-filer (mp3) + Comment[de]=Kodierungsmodul zur Kodierung von MPEG1 Layer III-Dateien (MP3) +@@ -49,6 +50,7 @@ + Comment[gl]=Módulo de codificación para ficheiros MPEG capa III (mp3) + Comment[he]=מודול קידוד לקבצי MPEG1 שכבה lll (mp3) + Comment[hne]=एमपीईजी १ लेयर III (एमपी३) फाइल ल डिकोड करे बर एनकोडिंग माड्यूल ++Comment[it]=Codifica modulare per file MPEG1 Layer III (MP3) + Comment[ja]=MPEG 1 Layer III (MP3) ファイルをエンコードするモジュール + Comment[km]=ម៉ូឌុល​អ៊ិនកូដ ដែលត្រូវ​អ៊ិនកូដ​ឯកសារ MPEG1 ស្រទាប់ III (mp3) + Comment[ko]=MPEG 1 레이어 3(MP3) 파일 인코딩 모듈 +@@ -68,6 +70,7 @@ + Comment[uk]=Модуль кодування файлів MPEG1 Layer III (mp3) + Comment[x-test]=xxEncoding module to encode MPEG1 Layer III (mp3) filesxx + Comment[zh_CN]=用于编码 MPEG 1 Layer III(mp3) 文件的编码模块 ++Comment[zh_TW]=編碼 MP3 檔案格式的模組 + Type=Service + ServiceTypes=K3b/Plugin + Icon=preferences-plugin +diff -ru plugins/encoder/lame/kcm_k3blameencoder.desktop plugins/encoder/lame/kcm_k3blameencoder.desktop +--- plugins/encoder/lame/kcm_k3blameencoder.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ plugins/encoder/lame/kcm_k3blameencoder.desktop 2009-07-23 11:41:58.000000000 +0200 +@@ -1,6 +1,5 @@ + [Desktop Entry] + Name=K3b Lame Mp3 Encoder Config Module +-Name[bg]=Модул за настройване на K3b Lame Mp3 Encoder + Name[cs]=Ovládací modul K3b Lame Mp3 formátu + Name[csb]=Mòdul nastôwów kòdera Lame Mp3 dlô K3b + Name[da]=Konfigurationsmodul til K3b Lame mp3-indkodning +@@ -15,6 +14,7 @@ + Name[gl]=Módulo de configuración do Codificador mp3 Lame para K3b + Name[he]=הגדרות מודול קידוד קבצי Lame Mp3 של K3b + Name[hne]=के३बी लेम एमपी३ एनकोडर कान्फिग माड्यूल ++Name[it]=Modulo di configurazione codificatore MP3 Lame di K3b + Name[ja]=K3b Lame MP3 エンコーダ設定モジュール + Name[km]=ម៉ូឌុល​កំណត់​រចនា​សម្ព័ន្ធ​កម្មវិធី​អ៊ិនកូដ Lame Mp3 របស់ K3b + Name[lv]=K3b Lame Mp3 kodētāja configurācijas modulis +@@ -32,6 +32,7 @@ + Name[uk]=Модуль налаштування кодувальника Lame Mp3 K3b + Name[x-test]=xxK3b Lame Mp3 Encoder Config Modulexx + Name[zh_CN]=K3b Lame Mp3 编码器配置部件 ++Name[zh_TW]=K3b Lame MP3 編碼器設定模組 + Type=Service + X-KDE-ServiceTypes=KCModule + X-KDE-Library=kcm_k3blameencoder +diff -ru plugins/encoder/ogg/k3boggvorbisencoder.desktop plugins/encoder/ogg/k3boggvorbisencoder.desktop +--- plugins/encoder/ogg/k3boggvorbisencoder.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ plugins/encoder/ogg/k3boggvorbisencoder.desktop 2009-07-23 11:41:58.000000000 +0200 +@@ -14,6 +14,7 @@ + Name[gl]=Codificador de Ogg Vorbis para K3b + Name[he]=מקודד Ogg Vorbis של K3b + Name[hne]=के3बी ओग वार्बिस एनकोडर ++Name[it]=Codificatore Ogg Vorbis di K3b + Name[ja]=K3b Ogg Vorbis エンコーダ + Name[km]=កម្មវិធី​អ៊ិនកូដ Ogg Vorbis របស់ K3b + Name[ko]=K3b Ogg 보비스 인코더 +@@ -33,8 +34,8 @@ + Name[uk]=Кодувальник Ogg Vorbis для K3b + Name[x-test]=xxK3b Ogg Vorbis Encoderxx + Name[zh_CN]=K3b Ogg Vorbis 编码器 ++Name[zh_TW]=K3b Ogg Vorbis 編碼器 + Comment=Encoding module to encode Ogg Vorbis files +-Comment[bg]=Кодиращ модул за Ogg Vorbis файлове + Comment[cs]=Modul pro kompresi do souborů Ogg Vorbis + Comment[csb]=Mòdul kòdërëjący lopczi Ogg Vorbis + Comment[da]=Indkodnignsmodul til Ogg Vorbis-filer +@@ -49,6 +50,7 @@ + Comment[gl]=Módulo de codificación para ficheiros Ogg Vorbis + Comment[he]=מודול קידוד על מנת לקודד קבצי Ogg Vorbis + Comment[hne]=ओग वार्बिस फाइल ल एनकोड करे बर एनकोडिंग माड्यूल ++Comment[it]=Codifica modulare di file Ogg Vorbis + Comment[ja]=Ogg Vorbis ファイルをエンコードするモジュール + Comment[km]=ម៉ូឌុល​អ៊ិនកូដ ដែលត្រូវ​អ៊ិនកូដ​ឯកសារ Ogg Vorbis + Comment[ko]=Ogg 보비스 파일 인코딩 모듈 +@@ -67,6 +69,7 @@ + Comment[uk]=Модуль кодування файлів Ogg Vorbis + Comment[x-test]=xxEncoding module to encode Ogg Vorbis filesxx + Comment[zh_CN]=用于编码 Ogg Vorbis 文件的编码模块 ++Comment[zh_TW]=編碼 Ogg Vorbis 檔案格式的模組 + Type=Service + ServiceTypes=K3b/Plugin + Icon=preferences-plugin +diff -ru plugins/encoder/ogg/kcm_k3boggvorbisencoder.desktop plugins/encoder/ogg/kcm_k3boggvorbisencoder.desktop +--- plugins/encoder/ogg/kcm_k3boggvorbisencoder.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ plugins/encoder/ogg/kcm_k3boggvorbisencoder.desktop 2009-07-23 11:41:58.000000000 +0200 +@@ -1,6 +1,5 @@ + [Desktop Entry] + Name=K3b Ogg Vorbis Encoder Config Widget +-Name[bg]=Настройване на K3b Ogg Vorbis Encoder + Name[csb]=Òkno nastôwów kòdera Ogg Vorbis dlô K3b + Name[da]=Konfigurationskontrol til K3b Ogg Vorbis-indkodning + Name[de]=K3b-Bedienelement zur Kodierung von Ogg Vorbis +@@ -13,6 +12,7 @@ + Name[gl]=Widget de configuración do Codificador Ogg Vorbis para K3b + Name[he]=וידג'ט הגדרות קידוד קבצי Ogg Vorbis של K3b + Name[hne]=के3बी ओग वार्बिस एनकोडर कान्फिग विजेट ++Name[it]=Elemento di configurazione codificatore Ogg Vorbis di K3b + Name[ja]=K3b Ogg Vorbis エンコーダ設定ウィジェット + Name[km]=ធាតុ​ក្រាហ្វិក​កំណត់​រចនា​សម្ព័ន្ធ​កម្មវិធី​អ៊ិនកូដ Ogg Vorbis របស់ K3b + Name[lv]=K3b Ogg Vorbis kodētāja konfigurācijas logdaļa +@@ -30,6 +30,7 @@ + Name[uk]=Віджет налаштування кодувальника Ogg Vorbis K3b + Name[x-test]=xxK3b Ogg Vorbis Encoder Config Widgetxx + Name[zh_CN]=K3b Ogg Vorbis 编码器配置部件 ++Name[zh_TW]=K3b Ogg Vorbis 編碼器設定元件 + Type=Service + X-KDE-ServiceTypes=KCModule + X-KDE-Library=kcm_k3boggvorbisencoder +diff -ru plugins/encoder/skeleton.desktop plugins/encoder/skeleton.desktop +--- plugins/encoder/skeleton.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ plugins/encoder/skeleton.desktop 2009-07-23 11:41:58.000000000 +0200 +@@ -13,6 +13,7 @@ + Name[gl]=Codificador ??? para K3b + Name[he]=מקודד ??? של K3b + Name[hne]=के३बी ??? एनकोडर ++Name[it]=Codificatore ??? di K3b + Name[ja]=K3b ??? エンコーダ + Name[km]=កម្មវិធី​អ៊ិនកូដ ??? របស់ K3b + Name[ko]=K3b ??? 인코더 +@@ -32,8 +33,8 @@ + Name[uk]=Кодувальник ??? для K3b + Name[x-test]=xxK3b ??? Encoderxx + Name[zh_CN]=K3b ??? 编码器 ++Name[zh_TW]=K3b ??? 編碼器 + Comment=Encoding module to encode files +-Comment[bg]=Кодиращ модул за файлове + Comment[cs]=Modul pro kompresi do souborů + Comment[csb]=Mòdul kòdërëjący lopczi + Comment[da]=Indkodningsmodul til -filer +@@ -47,6 +48,7 @@ + Comment[gl]=Módulo de configuración para codificar ficheiros + Comment[he]=מודל קידוד לקבצי + Comment[hne]= फाइल ल एनकोड करे बर एनकोडिंग माड्यूल ++Comment[it]=Codificatore modulare di file + Comment[ja]= ファイルをエンコードするモジュール + Comment[km]=ម៉ូឌុល​អ៊ិនកូដ ដែលត្រូវ​អ៊ិនកូដ​ឯកសារ <ឈ្មោះ> + Comment[ko]= 파일 인코딩 모듈 +@@ -65,6 +67,7 @@ + Comment[uk]=Модуль кодування файлів + Comment[x-test]=xxEncoding module to encode filesxx + Comment[zh_CN]=用于编码 文件的编码模块 ++Comment[zh_TW]=編碼 <名稱> 檔案的模組 + Type=Service + X-KDE-ServiceTypes=K3b/Plugin + +diff -ru plugins/encoder/sox/k3bsoxencoder.desktop plugins/encoder/sox/k3bsoxencoder.desktop +--- plugins/encoder/sox/k3bsoxencoder.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ plugins/encoder/sox/k3bsoxencoder.desktop 2009-07-23 11:41:58.000000000 +0200 +@@ -14,6 +14,7 @@ + Name[gl]=Codificador de son SoX para K3b + Name[he]=מקודד קבצי שמע SoX של K3b + Name[hne]=के३बी साक्स आडियो एनकोडर ++Name[it]=Codificatore audio SoX di K3b + Name[ja]=K3b SoX オーディオエンコーダ + Name[km]=កម្មវិធី​អ៊ិនកូដ អូឌីយ៉ូ SoX របស់ K3b + Name[ko]=K3b SoX 오디오 인코더 +@@ -33,8 +34,8 @@ + Name[uk]=Кодувальник звуку SoX для K3b + Name[x-test]=xxK3b SoX Audio Encoderxx + Name[zh_CN]=K3b SoX 音频编码器 ++Name[zh_TW]=K3b SoX 音效編碼器 + Comment=Encoding module to encode many file formats using SoX +-Comment[bg]=Кодиращ модул (с SoX) за много файлови формати + Comment[cs]=Modul pro kompresi do mnoha formátů pomocí SoX + Comment[csb]=Mòdul kòdërëjący wiele fòrmôtów z pòmòcą SoX + Comment[da]=Indkodningsmodul til mange filformater med brug af SoX +@@ -48,6 +49,7 @@ + Comment[ga]=Modúl ionchódaithe a ionchódaíonn a lán formáidí comhaid le SoX + Comment[gl]=Módulo de configuración para codificar varios formatos de ficheiro mediante SoX + Comment[he]=מודול קידוד על מנת לקודד הרבה סוגי קבצים בעזרת SoX ++Comment[it]=Codifica modulare per i molti formati di file che usano SoX + Comment[ja]=SoX を使ってさまざまなファイルフォーマットをエンコードするモジュール + Comment[km]=ម៉ូឌុល​អ៊ិនកូដ ដែលត្រូវ​អ៊ិនកូដ​ទ្រង់ទ្រាយ​ឯកសារច្រើន​ដោយប្រើ SoX + Comment[ko]=SoX를 사용하여 많은 파일을 인코딩하는 모듈 +@@ -66,6 +68,7 @@ + Comment[uk]=Модуль кодування багатьох форматів файлів за допомогою SoX + Comment[x-test]=xxEncoding module to encode many file formats using SoXxx + Comment[zh_CN]=用于编码很多使用 SoX 格式的文件的编码模块 ++Comment[zh_TW]=編碼許多 SoX 支援的檔案格式的模組 + Type=Service + ServiceTypes=K3b/Plugin + Icon=preferences-plugin +diff -ru plugins/project/audiometainforenamer/k3baudiometainforenamerplugin.cpp plugins/project/audiometainforenamer/k3baudiometainforenamerplugin.cpp +--- plugins/project/audiometainforenamer/k3baudiometainforenamerplugin.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ plugins/project/audiometainforenamer/k3baudiometainforenamerplugin.cpp 2009-07-23 11:41:59.000000000 +0200 +@@ -380,7 +380,7 @@ + + + K3bAudioMetainfoRenamerPlugin::K3bAudioMetainfoRenamerPlugin( QObject* parent, const QVariantList& ) +- : K3b::ProjectPlugin( DATA_PROJECTS, true, parent ) ++ : K3b::ProjectPlugin( K3b::Doc::DataProject, true, parent ) + { + setText( i18n("Rename Audio Files") ); + setToolTip( i18n("Rename audio files based on their meta info.") ); +diff -ru plugins/project/audiometainforenamer/k3baudiometainforenamerplugin.desktop plugins/project/audiometainforenamer/k3baudiometainforenamerplugin.desktop +--- plugins/project/audiometainforenamer/k3baudiometainforenamerplugin.desktop 2009-05-26 16:22:58.000000000 +0200 ++++ plugins/project/audiometainforenamer/k3baudiometainforenamerplugin.desktop 2009-07-23 11:41:59.000000000 +0200 +@@ -4,8 +4,10 @@ + Name[de]=K3b-Audio-Metadaten-Umbenennungs-Modul + Name[es]=Renombrador de meta información de audio de K3b + Name[et]=K3b helifailide metainfo põhjal ümbernimetaja ++Name[eu]=K3b-ren audioaren meta-informazioen izen-aldatzailea + Name[fr]=Renommeur de méta-données audio K3b + Name[ga]=Athainmneoir Meiteafhaisnéise Fuaime K3b ++Name[it]=Rinominatore di Meta informazioni audio di K3b + Name[km]=កម្មវិធីប្ដូរ​ឈ្មោះ​ព័ត៌មាន​មេតា​អូឌីយ៉ូ K3b + Name[nb]=K3b metainfo-omnavner for lyd + Name[nds]=Audiometadaten-Ümnömer för K3b +@@ -16,13 +18,16 @@ + Name[sv]=K3b namnändring av ljud med metainformation + Name[uk]=Інструмент перейменування за метаданими K3b + Name[x-test]=xxK3b Audio Metainfo Renamerxx ++Name[zh_TW]=K3b 音效中繼資訊重命名 + Comment=Plugin to rename audio files in a data project based on the meta info. + Comment[da]=Plugin til at omdøbe lydfiler i et dataprojekt baseret på metainfo. + Comment[de]=Modul zum Umbenennen von Audio-Dateien in einem Daten-Projekt, basierend auf den Metadaten. + Comment[es]=Complemento basado en la meta información para renombrar archivos de audio en un proyecto de datos . + Comment[et]=Plugin andmeprojekti helifailide ümbernimetamiseks metainfo põhjal. ++Comment[eu]=Meta-informazioan oinarritutako plugina audioko fitxategiak izenez aldatzeko datuen proiektuan. + Comment[fr]=Module pour renommer des fichiers audio dans un projet de données fondé sur les informations de méta-données. + Comment[ga]=Breiseán a athainmníonn comhaid fhuaime i dtionscadal sonraí, bunaithe ar an mheiteafhaisnéis. ++Comment[it]=Estensione usata per rinominare i file audio in un progetto dati basato su meta informazioni. + Comment[km]=កម្មវិធី​ជំនួយ​ត្រូវ​ប្ដូរ​ឈ្មោះ​ឯកសារ​អូឌីយ៉ូ​នៅ​ក្នុង​គម្រោង​ទិន្នន័យ ដែលមាន​មូលដ្ឋាន​លើ​ព័ត៌មាន​មេតា ។ + Comment[nb]=Programtillegg som gir nytt navn til lydfiler i et dataprosjekt basert på deres metainfo. + Comment[nds]=Moduul för't Ümnömen vun Klangdateien binnen en Datenprojekt na ehr Meta-Informatschonen +@@ -33,6 +38,7 @@ + Comment[sv]=Insticksprogram för att byta namn på ljudfiler i ett dataprojekt baserat på metainformation. + Comment[uk]=Додаток для перейменування звукових файлів у проектах даних на основі метаданих. + Comment[x-test]=xxPlugin to rename audio files in a data project based on the meta info.xx ++Comment[zh_TW]=根據中繼資料來重新命名資料專案中的音效檔的外掛程式。 + Type=Service + ServiceTypes=K3b/Plugin + Icon=preferences-plugin +diff -ru plugins/project/audioprojectcddb/k3baudioprojectcddbplugin.cpp plugins/project/audioprojectcddb/k3baudioprojectcddbplugin.cpp +--- plugins/project/audioprojectcddb/k3baudioprojectcddbplugin.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ plugins/project/audioprojectcddb/k3baudioprojectcddbplugin.cpp 2009-07-23 11:41:59.000000000 +0200 +@@ -41,7 +41,7 @@ + + + K3bAudioProjectCddbPlugin::K3bAudioProjectCddbPlugin( QObject* parent, const QVariantList& ) +- : K3b::ProjectPlugin( AUDIO_CD, false, parent ), ++ : K3b::ProjectPlugin( K3b::Doc::AudioProject, false, parent ), + m_progress(0) + { + setText( i18n("Query Cddb") ); +diff -ru plugins/project/audioprojectcddb/k3baudioprojectcddbplugin.desktop plugins/project/audioprojectcddb/k3baudioprojectcddbplugin.desktop +--- plugins/project/audioprojectcddb/k3baudioprojectcddbplugin.desktop 2009-05-26 16:22:58.000000000 +0200 ++++ plugins/project/audioprojectcddb/k3baudioprojectcddbplugin.desktop 2009-07-23 11:41:59.000000000 +0200 +@@ -4,8 +4,10 @@ + Name[de]=K3b-CDDB-Audio-Modul + Name[es]=Complemento de audio Cddb de K3b + Name[et]=K3b CDDB plugin ++Name[eu]=K3b-ren Cddb audioaren plugina + Name[fr]=Module audio CDDB K3b + Name[ga]=Breiseán Fuaime Cddb K3b ++Name[it]=Estensione audio CDDB di K3b + Name[km]=កម្មវិធី​ជំនួយ​អូឌីយ៉ូ K3b Cddb + Name[nb]=K3b programtillegg for Cddb.lyd + Name[nds]=CDDB-Audiomoduul för K3b +@@ -18,23 +20,27 @@ + Name[tr]=K3b Cddb Ses Eklentisi + Name[uk]=Додаток для роботи з CDDB у K3b + Name[x-test]=xxK3b Cddb Audio Pluginxx ++Name[zh_TW]=K3b Cddb 音效外掛程式 + Comment=Plugin to query a cddb server for information about an audio project. + Comment[da]=Plugin til at forespørge en cddb-server om information om et lydprojekt. + Comment[de]=Modul zur Abfrage eines CDDB-Servers nach Informationen zu einem Audio-Projekt + Comment[es]=Complemento para preguntar a un servidor cddb sobre información en un proyecto de audio. + Comment[et]=Plugin CDDB serverist teabe hankimiseks audioprojekti kohta. ++Comment[eu]=Cddb zerbitzariari audioaren proiektuaren informazioari buruz kontsulta egiteko plugina. + Comment[fr]=Module pour interroger un serveur CDDB pour des informations sur un projet audio. + Comment[ga]=Breiseán a dhéanann iarratais ar eolas faoi thionscadal fuaime ó fhreastalaí cddb. ++Comment[it]=Estensione di interrogazione di un server CDDB per le informazioni su un progetto audio. + Comment[km]=កម្មវិធី​ជំនួយ​ត្រូវ​សួរ​ម៉ាស៊ីន​បម្រើ cddb រក​ព័ត៌មាន​បន្ថែម​អំពី​គម្រោង​អូឌីយ៉ូ ។ + Comment[nb]=Programtillegg som søker i en cddb-tjener etter informasjon om et lydprosjekt. + Comment[nds]=Moduul för de Söök vun Informatschonen över en Klangprojekt op en CDDB-Server + Comment[nl]=Plugin om op een cddb-server informatie op te zoeken over een audioproject. + Comment[pt]=Um 'plugin' para consultar um servidor de CDDB por informações acerca de um projecto de áudio. + Comment[pt_BR]=Plug-in para consultar o servidor cddb por informações sobre um projeto de áudio. +-Comment[ru]=Модуль получения сведений о аудиопроекте с сревера CDDB. ++Comment[ru]=Модуль получения сведений о аудиопроекте с сервера CDDB. + Comment[sv]=Insticksprogram för att hämta information om ett ljudprojekt från en CDDB-server. + Comment[uk]=Додаток для опитування сервера cddb щодо даних про аудіо-проект. + Comment[x-test]=xxPlugin to query a cddb server for information about an audio project.xx ++Comment[zh_TW]=到 cddb 伺服器查詢音效專案的資訊的外掛程式。 + Type=Service + ServiceTypes=K3b/Plugin + Icon=preferences-plugin +diff -ru src/k3b.cpp src/k3b.cpp +--- src/k3b.cpp 2009-05-11 09:58:10.000000000 +0200 ++++ src/k3b.cpp 2009-07-23 11:42:05.000000000 +0200 +@@ -463,13 +463,13 @@ + // create the proper K3b::View (maybe we should put this into some other class like K3b::ProjectManager) + K3b::View* view = 0; + switch( doc->type() ) { +- case K3b::Doc::AUDIO: ++ case K3b::Doc::AudioProject: + view = new K3b::AudioView( static_cast(doc), m_documentTab ); + break; +- case K3b::Doc::DATA: ++ case K3b::Doc::DataProject: + view = new K3b::DataView( static_cast(doc), m_documentTab ); + break; +- case K3b::Doc::MIXED: ++ case K3b::Doc::MixedProject: + { + K3b::MixedDoc* mixedDoc = static_cast(doc); + view = new K3b::MixedView( mixedDoc, m_documentTab ); +@@ -477,13 +477,13 @@ + mixedDoc->audioDoc()->setView( view ); + break; + } +- case K3b::Doc::VCD: ++ case K3b::Doc::VcdProject: + view = new K3b::VcdView( static_cast(doc), m_documentTab ); + break; +- case K3b::Doc::MOVIX: ++ case K3b::Doc::MovixProject: + view = new K3b::MovixView( static_cast(doc), m_documentTab ); + break; +- case K3b::Doc::VIDEODVD: ++ case K3b::Doc::VideoDvdProject: + view = new K3b::VideoDvdView( static_cast(doc), m_documentTab ); + break; + } +@@ -529,7 +529,7 @@ + // see if it's an audio cue file + K3b::CueFileParser parser( url.toLocalFile() ); + if( parser.isValid() && parser.toc().contentType() == K3b::Device::AUDIO ) { +- K3b::Doc* doc = k3bappcore->projectManager()->createProject( K3b::Doc::AUDIO ); ++ K3b::Doc* doc = k3bappcore->projectManager()->createProject( K3b::Doc::AudioProject ); + doc->addUrl( url ); + return doc; + } +@@ -1055,7 +1055,7 @@ + { + slotStatusMsg(i18n("Creating new Audio CD Project.")); + +- K3b::Doc* doc = k3bappcore->projectManager()->createProject( K3b::Doc::AUDIO ); ++ K3b::Doc* doc = k3bappcore->projectManager()->createProject( K3b::Doc::AudioProject ); + + return doc; + } +@@ -1064,7 +1064,7 @@ + { + slotStatusMsg(i18n("Creating new Data CD Project.")); + +- K3b::Doc* doc = k3bappcore->projectManager()->createProject( K3b::Doc::DATA ); ++ K3b::Doc* doc = k3bappcore->projectManager()->createProject( K3b::Doc::DataProject ); + + return doc; + } +@@ -1080,7 +1080,7 @@ + { + slotStatusMsg(i18n("Creating new Video DVD Project.")); + +- K3b::Doc* doc = k3bappcore->projectManager()->createProject( K3b::Doc::VIDEODVD ); ++ K3b::Doc* doc = k3bappcore->projectManager()->createProject( K3b::Doc::VideoDvdProject ); + + return doc; + } +@@ -1090,7 +1090,7 @@ + { + slotStatusMsg(i18n("Creating new Mixed Mode CD Project.")); + +- K3b::Doc* doc = k3bappcore->projectManager()->createProject( K3b::Doc::MIXED ); ++ K3b::Doc* doc = k3bappcore->projectManager()->createProject( K3b::Doc::MixedProject ); + + return doc; + } +@@ -1099,7 +1099,7 @@ + { + slotStatusMsg(i18n("Creating new Video CD Project.")); + +- K3b::Doc* doc = k3bappcore->projectManager()->createProject( K3b::Doc::VCD ); ++ K3b::Doc* doc = k3bappcore->projectManager()->createProject( K3b::Doc::VcdProject ); + + return doc; + } +@@ -1109,7 +1109,7 @@ + { + slotStatusMsg(i18n("Creating new eMovix Project.")); + +- K3b::Doc* doc = k3bappcore->projectManager()->createProject( K3b::Doc::MOVIX ); ++ K3b::Doc* doc = k3bappcore->projectManager()->createProject( K3b::Doc::MovixProject ); + + return doc; + } +diff -ru src/k3b.desktop src/k3b.desktop +--- src/k3b.desktop 2009-05-22 15:37:17.000000000 +0200 ++++ src/k3b.desktop 2009-07-23 11:42:05.000000000 +0200 +@@ -22,6 +22,7 @@ + GenericName[he]=צריבת CD ו- DVD + GenericName[hne]=सीडी अउ डीवीडी बर्निंग + GenericName[hsb]=Palenje CD & DVD ++GenericName[it]=Masterizzazione CD e DVD + GenericName[ja]=CD / DVD 作成 + GenericName[km]=ការ​ដុត​ស៊ីឌី និង​ឌីវីឌី + GenericName[ko]=CD와 DVD 쓰기 +@@ -45,6 +46,7 @@ + GenericName[uk]=Записування КД і DVD + GenericName[x-test]=xxCD & DVD Burningxx + GenericName[zh_CN]=CD & DVD 刻录程序 ++GenericName[zh_TW]=燒錄 CD 與 DVD + Comment=CD writing program + Comment[be]=Праграма запісу CD + Comment[bg]=Програма за запис на CD +@@ -65,6 +67,7 @@ + Comment[he]=תוכנת כתיבת CD + Comment[hne]=सीडी लिखइया प्रोग्राम + Comment[hsb]=Program za pisanje CDow ++Comment[it]=Programma di masterizzazione CD + Comment[ja]=CD 書き込みプログラム + Comment[km]=កម្មវិធី​សរសេរ​ស៊ីឌី + Comment[ko]=CD 쓰기 프로그램 +@@ -88,6 +91,7 @@ + Comment[uk]=Програма запису КД + Comment[x-test]=xxCD writing programxx + Comment[zh_CN]=CD 刻录程序 ++Comment[zh_TW]=CD 燒錄程式 + Terminal=false + Name=K3b + Name[hi]=के3बी +diff -ru src/k3bfiletreeview.cpp src/k3bfiletreeview.cpp +--- src/k3bfiletreeview.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ src/k3bfiletreeview.cpp 2009-07-23 11:42:05.000000000 +0200 +@@ -276,6 +276,7 @@ + header()->hide(); + + setContextMenuPolicy( Qt::CustomContextMenu ); ++ setEditTriggers( QAbstractItemView::NoEditTriggers ); + setSelectionMode(QAbstractItemView::SingleSelection); + // setSortingEnabled( true ); + // setRootIsDecorated( false ); +@@ -296,10 +297,6 @@ + connect( d->model, SIGNAL( expand( const QModelIndex& ) ), + this, SLOT( slotExpandUrl( const QModelIndex& ) ) ); + +- // add the default places +- d->model->addPlace( i18n( "Home" ), KIcon("user-home"), QDir::homePath() ); +- d->model->addPlace( i18n( "Root" ), KIcon("folder-red"), KUrl( "/" ) ); +- + connect( this, SIGNAL(clicked(const QModelIndex&)), SLOT(slotClicked(const QModelIndex&)) ); + connect( this, SIGNAL(customContextMenuRequested( const QPoint& )), SLOT( slotContextMenu( const QPoint& ) ) ); + } +diff -ru src/k3bmetaitemmodel.cpp src/k3bmetaitemmodel.cpp +--- src/k3bmetaitemmodel.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ src/k3bmetaitemmodel.cpp 2009-07-23 11:42:05.000000000 +0200 +@@ -324,6 +324,16 @@ + } + + ++QModelIndex K3b::MetaItemModel::indexForSubModel( QAbstractItemModel* model ) const ++{ ++ if( !d->places.empty() ) { ++ if( Place* place = d->placeForModel( model ) ) ++ return createIndex( place->row, 0, place ); ++ } ++ return QModelIndex(); ++} ++ ++ + QAbstractItemModel* K3b::MetaItemModel::subModelForIndex( const QModelIndex& index ) const + { + if ( index.isValid() ) { +diff -ru src/k3bmetaitemmodel.h src/k3bmetaitemmodel.h +--- src/k3bmetaitemmodel.h 2009-05-26 11:39:57.000000000 +0200 ++++ src/k3bmetaitemmodel.h 2009-07-23 11:42:05.000000000 +0200 +@@ -41,6 +41,7 @@ + MetaItemModel( QObject* parent = 0 ); + ~MetaItemModel(); + ++ QModelIndex indexForSubModel( QAbstractItemModel* model ) const; + QAbstractItemModel* subModelForIndex( const QModelIndex& index ) const; + + /** +diff -ru src/k3b.notifyrc src/k3b.notifyrc +--- src/k3b.notifyrc 2009-05-03 15:17:04.000000000 +0200 ++++ src/k3b.notifyrc 2009-07-23 11:42:05.000000000 +0200 +@@ -25,6 +25,7 @@ + Name[hi]=प्रक्रिया सफल + Name[hne]=काम सफल + Name[hsb]=Proces wuspěšny ++Name[it]=Processo riuscito + Name[ja]=プロセス成功 + Name[km]=ដំណើរការ​ដោយ​ជោគជ័យ + Name[ko]=진행 성공 +@@ -48,6 +49,7 @@ + Name[uk]=Процес успішний + Name[x-test]=xxProcess successfulxx + Name[zh_CN]=处理成功 ++Name[zh_TW]=行程成功 + Comment=Process successfully finished + Comment[bg]=Процесът завърши успешно + Comment[cs]=Proces úspěšně dokončen +@@ -65,6 +67,7 @@ + Comment[he]=תהליך הסתיים בהצלחה + Comment[hne]=काम सफलता के साथ पूरा + Comment[hsb]=Proces wuspěšnje zakónčeny ++Comment[it]=Processo terminato correttamente + Comment[ja]=プロセスが正常に終了しました + Comment[km]=បាន​បញ្ចប់​ដំណើរការ​ដោយ​ជោគជ័យ + Comment[ko]=진행이 성공적으로 끝났습니다 +@@ -88,6 +91,7 @@ + Comment[uk]=Процес закінчився успішно + Comment[x-test]=xxProcess successfully finishedxx + Comment[zh_CN]=处理成功完成 ++Comment[zh_TW]=行程已成功結束 + Sound=k3b_success1.wav + Action=Sound + +@@ -110,6 +114,7 @@ + Name[hi]=प्रक्रिया त्रुटि + Name[hne]=काम गलती + Name[hsb]=Zmylk procesa ++Name[it]=Errore del processo + Name[ja]=プロセスエラー + Name[km]=កំហុស​ដំណើរការ + Name[ko]=진행 오류 +@@ -133,6 +138,7 @@ + Name[uk]=Помилка процесу + Name[x-test]=xxProcess errorxx + Name[zh_CN]=处理错误 ++Name[zh_TW]=行程發生錯誤 + Comment=Process finished with errors + Comment[bg]=Процесът завърши с грешки + Comment[cs]=Proces ukončen s chybami +@@ -151,6 +157,7 @@ + Comment[hi]=प्रक्रिया त्रुटि के साथ पूर्ण + Comment[hne]=काम गलती के साथ पूरा + Comment[hsb]=Proces ze zmylkami zakónčeny ++Comment[it]=Processo terminato con errori + Comment[ja]=プロセスがエラーで終了しました + Comment[km]=បាន​បញ្ចប់​ដំណើរការ ដោយ​មាន​កំហុស + Comment[ko]=진행 중 오류가 발생했습니다 +@@ -174,6 +181,7 @@ + Comment[uk]=Процес закінчився з помилками + Comment[x-test]=xxProcess finished with errorsxx + Comment[zh_CN]=处理完成,有错误 ++Comment[zh_TW]=行程已完成,但是發生錯誤 + Sound=k3b_error1.wav + Action=Sound + +@@ -196,6 +204,7 @@ + Name[he]=מחכה למדיה + Name[hne]=मीडियम के इंतजार करत हे + Name[hsb]=Čakam na medium ++Name[it]=Si è in attesa di un supporto + Name[ja]=メディア待ち + Name[km]=រង់ចាំ​ឧបករណ៍​ផ្ទុក + Name[ko]=미디어 기다리는 중 +@@ -219,6 +228,7 @@ + Name[uk]=Очікування носія + Name[x-test]=xxWaiting for mediumxx + Name[zh_CN]=正在等待存储介质 ++Name[zh_TW]=等候媒體中 + Comment=The user needs to insert a medium + Comment[bg]=Потребителят трябва да постави диск в устройството + Comment[cs]=Uživatel musí vložit médium +@@ -236,6 +246,7 @@ + Comment[he]=המשתמש צריך להכניס מדיה + Comment[hne]=कमइया ल एक मीडियम डालना पड़ही + Comment[hsb]=Wužiwar dyrbi medium do palaka tyknyć ++Comment[it]=L'utente deve inserire un supporto + Comment[ja]=ユーザがメディアを挿入する必要があります + Comment[km]=អ្នកប្រើ​ត្រូវ​បញ្ចូល​ឧបករណ៍​ផ្ទុក + Comment[ko]=사용자가 미디어를 삽입해야 합니다 +@@ -259,5 +270,6 @@ + Comment[uk]=Користувач повинен вставити носій + Comment[x-test]=xxThe user needs to insert a mediumxx + Comment[zh_CN]=用户需要插入存储介质 ++Comment[zh_TW]=使用者需要插入媒體 + Sound=k3b_wait_media1.wav + Action=Sound +diff -ru src/k3bplacesmodel.cpp src/k3bplacesmodel.cpp +--- src/k3bplacesmodel.cpp 2009-05-26 23:58:58.000000000 +0200 ++++ src/k3bplacesmodel.cpp 2009-07-23 11:42:05.000000000 +0200 +@@ -22,14 +22,20 @@ + #include + #include // use .h to build with KDE 4.2 + #include ++#include + #include ++#include ++ ++ ++typedef QMap DirModels; + + + class K3b::PlacesModel::Private + { + public: + K3b::DeviceModel* deviceModel; +- QMap dirModels; ++ KFilePlacesModel* filePlacesModel; ++ DirModels dirModels; + }; + + +@@ -39,7 +45,24 @@ + d( new Private() ) + { + d->deviceModel = new K3b::DeviceModel( this ); ++ d->filePlacesModel = new KFilePlacesModel( this ); + addSubModel( "Devices", KIcon( "media-optical" ), d->deviceModel, true ); ++ ++ // TODO: Currently our place list doesn't follow changes KFilePlacesModel. ++ // This needs to be changed. Adding, removing and editing places would be also nice. ++ for( int i = 0; i < d->filePlacesModel->rowCount(); ++i ) { ++ QModelIndex place = d->filePlacesModel->index( i, 0 ); ++ KUrl url = d->filePlacesModel->url( place ); ++ ++ // Let's filter out device-related places ++ // and custom protocols (we doesn't support burning from them) ++ if( !d->filePlacesModel->isDevice( place ) && url.isLocalFile() ) { ++ addPlace( ++ d->filePlacesModel->text( place ), ++ d->filePlacesModel->icon( place ), ++ url ); ++ } ++ } + + connect( d->deviceModel, SIGNAL( modelAboutToBeReset() ), + this, SIGNAL( modelAboutToBeReset() ) ); +@@ -87,26 +110,43 @@ + void K3b::PlacesModel::expandToUrl( const KUrl& url ) + { + kDebug() << url; ++ ++ // Check if url is not device's ++ Q_FOREACH( Device::Device* device, d->deviceModel->devices() ) ++ { ++ if( Solid::StorageAccess* solidStorage = device->solidStorage() ) { ++ KUrl parent( solidStorage->filePath() ); ++ if( parent.isParentOf( url ) ) { ++ kDebug() << url << " will be expanded to device " << device->description(); ++ emit expand( mapFromSubModel( d->deviceModel->indexForDevice( device ) ) ); ++ return; ++ } ++ } ++ } + + // search for the best suited place that contains this URL + int maxDepth = 0; + KDirModel* modelToExpand = 0; + +- for( QMap::iterator it = d->dirModels.begin(); +- it != d->dirModels.end(); ++it ) { ++ for( DirModels::iterator it = d->dirModels.begin(); it != d->dirModels.end(); ++it ) { + KDirModel* model = it.key(); +- KUrl url = model->dirLister()->url(); +- if ( url.isParentOf( url ) ) { +- if ( url.path().length() > maxDepth ) { +- maxDepth = url.path().length(); ++ KUrl parent = model->dirLister()->url(); ++ if ( parent.isParentOf( url ) ) { ++ if ( parent.path().length() > maxDepth ) { ++ maxDepth = parent.path().length(); + modelToExpand = model; + } + } + } + + if ( modelToExpand ) { +- kDebug() << modelToExpand->dirLister()->url() << "will be expanded."; +- modelToExpand->expandToUrl( url ); ++ kDebug() << modelToExpand->dirLister()->url() << " will be expanded."; ++ if( modelToExpand->dirLister()->url().equals( url, KUrl::CompareWithoutTrailingSlash ) ) { ++ emit expand( indexForSubModel( d->dirModels[ modelToExpand ] ) ); ++ } ++ else { ++ modelToExpand->expandToUrl( url ); ++ } + } + } + +diff -ru src/k3bprojectmanager.cpp src/k3bprojectmanager.cpp +--- src/k3bprojectmanager.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ src/k3bprojectmanager.cpp 2009-07-23 11:42:05.000000000 +0200 +@@ -179,7 +179,7 @@ + } + + +-K3b::Doc* K3b::ProjectManager::createEmptyProject( K3b::Doc::DocType type ) ++K3b::Doc* K3b::ProjectManager::createEmptyProject( K3b::Doc::Type type ) + { + kDebug() << type; + +@@ -187,37 +187,37 @@ + QString fileName; + + switch( type ) { +- case K3b::Doc::AUDIO: { ++ case K3b::Doc::AudioProject: { + doc = new K3b::AudioDoc( this ); + fileName = i18n("AudioCD%1",d->audioUntitledCount++); + break; + } + +- case K3b::Doc::DATA: { ++ case K3b::Doc::DataProject: { + doc = new K3b::DataDoc( this ); + fileName = i18n("Data%1",d->dataUntitledCount++); + break; + } + +- case K3b::Doc::MIXED: { ++ case K3b::Doc::MixedProject: { + doc = new K3b::MixedDoc( this ); + fileName=i18n("MixedCD%1",d->mixedUntitledCount++); + break; + } + +- case K3b::Doc::VCD: { ++ case K3b::Doc::VcdProject: { + doc = new K3b::VcdDoc( this ); + fileName=i18n("VideoCD%1",d->vcdUntitledCount++); + break; + } + +- case K3b::Doc::MOVIX: { ++ case K3b::Doc::MovixProject: { + doc = new K3b::MovixDoc( this ); + fileName=i18n("eMovix%1",d->movixUntitledCount++); + break; + } + +- case K3b::Doc::VIDEODVD: { ++ case K3b::Doc::VideoDvdProject: { + doc = new K3b::VideoDvdDoc( this ); + fileName = i18n("VideoDVD%1",d->videoDvdUntitledCount++); + break; +@@ -236,7 +236,7 @@ + } + + +-K3b::Doc* K3b::ProjectManager::createProject( K3b::Doc::DocType type ) ++K3b::Doc* K3b::ProjectManager::createProject( K3b::Doc::Type type ) + { + kDebug() << type; + +@@ -288,7 +288,7 @@ + + + switch( doc->type() ) { +- case K3b::Doc::AUDIO: { ++ case K3b::Doc::AudioProject: { + K3b::AudioDoc* audioDoc = static_cast(doc); + + audioDoc->writeCdText( c.readEntry( "cd_text", true ) ); +@@ -301,7 +301,7 @@ + break; + } + +- case K3b::Doc::MOVIX: { ++ case K3b::Doc::MovixProject: { + K3b::MovixDoc* movixDoc = static_cast(doc); + + movixDoc->setSubtitleFontset( c.readEntry("subtitle_fontset") ); +@@ -322,7 +322,7 @@ + // fallthrough + } + +- case K3b::Doc::DATA: { ++ case K3b::Doc::DataProject: { + K3b::DataDoc* dataDoc = static_cast(doc); + + dataDoc->setIsoOptions( K3b::IsoOptions::load( c, false ) ); +@@ -352,7 +352,7 @@ + break; + } + +- case K3b::Doc::VIDEODVD: { ++ case K3b::Doc::VideoDvdProject: { + // the only defaults we need here are the volume id and stuff + K3b::DataDoc* dataDoc = static_cast(doc); + dataDoc->setIsoOptions( K3b::IsoOptions::load( c, false ) ); +@@ -360,7 +360,7 @@ + break; + } + +- case K3b::Doc::MIXED: { ++ case K3b::Doc::MixedProject: { + K3b::MixedDoc* mixedDoc = static_cast(doc); + + mixedDoc->audioDoc()->writeCdText( c.readEntry( "cd_text", true ) ); +@@ -390,7 +390,7 @@ + break; + } + +- case K3b::Doc::VCD: { ++ case K3b::Doc::VcdProject: { + K3b::VcdDoc* vcdDoc = static_cast(doc); + + // FIXME: I think we miss a lot here! +@@ -407,9 +407,9 @@ + } + } + +- if( doc->type() == K3b::Doc::DATA || +- doc->type() == K3b::Doc::MOVIX || +- doc->type() == K3b::Doc::VIDEODVD ) { ++ if( doc->type() == K3b::Doc::DataProject || ++ doc->type() == K3b::Doc::MovixProject || ++ doc->type() == K3b::Doc::VideoDvdProject ) { + if( static_cast(doc)->isoOptions().volumeID().isEmpty() ) + static_cast(doc)->setVolumeID( doc->URL().fileName() ); + } +@@ -507,23 +507,23 @@ + } + + // check the documents DOCTYPE +- K3b::Doc::DocType type = K3b::Doc::AUDIO; ++ K3b::Doc::Type type = K3b::Doc::AudioProject; + if( xmlDoc.doctype().name() == "k3b_audio_project" ) +- type = K3b::Doc::AUDIO; ++ type = K3b::Doc::AudioProject; + else if( xmlDoc.doctype().name() == "k3b_data_project" ) +- type = K3b::Doc::DATA; ++ type = K3b::Doc::DataProject; + else if( xmlDoc.doctype().name() == "k3b_vcd_project" ) +- type = K3b::Doc::VCD; ++ type = K3b::Doc::VcdProject; + else if( xmlDoc.doctype().name() == "k3b_mixed_project" ) +- type = K3b::Doc::MIXED; ++ type = K3b::Doc::MixedProject; + else if( xmlDoc.doctype().name() == "k3b_movix_project" ) +- type = K3b::Doc::MOVIX; ++ type = K3b::Doc::MovixProject; + else if( xmlDoc.doctype().name() == "k3b_movixdvd_project" ) +- type = K3b::Doc::MOVIX; // backward compatibility ++ type = K3b::Doc::MovixProject; // backward compatibility + else if( xmlDoc.doctype().name() == "k3b_dvd_project" ) +- type = K3b::Doc::DATA; // backward compatibility ++ type = K3b::Doc::DataProject; // backward compatibility + else if( xmlDoc.doctype().name() == "k3b_video_dvd_project" ) { +- type = K3b::Doc::VIDEODVD; ++ type = K3b::Doc::VideoDvdProject; + } else { + kDebug() << "(K3b::Doc) unknown doc type: " << xmlDoc.doctype().name(); + QApplication::restoreOverrideCursor(); +diff -ru src/k3bprojectmanager.h src/k3bprojectmanager.h +--- src/k3bprojectmanager.h 2009-04-21 19:54:02.000000000 +0200 ++++ src/k3bprojectmanager.h 2009-07-23 11:42:05.000000000 +0200 +@@ -41,7 +41,7 @@ + * Create a new project including loading user defaults and creating + * the dcop interface. + */ +- Doc* createProject( Doc::DocType type ); ++ Doc* createProject( Doc::Type type ); + + /** + * Opens a K3b project. +@@ -82,7 +82,7 @@ + + private: + // used internal +- Doc* createEmptyProject( Doc::DocType ); ++ Doc* createEmptyProject( Doc::Type ); + + class Private; + Private* d; +diff -ru src/k3bstatusbarmanager.cpp src/k3bstatusbarmanager.cpp +--- src/k3bstatusbarmanager.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ src/k3bstatusbarmanager.cpp 2009-07-23 11:42:05.000000000 +0200 +@@ -194,19 +194,19 @@ + K3b::Doc* doc = k3bappcore->projectManager()->activeProject(); + if( doc ) { + switch( doc->type() ) { +- case K3b::Doc::AUDIO: { ++ case K3b::Doc::AudioProject: { + K3b::AudioDoc* audioDoc = static_cast( doc ); + m_labelProjectInfo->setText( i18np("Audio CD (1 track)", "Audio CD (%1 tracks)", audioDoc->numOfTracks() ) ); + break; + } + +- case K3b::Doc::DATA: { ++ case K3b::Doc::DataProject: { + K3b::DataDoc* dataDoc = static_cast( doc ); + m_labelProjectInfo->setText( i18n("Data Project (%1)",dataDocStats(dataDoc)) ); + break; + } + +- case K3b::Doc::MIXED: { ++ case K3b::Doc::MixedProject: { + K3b::AudioDoc* audioDoc = static_cast( doc )->audioDoc(); + K3b::DataDoc* dataDoc = static_cast( doc )->dataDoc(); + m_labelProjectInfo->setText( i18np("Mixed CD (1 track and %2)", "Mixed CD (%1 tracks and %2)", audioDoc->numOfTracks(), +@@ -214,19 +214,19 @@ + break; + } + +- case K3b::Doc::VCD: { ++ case K3b::Doc::VcdProject: { + K3b::VcdDoc* vcdDoc = static_cast( doc ); + m_labelProjectInfo->setText( i18np("Video CD (1 track)", "Video CD (%1 tracks)", vcdDoc->numOfTracks() ) ); + break; + } + +- case K3b::Doc::MOVIX: { ++ case K3b::Doc::MovixProject: { + K3b::DataDoc* dataDoc = static_cast( doc ); + m_labelProjectInfo->setText( i18n("eMovix Project (%1)",dataDocStats(dataDoc)) ); + break; + } + +- case K3b::Doc::VIDEODVD: { ++ case K3b::Doc::VideoDvdProject: { + K3b::DataDoc* dataDoc = static_cast( doc ); + m_labelProjectInfo->setText( i18n("Video DVD (%1)",dataDocStats(dataDoc)) ); + break; +diff -ru src/k3bthememanager.cpp src/k3bthememanager.cpp +--- src/k3bthememanager.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ src/k3bthememanager.cpp 2009-07-23 11:42:05.000000000 +0200 +@@ -236,7 +236,7 @@ + + void K3b::ThemeManager::setCurrentTheme( K3b::Theme* theme ) + { +- if( !theme ) ++ if( !theme && !d->themes.isEmpty() ) + theme = d->themes.first(); + + if( theme ) { +diff -ru src/k3burlnavigator.cpp src/k3burlnavigator.cpp +--- src/k3burlnavigator.cpp 2009-02-22 23:39:42.000000000 +0100 ++++ src/k3burlnavigator.cpp 2009-07-23 11:42:05.000000000 +0200 +@@ -25,6 +25,9 @@ + K3b::UrlNavigator::UrlNavigator( KFilePlacesModel* model, QWidget* parent ) + : KUrlNavigator( model, KUrl(QDir::home().absolutePath()), parent ) + { ++ // Curently we don't support burning from custom protocols so let's filter them out ++ KUrlNavigator::setCustomProtocols( QStringList() << "file" ); ++ + connect( this, SIGNAL(urlChanged(const KUrl&)), this, SLOT(urlActivated(const KUrl&)) ); + } + +diff -ru src/konqi/k3b_audiocd_rip.desktop src/konqi/k3b_audiocd_rip.desktop +--- src/konqi/k3b_audiocd_rip.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ src/konqi/k3b_audiocd_rip.desktop 2009-07-23 11:42:04.000000000 +0200 +@@ -24,6 +24,7 @@ + Name[he]=חלק שמע דיגיטלי עם K3b + Name[hne]=के३बी के साथ डिजिटल आडियो एक्सट्रेक्ट करव + Name[hsb]=Digitalne awdijo z K3b ekstrahować ++Name[it]=Estrai audio digitale con K3b + Name[ja]=K3b でデジタルオーディオを吸い出し + Name[km]=ស្រង់​អូឌីយ៉ូ​ឌីជីថល ដោយប្រើ K3b + Name[ko]=K3b로 디지털 오디오 추출하기 +@@ -45,5 +46,6 @@ + Name[uk]=Витягти цифрове аудіо через K3b + Name[x-test]=xxExtract Digital Audio with K3bxx + Name[zh_CN]=用 K3b 抓取数字音频 ++Name[zh_TW]=用 K3b 解開數位音效 + Exec=k3b --cddarip %i + Icon=k3b +diff -ru src/konqi/k3b_copy_disc.desktop src/konqi/k3b_copy_disc.desktop +--- src/konqi/k3b_copy_disc.desktop 2009-05-26 16:22:58.000000000 +0200 ++++ src/konqi/k3b_copy_disc.desktop 2009-07-23 11:42:04.000000000 +0200 +@@ -6,12 +6,15 @@ + + [Desktop Action K3bCopy] + Name=Copy with K3b ++Name[bg]=Копиране на CD с K3b + Name[da]=Kopiér med K3b + Name[de]=Mit K3b kopieren + Name[es]=Copiar con K3b + Name[et]=Kopeeri K3b abil ++Name[eu]=Kopiatu K3b-rekin + Name[fr]=Copier avec K3b + Name[ga]=Cóipeáil le K3b ++Name[it]=Copia con K3b + Name[km]=ចម្លង​ដោយ​ប្រើ K3b + Name[nb]=Kopier med K3b + Name[nds]=Mit K3b koperen +@@ -25,5 +28,6 @@ + Name[tr]=K3b ile Kopyala + Name[uk]=Скопіювати за допомогою K3b + Name[x-test]=xxCopy with K3bxx ++Name[zh_TW]=使用 K3b 複製 + Exec=k3b --copy %i + Icon=k3b +diff -ru src/konqi/k3b_create_audio_cd.desktop src/konqi/k3b_create_audio_cd.desktop +--- src/konqi/k3b_create_audio_cd.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ src/konqi/k3b_create_audio_cd.desktop 2009-07-23 11:42:04.000000000 +0200 +@@ -8,7 +8,7 @@ + [Desktop Action CreateK3bAudioProject] + Exec=k3b --audiocd %F + Name=Create Audio CD with K3b... +-Name[bg]=Създаване на аудио CD с K3b... ++Name[bg]=Създаване на звуков диск с K3b... + Name[ca]=Crea un CD d'àudio amb el K3b... + Name[cs]=Vytvořit zvukové CD... + Name[csb]=Ùsôdzë platã CD audio z pòmòcą K3b... +@@ -27,6 +27,7 @@ + Name[hi]=के3बी के जरिए ऑडियो सीडी बनाएं.... + Name[hne]=के3बी के साथ आडियो सीडी बनाव.... + Name[hsb]=awdijo-CD z K3b stworić ++Name[it]=Crea CD audio con K3b... + Name[ja]=K3b でオーディオ CD を作成... + Name[km]=បង្កើត​ស៊ីឌី​អូឌីយ៉ូ​​ដោយប្រើ K3b... + Name[ko]=K3b로 오디오 CD 만들기... +@@ -50,4 +51,5 @@ + Name[uk]=Створити аудіо-КД через K3b... + Name[x-test]=xxCreate Audio CD with K3b...xx + Name[zh_CN]=用 K3b 创建音频 CD... ++Name[zh_TW]=用 K3b 建立音效 CD... + Icon=k3b +diff -ru src/konqi/k3b_create_audio_cd_from_blank_medium.desktop src/konqi/k3b_create_audio_cd_from_blank_medium.desktop +--- src/konqi/k3b_create_audio_cd_from_blank_medium.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ src/konqi/k3b_create_audio_cd_from_blank_medium.desktop 2009-07-23 11:42:04.000000000 +0200 +@@ -1,5 +1,5 @@ + [Desktop Entry] +-X-KDE-Solid-Predicate=[[StorageVolume.ignored == false AND OpticalDisc.isBlank == true ] AND OpticalDisc.discType == 'CdRecordable|CdRewritable'] ++X-KDE-Solid-Predicate=[[StorageVolume.ignored == false AND OpticalDisc.blank == true ] AND OpticalDisc.discType == 'CdRecordable|CdRewritable'] + Actions=K3bAudioCDProject; + Type=Service + X-KDE-Priority=TopLevel +@@ -7,7 +7,7 @@ + [Desktop Action K3bAudioCDProject] + Exec=k3b --device %i --audiocd + Name=Create Audio CD with K3b... +-Name[bg]=Създаване на аудио CD с K3b... ++Name[bg]=Създаване на звуков диск с K3b... + Name[ca]=Crea un CD d'àudio amb el K3b... + Name[cs]=Vytvořit zvukové CD... + Name[csb]=Ùsôdzë platã CD audio z pòmòcą K3b... +@@ -26,6 +26,7 @@ + Name[hi]=के3बी के जरिए ऑडियो सीडी बनाएं.... + Name[hne]=के3बी के साथ आडियो सीडी बनाव.... + Name[hsb]=awdijo-CD z K3b stworić ++Name[it]=Crea CD audio con K3b... + Name[ja]=K3b でオーディオ CD を作成... + Name[km]=បង្កើត​ស៊ីឌី​អូឌីយ៉ូ​​ដោយប្រើ K3b... + Name[ko]=K3b로 오디오 CD 만들기... +@@ -49,4 +50,5 @@ + Name[uk]=Створити аудіо-КД через K3b... + Name[x-test]=xxCreate Audio CD with K3b...xx + Name[zh_CN]=用 K3b 创建音频 CD... ++Name[zh_TW]=用 K3b 建立音效 CD... + Icon=k3b +diff -ru src/konqi/k3b_create_data_project.desktop src/konqi/k3b_create_data_project.desktop +--- src/konqi/k3b_create_data_project.desktop 2009-05-26 16:22:58.000000000 +0200 ++++ src/konqi/k3b_create_data_project.desktop 2009-07-23 11:42:04.000000000 +0200 +@@ -8,12 +8,15 @@ + [Desktop Action CreateK3bDataProject] + Exec=k3b --data %F + Name=Create file project with K3b... ++Name[bg]=Създаване диск с файлове с K3b... + Name[da]=Opret filprojekt med K3b... + Name[de]=Daten-CD mit K3b erstellen ... + Name[es]=Crear proyecto de archivo con K3b... + Name[et]=Loo failiprojekt K3b abil... ++Name[eu]=Sortu fitxategi-proiektua K3b-rekin... + Name[fr]=Créer un projet avec K3b... + Name[ga]=Cruthaigh tionscadal comhaid le K3b... ++Name[it]=Crea file di progetto con K3b... + Name[km]=បង្កើត​គម្រោង​ឯកសា​រដោយ​ប្រើ K3b... + Name[nb]=Lag filprosjekt med K3b … + Name[nds]=Dateiprojekt mit K3b opstellen... +@@ -27,4 +30,5 @@ + Name[tr]=K3b ile dosya projesi oluştur... + Name[uk]=Створити файловий проект за допомогою K3b... + Name[x-test]=xxCreate file project with K3b...xx ++Name[zh_TW]=用 K3b 建立檔案專案... + Icon=k3b +diff -ru src/konqi/k3b_create_data_project_from_blank_medium.desktop src/konqi/k3b_create_data_project_from_blank_medium.desktop +--- src/konqi/k3b_create_data_project_from_blank_medium.desktop 2009-05-26 16:22:58.000000000 +0200 ++++ src/konqi/k3b_create_data_project_from_blank_medium.desktop 2009-07-23 11:42:04.000000000 +0200 +@@ -1,5 +1,5 @@ + [Desktop Entry] +-X-KDE-Solid-Predicate=[StorageVolume.ignored == false AND OpticalDisc.isBlank == true] ++X-KDE-Solid-Predicate=[StorageVolume.ignored == false AND OpticalDisc.blank == true] + Actions=K3bDataProject; + Type=Service + X-KDE-Priority=TopLevel +@@ -7,12 +7,15 @@ + [Desktop Action K3bDataProject] + Exec=k3b --device %i --data + Name=Create file project with K3b... ++Name[bg]=Създаване диск с файлове с K3b... + Name[da]=Opret filprojekt med K3b... + Name[de]=Daten-CD mit K3b erstellen ... + Name[es]=Crear proyecto de archivo con K3b... + Name[et]=Loo failiprojekt K3b abil... ++Name[eu]=Sortu fitxategi-proiektua K3b-rekin... + Name[fr]=Créer un projet avec K3b... + Name[ga]=Cruthaigh tionscadal comhaid le K3b... ++Name[it]=Crea file di progetto con K3b... + Name[km]=បង្កើត​គម្រោង​ឯកសា​រដោយ​ប្រើ K3b... + Name[nb]=Lag filprosjekt med K3b … + Name[nds]=Dateiprojekt mit K3b opstellen... +@@ -26,4 +29,5 @@ + Name[tr]=K3b ile dosya projesi oluştur... + Name[uk]=Створити файловий проект за допомогою K3b... + Name[x-test]=xxCreate file project with K3b...xx ++Name[zh_TW]=用 K3b 建立檔案專案... + Icon=k3b +diff -ru src/konqi/k3b_create_video_cd.desktop src/konqi/k3b_create_video_cd.desktop +--- src/konqi/k3b_create_video_cd.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ src/konqi/k3b_create_video_cd.desktop 2009-07-23 11:42:04.000000000 +0200 +@@ -26,6 +26,7 @@ + Name[hi]=के3बी के जरिए वीडियो सीडी बनाएं.... + Name[hne]=के3बी के साथ वीडियो सीडी बनाव.... + Name[hsb]=Widejo-CDku z K3b stworić ... ++Name[it]=Crea Video CD con K3b... + Name[ja]=K3b でビデオ CD を作成... + Name[km]=បង្កើត​វីដេអូ​ស៊ីឌី ដោយប្រើ K3b... + Name[ko]=K3b로 비디오 CD 만들기... +@@ -49,4 +50,5 @@ + Name[uk]=Створити відео-КД через K3b... + Name[x-test]=xxCreate Video CD with K3b...xx + Name[zh_CN]=用 K3b 创建 VCD... ++Name[zh_TW]=用 K3b 建立影像 CD... + Icon=k3b +diff -ru src/konqi/k3b_dvd_copy.desktop src/konqi/k3b_dvd_copy.desktop +--- src/konqi/k3b_dvd_copy.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ src/konqi/k3b_dvd_copy.desktop 2009-07-23 11:42:04.000000000 +0200 +@@ -24,6 +24,7 @@ + Name[he]=העתק DVD עם K3b + Name[hne]=के३बी के साथ डीवीडी नकल बनाव + Name[hsb]=DVD z K3b kopěrować ++Name[it]=Copia DVD con K3b + Name[ja]=K3b で DVD をコピー... + Name[km]=ចម្លង​ឌីវីឌី ដោយប្រើ K3b + Name[ko]=K3b로 DVD 복사하기 +@@ -46,5 +47,6 @@ + Name[uk]=Скопіювати DVD через K3b + Name[x-test]=xxCopy DVD with K3bxx + Name[zh_CN]=用 K3b 复制 DVD ++Name[zh_TW]=用 K3b 複製 DVD + Exec=k3b --copydvd %u + Icon=k3b +diff -ru src/konqi/k3b_videodvd_rip.desktop src/konqi/k3b_videodvd_rip.desktop +--- src/konqi/k3b_videodvd_rip.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ src/konqi/k3b_videodvd_rip.desktop 2009-07-23 11:42:04.000000000 +0200 +@@ -24,6 +24,7 @@ + Name[he]=קריעת כותר וידאו DVD עם K3b + Name[hne]=के3बी के साथ वीडियो डीवीडी रिप करव.... + Name[hsb]=Dźěle widejo-DVDki z K3b ekstrahować ++Name[it]=Estrai i titoli DVD video con K3b + Name[ja]=K3b で DVD タイトルを吸い出し... + Name[km]=ច្រៀក​ចំណងជើង​ឌីវីឌី​វីដេអូស ដោយប្រើ K3b + Name[ko]=K3b로 비디오 DVD 타이틀 추출하기 +@@ -45,5 +46,6 @@ + Name[uk]=Видерти відео DVD з K3b + Name[x-test]=xxRip Video DVD Titles with K3bxx + Name[zh_CN]=用 K3b 提取视频 DVD ++Name[zh_TW]=用 K3b 擷取影像 DVD 標題 + Exec=k3b --videodvdrip %i + Icon=k3b +diff -ru src/konqi/k3b_write_bin_image.desktop src/konqi/k3b_write_bin_image.desktop +--- src/konqi/k3b_write_bin_image.desktop 2009-05-03 15:17:04.000000000 +0200 ++++ src/konqi/k3b_write_bin_image.desktop 2009-07-23 11:42:04.000000000 +0200 +@@ -18,7 +18,7 @@ + Name[eo]=Skribi KD imagon per K3b... + Name[es]=Escribir imagen de CD con K3b... + Name[et]=Kirjuta CD-tõmmis K3b abil plaadile... +-Name[eu]=Idatzi CD irudia K3b-rekin... ++Name[eu]=Grabatu CD irudia K3b-rekin... + Name[fi]=Polta levykuva cd-levylle K3b:llä... + Name[fr]=Graver une image CD avec K3b... + Name[ga]=Scríobh Íomhá Dhlúthdhiosca le K3b... +@@ -27,6 +27,7 @@ + Name[hi]=के3बी के जरिए इमेज सीडी पर लिखें.... + Name[hne]=के3बी के साथ इमेज सीडी मं लिखव.... + Name[hsb]=CD-image z K3b pisać ... ++Name[it]=Scrivi immagine CD con K3b... + Name[ja]=K3b で CD イメージを書き込み... + Name[km]=សរសេរ​រូបភាព​ស៊ីឌី ដោយប្រើ K3b... + Name[ko]=K3b로 CD 이미지 쓰기... +@@ -50,4 +51,5 @@ + Name[uk]=Записати штамп КД через K3b... + Name[x-test]=xxWrite CD Image with K3b...xx + Name[zh_CN]=用 K3b 刻录 CD 映像... ++Name[zh_TW]=用 K3b 寫入 CD 映像檔... + Icon=k3b +diff -ru src/konqi/k3b_write_iso_image.desktop src/konqi/k3b_write_iso_image.desktop +--- src/konqi/k3b_write_iso_image.desktop 2009-05-26 16:22:58.000000000 +0200 ++++ src/konqi/k3b_write_iso_image.desktop 2009-07-23 11:42:04.000000000 +0200 +@@ -7,15 +7,18 @@ + [Desktop Action WriteCdImage] + Exec=k3b --image %F + Name=Write image to disc with K3b... ++Name[bg]=Запис на дисково изображение с K3b... + Name[da]=Brænd image-fil til disk med K3b... + Name[de]=Abbild mit K3b brennen ... + Name[es]=Escribir imagen a disco con K3b... + Name[et]=Kirjuta tõmmis K3b abil plaadile... ++Name[eu]=Grabatu irudia diskoan K3b-rekin... + Name[fr]=Écrire une image vers le disque avec K3b... + Name[ga]=Scríobh íomhá go dtí an diosca le K3b... ++Name[it]=Scrivi immagine su disco con K3b... + Name[km]=សរសេរ​រូបភាព​ទៅ​ថាស​ដោយ​ប្រើ K3b... + Name[nb]=Skriv bilde til harddisk med K3b … +-Name[nds]=Afbild mit K3b op Fastplaat schrieven... ++Name[nds]=Afbild mit K3b na Fastplaat schrieven... + Name[nl]=Image naar schijf schrijven met K3b... + Name[pt]=Gravar uma imagem no disco com o K3b... + Name[pt_BR]=Gravar imagem para disco com o K3b... +@@ -26,4 +29,5 @@ + Name[tr]=K3b ile kalıp yazdır... + Name[uk]=Записати штамп на диск за допомогою K3b... + Name[x-test]=xxWrite image to disc with K3b...xx ++Name[zh_TW]=用 K3b 寫入光碟映像檔到磁碟中... + Icon=k3b +diff -ru src/misc/k3bimagewritingdialog.cpp src/misc/k3bimagewritingdialog.cpp +--- src/misc/k3bimagewritingdialog.cpp 2009-04-21 23:00:49.000000000 +0200 ++++ src/misc/k3bimagewritingdialog.cpp 2009-07-23 11:42:00.000000000 +0200 +@@ -182,9 +182,10 @@ + QString image = c.readPathEntry( "last written image", QString() ); + if( QFile::exists( image ) ) + m_editImagePath->setUrl( image ); ++ ++ m_comboRecentImages->clear(); + } + +- m_comboRecentImages->clear(); + m_comboRecentImages->addItems( c.readPathEntry( "recent images", QStringList() ) ); + } + +diff -ru src/option/base_k3bmiscoptiontab.ui src/option/base_k3bmiscoptiontab.ui +--- src/option/base_k3bmiscoptiontab.ui 2009-03-21 22:55:41.000000000 +0100 ++++ src/option/base_k3bmiscoptiontab.ui 2009-07-23 11:42:03.000000000 +0200 +@@ -69,7 +69,7 @@ + Check system Configuration + + +- <p>If this option is checked K3b will check the system configuration for any problems on startup and when the the user changes the settings. ++ <p>If this option is checked K3b will check the system configuration for any problems on startup and when the user changes the settings. + + + &Check system configuration +diff -ru src/option/k3badvancedoptiontab.cpp src/option/k3badvancedoptiontab.cpp +--- src/option/k3badvancedoptiontab.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ src/option/k3badvancedoptiontab.cpp 2009-07-23 11:42:03.000000000 +0200 +@@ -106,10 +106,7 @@ + "elements which allow to influence the behaviour of K3b are shown. " + "This includes the manual selection of the used burning tool " + "(Choose between cdrecord and cdrdao when writing a CD or between " +- "cdrecord and growisofs when writing a DVD/BD.) or the forcing of " +- "a medium in case K3b fails to detect it properly." +- "

This may be useful if one of the programs " +- "does not support the used writer." ++ "cdrecord and growisofs when writing a DVD/BD)." + "

Be aware that K3b does not support all possible tools " + "in all project types and actions.") ); + +diff -ru src/projects/k3baudioview.cpp src/projects/k3baudioview.cpp +--- src/projects/k3baudioview.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ src/projects/k3baudioview.cpp 2009-07-23 11:42:02.000000000 +0200 +@@ -3,6 +3,7 @@ + * Copyright (C) 2003-2008 Sebastian Trueg + * (C) 2009 Arthur Mello + * (C) 2009 Gustavo Pichorim Boiko ++ * (C) 2009 Michal Malek + * + * This file is part of the K3b project. + * Copyright (C) 1998-2009 Sebastian Trueg +@@ -40,7 +41,6 @@ + + #include "k3bfillstatusdisplay.h" + #include "k3bmsf.h" +-#include "k3bprojectplugin.h" + + // QT-includes + #include +@@ -61,6 +61,8 @@ + : K3b::StandardView( pDoc, parent ), + m_updatingColumnWidths(false) + { ++ connect( this, SIGNAL(activated(QModelIndex)), SLOT(slotItemActivated(QModelIndex)) ); ++ + m_doc = pDoc; + + m_model = new K3b::AudioProjectModel(m_doc, this); +@@ -109,7 +111,7 @@ + #endif + #endif + +- addPluginButtons( K3b::ProjectPlugin::AUDIO_CD ); ++ addPluginButtons(); + + // this is just for testing (or not?) + // most likely every project type will have it's rc file in the future +@@ -192,18 +194,64 @@ + actionCollection()->addAction( "project_audio_musicbrainz", mbAction ); + mbAction->setToolTip( i18n("Try to determine meta information over the Internet") ); + #endif ++ ++ m_popupMenu = new KMenu( this ); ++ if( m_actionPlayTrack != 0 ) { ++ m_popupMenu->addAction( m_actionPlayTrack ); ++ m_popupMenu->addSeparator(); ++ } ++ m_popupMenu->addAction( m_actionRemove ); ++ m_popupMenu->addAction( m_actionAddSilence ); ++ m_popupMenu->addSeparator(); ++ m_popupMenu->addAction( m_actionSplitSource ); ++ m_popupMenu->addAction( m_actionSplitTrack ); ++ m_popupMenu->addAction( m_actionEditSource ); ++ m_popupMenu->addAction( m_actionMergeTracks ); ++ m_popupMenu->addAction( m_actionProperties ); ++ m_popupMenu->addSeparator(); ++ m_popupMenu->addAction( actionCollection()->action("project_burn") ); ++} ++ ++ ++void K3b::AudioView::trackProperties( const QModelIndexList& indexes ) ++{ ++ QList tracks; ++ QList sources; ++ getSelectedItems( tracks, sources, indexes ); ++ ++ // TODO: add tracks from sources to tracks + ++ if( !tracks.isEmpty() ) { ++ K3b::AudioTrackDialog d( tracks, this ); ++ d.exec(); ++ } ++ else { ++ slotProperties(); ++ } + } + + + void K3b::AudioView::getSelectedItems( QList& tracks, + QList& sources ) + { ++ getSelectedItems( tracks, sources, currentSelection() ); ++} ++ ++ ++ ++K3b::ProjectBurnDialog* K3b::AudioView::newBurnDialog( QWidget* parent ) ++{ ++ return new K3b::AudioBurnDialog( m_doc, parent ); ++} ++ ++ ++void K3b::AudioView::getSelectedItems( QList& tracks, ++ QList& sources, ++ const QModelIndexList& indexes ) ++{ + tracks.clear(); + sources.clear(); + +- QModelIndexList indexes = currentSelection(); +- + foreach( const QModelIndex& index, indexes ) { + if ( K3b::AudioTrack* track = m_model->trackForIndex( index ) ) { + tracks << track; +@@ -221,60 +269,51 @@ + } + + +- +-K3b::ProjectBurnDialog* K3b::AudioView::newBurnDialog( QWidget* parent ) +-{ +- return new K3b::AudioBurnDialog( m_doc, parent ); +-} +- +- +-void K3b::AudioView::contextMenuForSelection(const QModelIndexList &selectedIndexes, const QPoint &pos) ++void K3b::AudioView::selectionChanged( const QModelIndexList& indexes ) + { + QList tracks; + QList sources; +- getSelectedItems( tracks, sources ); ++ getSelectedItems( tracks, sources, indexes ); + + int numTracks = tracks.count(); + int numSources = sources.count(); + +- // build the menu +- KMenu popupMenu; +- +- if( m_actionPlayTrack && numTracks >= 1 ) { +- popupMenu.addAction( m_actionPlayTrack ); +- popupMenu.addSeparator(); ++ if( m_actionPlayTrack != 0 ) { ++ m_actionPlayTrack->setVisible( numTracks >= 1 ); + } +- +- if( numTracks + numSources ) +- popupMenu.addAction( m_actionRemove ); +- +- if( numSources + numTracks == 1 ) +- popupMenu.addAction( m_actionAddSilence ); ++ m_actionRemove->setVisible( numTracks + numSources ); ++ m_actionAddSilence->setVisible( numSources + numTracks == 1 ); + + if( numSources == 1 && numTracks == 0 ) { +- popupMenu.addSeparator(); +- popupMenu.addAction( m_actionSplitSource ); +- popupMenu.addAction( m_actionEditSource ); ++ m_actionSplitSource->setVisible( true ); ++ m_actionSplitTrack->setVisible( false ); ++ m_actionEditSource->setVisible( true ); ++ m_actionMergeTracks->setVisible( false ); + } + else if( numTracks == 1 && numSources == 0 ) { +- popupMenu.addSeparator(); +- +- if( tracks.first()->length().lba() > 60 ) +- popupMenu.addAction( m_actionSplitTrack ); +- +- popupMenu.addAction( m_actionEditSource ); +- ++ m_actionSplitSource->setVisible( false ); ++ m_actionSplitTrack->setVisible( tracks.first()->length().lba() > 60 ); ++ m_actionEditSource->setVisible( true ); ++ m_actionMergeTracks->setVisible( false ); + } +- else if( numTracks > 1 ) { +- popupMenu.addSeparator(); +- popupMenu.addAction( m_actionMergeTracks ); ++ else { ++ m_actionSplitSource->setVisible( false ); ++ m_actionSplitTrack->setVisible( false ); ++ m_actionEditSource->setVisible( false ); ++ m_actionMergeTracks->setVisible( numTracks > 1 ); + } ++} ++ ++ ++void K3b::AudioView::contextMenu( const QPoint& pos ) ++{ ++ m_popupMenu->exec( pos ); ++} + +- popupMenu.addAction( m_actionProperties ); +- popupMenu.addSeparator(); +- popupMenu.addAction( static_cast(m_doc->view())->actionCollection()->action( "project_burn" ) ); + +- popupMenu.exec( pos ); ++void K3b::AudioView::slotItemActivated( const QModelIndex& index ) ++{ ++ trackProperties( QModelIndexList() << index ); + } + + +@@ -466,19 +505,7 @@ + + void K3b::AudioView::slotTrackProperties() + { +- QList tracks; +- QList sources; +- getSelectedItems( tracks, sources ); +- +- // TODO: add tracks from sources to tracks +- +- if( !tracks.isEmpty() ) { +- K3b::AudioTrackDialog d( tracks, this ); +- d.exec(); +- } +- else { +- slotProperties(); +- } ++ trackProperties( currentSelection() ); + } + + void K3b::AudioView::slotAdjustColumns() +diff -ru src/projects/k3baudioview.h src/projects/k3baudioview.h +--- src/projects/k3baudioview.h 2009-04-21 19:54:02.000000000 +0200 ++++ src/projects/k3baudioview.h 2009-07-23 11:42:02.000000000 +0200 +@@ -3,6 +3,7 @@ + * Copyright (C) 2003-2007 Sebastian Trueg + * (C) 2009 Arthur Mello + * (C) 2009 Gustavo Pichorim Boiko ++ * (C) 2009 Michal Malek + * + * This file is part of the K3b project. + * Copyright (C) 1998-2009 Sebastian Trueg +@@ -23,6 +24,7 @@ + + #include + ++class KMenu; + + namespace K3b { + +@@ -50,14 +52,20 @@ + protected: + ProjectBurnDialog* newBurnDialog( QWidget* parent = 0 ); + ++ void getSelectedItems( QList& tracks, ++ QList& sources, ++ const QModelIndexList& indexes ); ++ + /** + * reimplemented from \ref K3b::StandardView + */ +- void contextMenuForSelection(const QModelIndexList &selectedIndexes, const QPoint &pos); ++ virtual void selectionChanged( const QModelIndexList& indexes ); ++ virtual void contextMenu( const QPoint& pos ); + + void init(); + + private Q_SLOTS: ++ void slotItemActivated( const QModelIndex& index ); + void slotAudioConversion(); + + // action slots +@@ -74,6 +82,7 @@ + + private: + void setupActions(); ++ void trackProperties( const QModelIndexList& indexes ); + + AudioDoc* m_doc; + K3b::AudioProjectModel* m_model; +@@ -86,6 +95,7 @@ + KAction* m_actionSplitTrack; + KAction* m_actionEditSource; + KAction* m_actionPlayTrack; ++ KMenu* m_popupMenu; + + K3b::ViewColumnAdjuster* m_columnAdjuster; + bool m_updatingColumnWidths; +diff -ru src/projects/k3bdataburndialog.cpp src/projects/k3bdataburndialog.cpp +--- src/projects/k3bdataburndialog.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ src/projects/k3bdataburndialog.cpp 2009-07-23 11:42:02.000000000 +0200 +@@ -153,8 +153,10 @@ + QWidget* frame = new QWidget( this ); + QGridLayout* frameLayout = new QGridLayout( frame ); + +- m_groupDataMode = new Q3GroupBox( 1, Qt::Vertical, i18n("Datatrack Mode"), frame ); ++ m_groupDataMode = new QGroupBox( i18n("Datatrack Mode"), frame ); + m_dataModeWidget = new K3b::DataModeWidget( m_groupDataMode ); ++ QVBoxLayout* groupDataModeLayout = new QVBoxLayout( m_groupDataMode ); ++ groupDataModeLayout->addWidget( m_dataModeWidget ); + + QGroupBox* groupMultiSession = new QGroupBox( i18n("Multisession Mode"), frame ); + m_comboMultisession = new K3b::DataMultiSessionCombobox( groupMultiSession ); +diff -ru src/projects/k3bdataburndialog.h src/projects/k3bdataburndialog.h +--- src/projects/k3bdataburndialog.h 2009-02-24 08:23:40.000000000 +0100 ++++ src/projects/k3bdataburndialog.h 2009-07-23 11:42:02.000000000 +0200 +@@ -1,9 +1,9 @@ + /* + * +- * Copyright (C) 2003-2007 Sebastian Trueg ++ * Copyright (C) 2003-2009 Sebastian Trueg + * + * This file is part of the K3b project. +- * Copyright (C) 1998-2007 Sebastian Trueg ++ * Copyright (C) 1998-2009 Sebastian Trueg + * + * 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 +@@ -17,11 +17,9 @@ + #define K3BDATABURNDIALOG_H + + #include "k3bprojectburndialog.h" +-//Added by qt3to4: +-#include + + class QCheckBox; +-class Q3GroupBox; ++class QGroupBox; + class QLabel; + + namespace K3b { +@@ -52,7 +50,7 @@ + DataImageSettingsWidget* m_imageSettingsWidget; + // ---------------------------------------------- + +- Q3GroupBox* m_groupDataMode; ++ QGroupBox* m_groupDataMode; + DataModeWidget* m_dataModeWidget; + DataMultiSessionCombobox* m_comboMultisession; + +diff -ru src/projects/k3bdataprojectmodel.cpp src/projects/k3bdataprojectmodel.cpp +--- src/projects/k3bdataprojectmodel.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ src/projects/k3bdataprojectmodel.cpp 2009-07-23 11:42:02.000000000 +0200 +@@ -187,6 +187,19 @@ + if ( index.isValid() ) { + K3b::DataItem* item = itemForIndex( index ); + ++ if ( role == K3b::ItemTypeRole ) { ++ if (item->isDir()) ++ return (int) K3b::DirItemType; ++ else ++ return (int) K3b::FileItemType; ++ } ++ else if ( role == K3b::CustomFlagsRole ) { ++ if (item->isRemoveable()) ++ return (int) K3b::ItemIsRemovable; ++ else ++ return 0; ++ } ++ + switch( index.column() ) { + case FilenameColumn: + if( role == Qt::DisplayRole || +@@ -204,18 +217,6 @@ + return KIcon( item->mimeType()->iconName() ); + } + } +- else if ( role == K3b::ItemTypeRole ) { +- if (item->isDir()) +- return (int) K3b::DirItemType; +- else +- return (int) K3b::FileItemType; +- } +- else if ( role == K3b::CustomFlagsRole ) { +- if (item->isRemoveable()) +- return (int) K3b::ItemIsRemovable; +- else +- return 0; +- } + break; + + case TypeColumn: +diff -ru src/projects/k3bdataview.cpp src/projects/k3bdataview.cpp +--- src/projects/k3bdataview.cpp 2009-04-26 11:20:20.000000000 +0200 ++++ src/projects/k3bdataview.cpp 2009-07-23 11:42:02.000000000 +0200 +@@ -2,6 +2,7 @@ + * + * Copyright (C) 2003-2008 Sebastian Trueg + * (C) 2009 Gustavo Pichorim Boiko ++ * (C) 2009 Michal Malek + * + * This file is part of the K3b project. + * Copyright (C) 1998-2009 Sebastian Trueg +@@ -28,7 +29,6 @@ + #include "k3bdeviceselectiondialog.h" + #include "k3bfillstatusdisplay.h" + #include "k3bcore.h" +-#include "k3bprojectplugin.h" + #include "k3bvalidators.h" + #include "k3baction.h" + +@@ -68,31 +68,12 @@ + setModel(m_model); + + connect( m_doc, SIGNAL(changed()), this, SLOT(slotDocChanged()) ); ++ connect( this, SIGNAL(currentRootChanged(QModelIndex)), SLOT(slotCurrentRootChanged(QModelIndex)) ); ++ connect( this, SIGNAL(activated(QModelIndex)), SLOT(slotFileItemActivated(QModelIndex)) ); + +- setupContextMenu(); ++ setupActions(); + +- // the data actions +- KAction* actionImportSession = K3b::createAction( this, i18n("&Import Session..."), "document-import", 0, this, SLOT(importSession()), +- actionCollection(), "project_data_import_session" ); +- KAction* actionClearSession = K3b::createAction( this, i18n("&Clear Imported Session"), "edit-clear", 0, this, +- SLOT(clearImportedSession()), actionCollection(), +- "project_data_clear_imported_session" ); +- KAction* actionEditBootImages = K3b::createAction( this, i18n("&Edit Boot Images..."), "document-properties", 0, this, +- SLOT(editBootImages()), actionCollection(), +- "project_data_edit_boot_images" ); +- +- actionImportSession->setToolTip( i18n("Import a previously burned session into the current project") ); +- actionClearSession->setToolTip( i18n("Remove the imported items from a previous session") ); +- actionEditBootImages->setToolTip( i18n("Modify the bootable settings of the current project") ); +- +- toolBox()->addAction( actionImportSession ); +- toolBox()->addAction( actionClearSession ); +- toolBox()->addAction( actionEditBootImages ); +- toolBox()->addSeparator(); +- toolBox()->addAction( actionCollection()->action("parent_dir") ); +- toolBox()->addSeparator(); +- +- addPluginButtons( K3b::ProjectPlugin::DATA_CD ); ++ addPluginButtons(); + + m_volumeIDEdit = new QLineEdit( doc->isoOptions().volumeID(), toolBox() ); + m_volumeIDEdit->setValidator( new K3b::Latin1Validator( m_volumeIDEdit ) ); +@@ -101,6 +82,9 @@ + connect( m_volumeIDEdit, SIGNAL(textChanged(const QString&)), + m_doc, + SLOT(setVolumeID(const QString&)) ); ++ ++ // Update actions associated with current directory ++ slotCurrentRootChanged( currentRoot() ); + + // this is just for testing (or not?) + // most likely every project type will have it's rc file in the future +@@ -182,8 +166,22 @@ + DataUrlAddingDialog::addUrls( urls, item); + } + +-void K3b::DataView::setupContextMenu() ++void K3b::DataView::setupActions() + { ++ // the data actions ++ m_actionImportSession = K3b::createAction( this, i18n("&Import Session..."), "document-import", 0, this, SLOT(importSession()), ++ actionCollection(), "project_data_import_session" ); ++ m_actionClearSession = K3b::createAction( this, i18n("&Clear Imported Session"), "edit-clear", 0, this, ++ SLOT(clearImportedSession()), actionCollection(), ++ "project_data_clear_imported_session" ); ++ m_actionEditBootImages = K3b::createAction( this, i18n("&Edit Boot Images..."), "document-properties", 0, this, ++ SLOT(editBootImages()), actionCollection(), ++ "project_data_edit_boot_images" ); ++ ++ m_actionImportSession->setToolTip( i18n("Import a previously burned session into the current project") ); ++ m_actionClearSession->setToolTip( i18n("Remove the imported items from a previous session") ); ++ m_actionEditBootImages->setToolTip( i18n("Modify the bootable settings of the current project") ); ++ + m_actionProperties = new KAction( this ); + m_actionProperties->setText( i18n("Properties") ); + m_actionProperties->setIcon( KIcon( "document-properties" ) ); +@@ -205,7 +203,16 @@ + actionCollection(), "parent_dir" ); + m_actionOpen = K3b::createAction( this, i18n("Open"), "document-open", 0, this, SLOT(slotOpen()), + actionCollection(), "open" ); +- ++ ++ // Setup toolbar ++ toolBox()->addAction( m_actionImportSession ); ++ toolBox()->addAction( m_actionClearSession ); ++ toolBox()->addAction( m_actionEditBootImages ); ++ toolBox()->addSeparator(); ++ toolBox()->addAction( m_actionParentDir ); ++ toolBox()->addSeparator(); ++ ++ // Create context menu + m_popupMenu = new KMenu( this ); + m_popupMenu->addAction( m_actionParentDir ); + m_popupMenu->addSeparator(); +@@ -220,20 +227,21 @@ + m_popupMenu->addAction( actionCollection()->action("project_burn") ); + } + +-void K3b::DataView::contextMenuForSelection(const QModelIndexList &selectedIndexes, const QPoint &pos) ++ ++void K3b::DataView::selectionChanged( const QModelIndexList& indexes ) + { +- bool open = true, rename = true, remove = true, parent = true; ++ bool open = true, rename = true, remove = true; + + // we can only rename one item at a time + // also, we can only create a new dir over a single directory +- if (selectedIndexes.count() > 1) ++ if (indexes.count() > 1) + { + rename = false; + open = false; + } +- else if (selectedIndexes.count() == 1) ++ else if (indexes.count() == 1) + { +- QModelIndex index = selectedIndexes.first(); ++ QModelIndex index = indexes.first(); + rename = (index.flags() & Qt::ItemIsEditable); + open = (index.data(K3b::ItemTypeRole).toInt() == (int) K3b::FileItemType); + } +@@ -245,7 +253,7 @@ + } + + // check if all selected items can be removed +- foreach(const QModelIndex &index, selectedIndexes) ++ foreach(const QModelIndex &index, indexes) + { + if (!index.data(K3b::CustomFlagsRole).toInt() & K3b::ItemIsRemovable) + { +@@ -254,17 +262,18 @@ + } + } + +- if (m_model->indexForItem(m_doc->root()) == currentRoot()) +- parent = false; +- + m_actionRename->setEnabled( rename ); + m_actionRemove->setEnabled( remove ); + m_actionOpen->setEnabled( open ); +- m_actionParentDir->setEnabled( parent ); ++} + +- m_popupMenu->exec(pos); ++ ++void K3b::DataView::contextMenu( const QPoint& pos ) ++{ ++ m_popupMenu->exec( pos ); + } + ++ + void K3b::DataView::slotNewDir() + { + K3b::DirItem *parent = 0; +@@ -297,6 +306,7 @@ + m_doc->addEmptyDir( name, parent ); + } + ++ + void K3b::DataView::slotItemProperties() + { + QModelIndexList selection = currentSelection(); +@@ -341,4 +351,28 @@ + } + } + ++ ++void K3b::DataView::slotCurrentRootChanged( const QModelIndex& newRoot ) ++{ ++ m_actionParentDir->setEnabled( m_model->indexForItem(m_doc->root()) != newRoot ); ++} ++ ++ ++void K3b::DataView::slotFileItemActivated( const QModelIndex& index ) ++{ ++ if( index.isValid() ) { ++ int type = index.data(ItemTypeRole).toInt(); ++ if( type == (int)DirItemType ) { ++ StandardView::setCurrentRoot( index ); ++ } ++ else if( type == (int)FileItemType ) { ++ QList items; ++ items.append( m_model->itemForIndex(index) ); ++ DataPropertiesDialog dlg( items, this ); ++ dlg.exec(); ++ } ++ } ++} ++ ++ + #include "k3bdataview.moc" +diff -ru src/projects/k3bdataview.h src/projects/k3bdataview.h +--- src/projects/k3bdataview.h 2009-04-21 19:54:02.000000000 +0200 ++++ src/projects/k3bdataview.h 2009-07-23 11:42:02.000000000 +0200 +@@ -1,6 +1,7 @@ + /* + * + * Copyright (C) 2003-2007 Sebastian Trueg ++ * (C) 2009 Michal Malek + * + * This file is part of the K3b project. + * Copyright (C) 1998-2007 Sebastian Trueg +@@ -55,6 +56,8 @@ + void slotNewDir(); + void slotItemProperties(); + void slotOpen(); ++ void slotCurrentRootChanged( const QModelIndex& newRoot ); ++ void slotFileItemActivated( const QModelIndex& index ); + + protected: + QLineEdit* m_volumeIDEdit; +@@ -64,14 +67,19 @@ + /** + * reimplemented from @ref StandardView + */ +- virtual void contextMenuForSelection(const QModelIndexList &selectedIndexes, const QPoint &pos); ++ virtual void selectionChanged( const QModelIndexList& indexes ); ++ virtual void contextMenu( const QPoint& pos ); ++ ++ KAction* m_actionImportSession; ++ KAction* m_actionClearSession; ++ KAction* m_actionEditBootImages; + + private: ++ void setupActions(); ++ + DataDoc* m_doc; + K3b::DataProjectModel* m_model; + +- void setupContextMenu(); +- + KMenu* m_popupMenu; + KAction* m_actionParentDir; + KAction* m_actionRemove; +diff -ru src/projects/k3bmixedview.cpp src/projects/k3bmixedview.cpp +--- src/projects/k3bmixedview.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ src/projects/k3bmixedview.cpp 2009-07-23 11:42:02.000000000 +0200 +@@ -27,7 +27,6 @@ + #include "k3baudiodoc.h" + #include "k3bdatadoc.h" + #include "k3bfillstatusdisplay.h" +-#include "k3bprojectplugin.h" + #include "k3bdiritem.h" + + #include +@@ -69,7 +68,7 @@ + toolBox()->addSeparator(); + #endif + #endif +- addPluginButtons( K3b::ProjectPlugin::MIXED_CD ); ++ addPluginButtons(); + } + + +diff -ru src/projects/k3bmovixview.cpp src/projects/k3bmovixview.cpp +--- src/projects/k3bmovixview.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ src/projects/k3bmovixview.cpp 2009-07-23 11:42:02.000000000 +0200 +@@ -3,6 +3,7 @@ + * Copyright (C) 2003-2007 Sebastian Trueg + * (C) 2009 Arthur Renato Mello + * (C) 2009 Gustavo Pichorim Boiko ++ * (C) 2009 Michal Malek + * + * This file is part of the K3b project. + * Copyright (C) 1998-2009 Sebastian Trueg +@@ -23,7 +24,6 @@ + + #include "k3bfillstatusdisplay.h" + #include "k3bdatapropertiesdialog.h" +-#include "k3bprojectplugin.h" + #include "k3baction.h" + + #include +@@ -77,7 +77,7 @@ + // k3bMain()->actionCollection()->action("file_burn")->plug( m_popupMenu ); + + +- addPluginButtons( K3b::ProjectPlugin::MOVIX_CD ); ++ addPluginButtons(); + + m_volumeIDEdit = new QLineEdit( doc->isoOptions().volumeID(), toolBox() ); + toolBox()->addWidget( new QLabel( i18n("Volume Name:"), toolBox() ) ); +@@ -95,34 +95,6 @@ + } + + +-void K3b::MovixView::contextMenuForSelection(const QModelIndexList &selectedIndexes, const QPoint &pos) +-{ +- if( selectedIndexes.count() >= 1 ) { +- m_actionRemove->setEnabled(true); +- +- bool subtitle = false; +- // check if any of the items have a subtitle +- foreach (const QModelIndex &index, selectedIndexes) { +- K3b::MovixFileItem *item = m_model->itemForIndex(index); +- if (item && item->subTitleItem()) { +- subtitle = true; +- break; +- } +- } +- m_actionRemoveSubTitle->setEnabled( subtitle ); +- // only enable the subtitle adding if there is just one item selected +- m_actionAddSubTitle->setEnabled( selectedIndexes.count() == 1 ); +- } +- else { +- m_actionRemove->setEnabled(false); +- m_actionRemoveSubTitle->setEnabled( false ); +- m_actionAddSubTitle->setEnabled( false ); +- } +- +- m_popupMenu->popup( pos ); +-} +- +- + void K3b::MovixView::showPropertiesDialog() + { + QModelIndexList selection = currentSelection(); +@@ -187,6 +159,38 @@ + } + + ++void K3b::MovixView::selectionChanged( const QModelIndexList& indexes ) ++{ ++ if( indexes.count() >= 1 ) { ++ m_actionRemove->setEnabled(true); ++ ++ bool subtitle = false; ++ // check if any of the items have a subtitle ++ foreach (const QModelIndex &index, indexes) { ++ K3b::MovixFileItem *item = m_model->itemForIndex(index); ++ if (item && item->subTitleItem()) { ++ subtitle = true; ++ break; ++ } ++ } ++ m_actionRemoveSubTitle->setEnabled( subtitle ); ++ // only enable the subtitle adding if there is just one item selected ++ m_actionAddSubTitle->setEnabled( indexes.count() == 1 ); ++ } ++ else { ++ m_actionRemove->setEnabled(false); ++ m_actionRemoveSubTitle->setEnabled( false ); ++ m_actionAddSubTitle->setEnabled( false ); ++ } ++} ++ ++ ++void K3b::MovixView::contextMenu( const QPoint& pos ) ++{ ++ m_popupMenu->popup( pos ); ++} ++ ++ + K3b::ProjectBurnDialog* K3b::MovixView::newBurnDialog( QWidget* parent ) + { + return new K3b::MovixBurnDialog( m_doc, parent ); +diff -ru src/projects/k3bmovixview.h src/projects/k3bmovixview.h +--- src/projects/k3bmovixview.h 2009-04-21 19:54:02.000000000 +0200 ++++ src/projects/k3bmovixview.h 2009-07-23 11:42:02.000000000 +0200 +@@ -3,6 +3,7 @@ + * Copyright (C) 2003-2007 Sebastian Trueg + * (C) 2009 Arthur Renato Mello + * (C) 2009 Gustavo Pichorim Boiko ++ * (C) 2009 Michal Malek + * + * This file is part of the K3b project. + * Copyright (C) 1998-2009 Sebastian Trueg +@@ -44,13 +45,18 @@ + virtual ~MovixView(); + + private Q_SLOTS: +- void contextMenuForSelection(const QModelIndexList &selectedIndexes, const QPoint &pos); + void slotRemoveSubTitleItems(); + void showPropertiesDialog(); + void slotAddSubTitleFile(); + void slotDocChanged(); + + protected: ++ /** ++ * reimplemented from @ref StandardView ++ */ ++ virtual void selectionChanged( const QModelIndexList& indexes ); ++ virtual void contextMenu( const QPoint& pos ); ++ + virtual ProjectBurnDialog* newBurnDialog( QWidget* parent = 0 ); + + private: +diff -ru src/projects/k3bstandardview.cpp src/projects/k3bstandardview.cpp +--- src/projects/k3bstandardview.cpp 2009-04-08 22:48:47.000000000 +0200 ++++ src/projects/k3bstandardview.cpp 2009-07-23 11:42:02.000000000 +0200 +@@ -1,6 +1,7 @@ + /* + * + * Copyright (C) 2009 Gustavo Pichorim Boiko ++ * (C) 2009 Michal Malek + * + * This file is part of the K3b project. + * Copyright (C) 1998-2009 Sebastian Trueg +@@ -16,11 +17,13 @@ + #include "k3bdirproxymodel.h" + + #include ++#include + #include + #include + #include +-#include + #include ++#include ++#include + + K3b::StandardView::StandardView(K3b::Doc* doc, QWidget *parent ) + : K3b::View(doc, parent) +@@ -44,18 +47,22 @@ + m_dirView->setSelectionMode(QTreeView::SingleSelection); + m_dirView->setModel(m_dirProxy); + m_dirView->setContextMenuPolicy(Qt::CustomContextMenu); +- m_dirView->setAnimated(true); ++ m_dirView->setAnimated( KGlobalSettings::graphicEffectsLevel() == KGlobalSettings::SimpleAnimationEffects || ++ KGlobalSettings::graphicEffectsLevel() == KGlobalSettings::ComplexAnimationEffects ); + + // File panel + m_fileView->setAcceptDrops(true); + m_fileView->setDragEnabled(true); + m_fileView->setDragDropMode(QTreeView::DragDrop); ++ m_fileView->setItemsExpandable(false); + m_fileView->setRootIsDecorated(false); + m_fileView->setSelectionMode(QTreeView::ExtendedSelection); + m_fileView->setContextMenuPolicy(Qt::CustomContextMenu); +- m_fileView->setAnimated(true); ++ m_fileView->setAnimated( KGlobalSettings::graphicEffectsLevel() == KGlobalSettings::SimpleAnimationEffects || ++ KGlobalSettings::graphicEffectsLevel() == KGlobalSettings::ComplexAnimationEffects ); + // FIXME: make QHeaderView::Interactive the default but connect to model changes and call header()->resizeSections( QHeaderView::ResizeToContents ); + m_fileView->header()->setResizeMode( QHeaderView::ResizeToContents ); ++ m_fileView->setEditTriggers( QAbstractItemView::NoEditTriggers ); + + m_expanded = false; + // connect signals/slots +@@ -63,6 +70,8 @@ + this, SLOT(slotCustomContextMenu(const QPoint&))); + connect(m_fileView, SIGNAL(customContextMenuRequested(const QPoint&)), + this, SLOT(slotCustomContextMenu(const QPoint&))); ++ connect(qApp, SIGNAL(focusChanged(QWidget*,QWidget*)), ++ this, SLOT(slotFocusChanged(QWidget*,QWidget*)) ); + } + + K3b::StandardView::~StandardView() +@@ -82,10 +91,14 @@ + // connect signals/slots + // this signal is better to get connected before the setCurrentIndex is called, + // so that it updates the file view +- connect(m_dirView->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection&)), ++ connect(m_dirView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), + this, SLOT(slotCurrentDirChanged())); ++ connect(m_fileView, SIGNAL(doubleClicked(QModelIndex)), ++ SIGNAL(activated(QModelIndex))); + connect(model, SIGNAL(rowsInserted(const QModelIndex&, int, int)), + this, SLOT(slotItemsAdded())); ++ connect(m_fileView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), ++ this, SLOT(slotFileViewSelectionChanged())); + + // select the first item from the model + if (m_dirProxy->rowCount() > 0) +@@ -99,15 +112,36 @@ + m_fileView->setRootIndex(QModelIndex()); + } + +-void K3b::StandardView::contextMenuForSelection(const QModelIndexList &selectedIndexes, const QPoint &pos) ++void K3b::StandardView::selectionChanged( const QModelIndexList& indexes ) + { + // do nothing in the default implementation (at least for now) +- qDebug() << "Gotta show a menu for " << selectedIndexes.count() << " items at " << pos; ++ kDebug() << "Selected " << indexes.count() << " items"; ++} ++ ++void K3b::StandardView::contextMenu( const QPoint& pos ) ++{ ++ // do nothing in the default implementation (at least for now) ++ kDebug() << "Gotta show a menu at " << pos; + } + + QModelIndexList K3b::StandardView::currentSelection() const + { +- return m_currentSelection; ++ QModelIndexList selected; ++ if( m_dirView->hasFocus() ) { ++ // if dirview has focus, we need to map the indexes to the source model ++ foreach( const QModelIndex& index, m_dirView->selectionModel()->selectedRows() ) { ++ selected.append( m_dirProxy->mapToSource( index ) ); ++ } ++ } ++ else if( m_fileView->hasFocus() ) { ++ selected = m_fileView->selectionModel()->selectedRows(); ++ } ++ return selected; ++} ++ ++void K3b::StandardView::setCurrentRoot( const QModelIndex& index ) ++{ ++ m_dirView->setCurrentIndex( m_dirProxy->mapFromSource( index ) ); + } + + QModelIndex K3b::StandardView::currentRoot() const +@@ -133,44 +167,30 @@ + QModelIndexList indexes = m_dirView->selectionModel()->selectedRows(); + + QModelIndex currentDir; +- if (indexes.count()) ++ if (indexes.count()) { + currentDir = m_dirProxy->mapToSource(indexes.first()); ++ ++ if( m_dirView->hasFocus() ) { ++ selectionChanged( QModelIndexList() << currentDir ); ++ } ++ } + + // make the file view show only the child nodes of the currently selected + // directory from dir view + m_fileView->setRootIndex(currentDir); + m_fileView->header()->resizeSections( QHeaderView::Stretch ); +- ++ + emit currentRootChanged( currentDir ); + } + +-void K3b::StandardView::slotCustomContextMenu(const QPoint &pos) ++void K3b::StandardView::slotCustomContextMenu( const QPoint &pos ) + { +- QModelIndexList selection; + // detect which view emitted the signal +- QTreeView *view = dynamic_cast(sender()); +- +- // this should not happen, but just in case... +- if (!view) +- return; +- +- // if the signal was emitted by the dirview, we need to map the indexes to the +- // source model +- if (view == m_dirView) +- { +- foreach(const QModelIndex &index, view->selectionModel()->selectedRows()) +- selection.append( m_dirProxy->mapToSource(index) ); +- } +- else +- { +- selection = view->selectionModel()->selectedRows(); +- } +- +- m_currentSelection = selection; +- +- // call the context menu method so that derived classes can place customized +- // context menus +- contextMenuForSelection(selection, view->viewport()->mapToGlobal(pos)); ++ if( QTreeView *view = dynamic_cast(sender()) ) { ++ // call the context menu method so that derived classes can place customized ++ // context menus ++ contextMenu( view->viewport()->mapToGlobal(pos) ); ++ } + } + + void K3b::StandardView::slotParentDir() +@@ -186,27 +206,26 @@ + + // create a list of persistent model indexes to be able to remove all of them + QList indexes; +- foreach(const QModelIndex &index, m_currentSelection) ++ foreach( const QModelIndex &index, currentSelection() ) { + indexes.append( QPersistentModelIndex(index) ); +- ++ } + + // and now ask the indexes to be removed +- foreach(const QPersistentModelIndex &index, indexes) ++ foreach(const QPersistentModelIndex &index, indexes) { + model->removeRow(index.row(), index.parent()); +- +- // clear the selection, just to make sure +- m_currentSelection.clear(); ++ } + } + + void K3b::StandardView::slotRenameItem() + { +- if (m_currentSelection.isEmpty()) +- return; +- +- if (m_dirView->hasFocus()) +- m_dirView->edit( m_dirProxy->mapFromSource(m_currentSelection.first()) ); +- else +- m_fileView->edit( m_currentSelection.first() ); ++ QModelIndexList selected = currentSelection(); ++ ++ if (!selected.isEmpty()) { ++ if (m_dirView->hasFocus()) ++ m_dirView->edit( m_dirProxy->mapFromSource(selected.first()) ); ++ else ++ m_fileView->edit( selected.first() ); ++ } + } + + void K3b::StandardView::slotItemsAdded() +@@ -215,4 +234,18 @@ + m_fileView->expandAll(); + } + ++void K3b::StandardView::slotFileViewSelectionChanged() ++{ ++ if( m_fileView->hasFocus() ) { ++ selectionChanged( m_fileView->selectionModel()->selectedRows() ); ++ } ++} ++ ++void K3b::StandardView::slotFocusChanged( QWidget*, QWidget* now ) ++{ ++ if( now == m_dirView || now == m_fileView ) { ++ selectionChanged( currentSelection() ); ++ } ++} ++ + #include "k3bstandardview.moc" +diff -ru src/projects/k3bstandardview.h src/projects/k3bstandardview.h +--- src/projects/k3bstandardview.h 2009-04-21 19:54:02.000000000 +0200 ++++ src/projects/k3bstandardview.h 2009-07-23 11:42:02.000000000 +0200 +@@ -1,6 +1,7 @@ + /* + * + * Copyright (C) 2009 Gustavo Pichorim Boiko ++ * (C) 2009 Michal Malek + * + * This file is part of the K3b project. + * Copyright (C) 1998-2009 Sebastian Trueg +@@ -63,27 +64,33 @@ + * or not. + */ + void setShowDirPanel(bool show); ++ ++ /** ++ * Called when set of selected items is changed. ++ * Can be used to updated state of actions working on selected items. ++ * ++ * The default implementation does nothing (at least for now) ++ */ ++ virtual void selectionChanged( const QModelIndexList& indexes ); + + /** +- * Context menu for a list of indexes. +- * This method should be reimplemented in derived classes to get +- * custom context menus for the selected items. ++ * Called when context menu is supposed to show at specified point. ++ * This method should be reimplemented in derived classes to show ++ * custom context menus. + * + * The default implementation does nothing (at least for now) + */ +- virtual void contextMenuForSelection(const QModelIndexList &selectedIndexes, const QPoint &pos); ++ virtual void contextMenu( const QPoint& pos ); + + /** + * Returns a list of the currently selected indexes. +- * This method is meant to be used together with @ref contextMenuForSelection() +- * meaning that when @ref contextMenuForSelection() is called, currentSelection() +- * will provide the same list as the one used in the previous slot. + * + * The main purpose of its existence is for slots connected to actions in the context menu + * to know which items they should operate in + */ + QModelIndexList currentSelection() const; + ++ void setCurrentRoot( const QModelIndex& index ); + QModelIndex currentRoot() const; + + /** +@@ -130,16 +137,18 @@ + * file view + */ + void slotItemsAdded(); ++ void slotFileViewSelectionChanged(); ++ void slotFocusChanged( QWidget* old, QWidget* now ); + + signals: + void currentRootChanged( const QModelIndex& newRoot ); ++ void activated( const QModelIndex& index ); + + private: + QTreeView* m_dirView; + QTreeView* m_fileView; + QSplitter* m_splitter; + DirProxyModel* m_dirProxy; +- QModelIndexList m_currentSelection; + bool m_expanded; + }; + } +diff -ru src/projects/k3bvcdview.cpp src/projects/k3bvcdview.cpp +--- src/projects/k3bvcdview.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ src/projects/k3bvcdview.cpp 2009-07-23 11:42:02.000000000 +0200 +@@ -2,6 +2,7 @@ + * + * Copyright (C) 2003-2004 Christian Kvasny + * (C) 2009 Arthur Renato Mello ++* (C) 2009 Michal Malek + * + * This file is part of the K3b project. + * Copyright (C) 1998-2009 Sebastian Trueg +@@ -96,15 +97,19 @@ + } + + +-void K3b::VcdView::contextMenuForSelection(const QModelIndexList &selectedIndexes, const QPoint &pos) ++void K3b::VcdView::selectionChanged( const QModelIndexList& indexes ) + { +- if( selectedIndexes.count() >= 1 ) { ++ if( indexes.count() >= 1 ) { + m_actionRemove->setEnabled(true); + } + else { + m_actionRemove->setEnabled(false); + } ++} ++ + ++void K3b::VcdView::contextMenu( const QPoint& pos ) ++{ + m_popupMenu->popup( pos ); + } + +diff -ru src/projects/k3bvcdview.h src/projects/k3bvcdview.h +--- src/projects/k3bvcdview.h 2009-04-21 19:54:02.000000000 +0200 ++++ src/projects/k3bvcdview.h 2009-07-23 11:42:02.000000000 +0200 +@@ -2,6 +2,7 @@ + * + * Copyright (C) 2003-2004 Christian Kvasny + * (C) 2009 Arthur Renato Mello ++* (C) 2009 Michal Malek + * + * This file is part of the K3b project. + * Copyright (C) 1998-2009 Sebastian Trueg +@@ -49,7 +50,11 @@ + ~VcdView(); + + private Q_SLOTS: +- void contextMenuForSelection(const QModelIndexList &selectedIndexes, const QPoint &pos); ++ /** ++ * reimplemented from @ref StandardView ++ */ ++ virtual void selectionChanged( const QModelIndexList& indexes ); ++ virtual void contextMenu( const QPoint& pos ); + void showPropertiesDialog(); + + protected: +diff -ru src/projects/k3bvideodvdburndialog.cpp src/projects/k3bvideodvdburndialog.cpp +--- src/projects/k3bvideodvdburndialog.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ src/projects/k3bvideodvdburndialog.cpp 2009-07-23 11:42:02.000000000 +0200 +@@ -31,6 +31,7 @@ + #include + #include + ++#include + #include + #include + #include +diff -ru src/projects/k3bvideodvdview.cpp src/projects/k3bvideodvdview.cpp +--- src/projects/k3bvideodvdview.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ src/projects/k3bvideodvdview.cpp 2009-07-23 11:42:02.000000000 +0200 +@@ -2,6 +2,7 @@ + * + * Copyright (C) 2005-2007 Sebastian Trueg + * (C) 2009 Arthur Renato Mello ++ * (C) 2009 Michal Malek + * + * This file is part of the K3b project. + * Copyright (C) 1998-2009 Sebastian Trueg +@@ -14,46 +15,25 @@ + */ + + #include "k3bvideodvdview.h" +-#include "k3bvideodvddoc.h" +-#include "k3bdataprojectmodel.h" + #include "k3bvideodvdburndialog.h" +-//#include "k3bdatadirtreeview.h" +-//#include "k3bdatafileview.h" +-#include "k3bdataurladdingdialog.h" +-#include "k3bfillstatusdisplay.h" +-#include "k3bprojectplugin.h" +- +-#include +-#include +-#include ++#include "k3bvideodvddoc.h" + +-#include ++#include ++#include ++#include + + + K3b::VideoDvdView::VideoDvdView( K3b::VideoDvdDoc* doc, QWidget *parent ) +- : K3b::StandardView( doc, parent ), ++ : K3b::DataView( doc, parent ), + m_doc(doc) + { +- m_model = new K3b::DataProjectModel(m_doc, this); +- // set the model for the K3b::StandardView's views +- setModel(m_model); +- +-#if 0 +- // --- setup GUI --------------------------------------------------- +- QSplitter* mainSplitter = new QSplitter( this ); +- m_dataDirTree = new K3b::DataDirTreeView( this, doc, mainSplitter ); +- m_dataFileView = new K3b::DataFileView( this, doc, mainSplitter ); +- mainSplitter->setStretchFactor( 0, 1 ); +- mainSplitter->setStretchFactor( 1, 3 ); +- setMainWidget( mainSplitter ); +- +- connect( m_dataFileView, SIGNAL(dirSelected(K3b::DirItem*)), m_dataDirTree, SLOT(setCurrentDir(K3b::DirItem*)) ); +-#endif +- addPluginButtons( K3b::ProjectPlugin::VIDEO_DVD ); ++ m_actionImportSession->setEnabled( false ); ++ m_actionImportSession->setVisible( false ); ++ m_actionClearSession->setEnabled( false ); ++ m_actionClearSession->setVisible( false ); ++ m_actionEditBootImages->setEnabled( false ); ++ m_actionEditBootImages->setVisible( false ); + } +-#ifdef __GNUC__ +-#warning get the currentDir connections from K3b::DataView or maybe inherit from it +-#endif + + + K3b::VideoDvdView::~VideoDvdView() +@@ -79,11 +59,4 @@ + } + + +-void K3b::VideoDvdView::addUrls( const KUrl::List& urls ) +-{ +- /* +- K3b::DataUrlAddingDialog::addUrls( urls, m_dataFileView->currentDir() ); +- */ +-} +- + #include "k3bvideodvdview.moc" +diff -ru src/projects/k3bvideodvdview.h src/projects/k3bvideodvdview.h +--- src/projects/k3bvideodvdview.h 2009-04-21 19:54:02.000000000 +0200 ++++ src/projects/k3bvideodvdview.h 2009-07-23 11:42:02.000000000 +0200 +@@ -2,6 +2,7 @@ + * + * Copyright (C) 2005-2007 Sebastian Trueg + * (C) 2009 Arthur Renato Mello ++ * (C) 2009 Michal Malek + * + * This file is part of the K3b project. + * Copyright (C) 1998-2009 Sebastian Trueg +@@ -17,13 +18,12 @@ + #ifndef _K3B_VIDEO_DVDVIEW_H_ + #define _K3B_VIDEO_DVDVIEW_H_ + +-#include "k3bstandardview.h" ++#include "k3bdataview.h" + + namespace K3b { + class VideoDvdDoc; +- class DataProjectModel; + +- class VideoDvdView : public StandardView ++ class VideoDvdView : public DataView + { + Q_OBJECT + +@@ -31,8 +31,6 @@ + VideoDvdView( VideoDvdDoc* doc, QWidget *parent = 0 ); + ~VideoDvdView(); + +- void addUrls( const KUrl::List& ); +- + protected: + virtual ProjectBurnDialog* newBurnDialog( QWidget* parent = 0 ); + +@@ -40,9 +38,6 @@ + + private: + VideoDvdDoc* m_doc; +- //DataDirTreeView* m_dataDirTree; +- //DataFileView* m_dataFileView; +- K3b::DataProjectModel* m_model; + }; + } + +diff -ru src/projects/k3bview.cpp src/projects/k3bview.cpp +--- src/projects/k3bview.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ src/projects/k3bview.cpp 2009-07-23 11:42:02.000000000 +0200 +@@ -117,13 +117,13 @@ + } + + +-void K3b::View::addPluginButtons( int projectType ) ++void K3b::View::addPluginButtons() + { + QList pl = k3bcore->pluginManager()->plugins( "ProjectPlugin" ); + for( QList::const_iterator it = pl.constBegin(); + it != pl.constEnd(); ++it ) { + K3b::ProjectPlugin* pp = dynamic_cast( *it ); +- if( pp && (pp->type() & projectType) ) { ++ if( pp && (pp->type() & m_doc->type()) ) { + QAction* button = toolBox()->addAction( pp->text(), + this, + SLOT(slotPluginButtonClicked()) ); +diff -ru src/projects/k3bview.h src/projects/k3bview.h +--- src/projects/k3bview.h 2009-02-22 23:46:14.000000000 +0100 ++++ src/projects/k3bview.h 2009-07-23 11:42:02.000000000 +0200 +@@ -86,10 +86,8 @@ + /** + * Call this to add the projectplugin buttons to the toolbox. It is not called + * automatically to make it possible to add other buttons before. +- * +- * @param projectType the type of the project (@see ProjectPlugin) + */ +- void addPluginButtons( int projectType ); ++ void addPluginButtons(); + + FillStatusDisplay* fillStatusDisplay() const { return m_fillStatusDisplay; } + KToolBar* toolBox() const { return m_toolBox; } +diff -ru src/rip/k3baudioripjob.cpp src/rip/k3baudioripjob.cpp +--- src/rip/k3baudioripjob.cpp 2009-05-27 11:58:34.000000000 +0200 ++++ src/rip/k3baudioripjob.cpp 2009-07-23 11:42:04.000000000 +0200 +@@ -284,9 +284,6 @@ + return false; + } + else { +- if( k3bcore->globalSettings()->ejectMedia() ) +- K3b::eject( m_device ); +- + return success; + } + } +diff -ru src/rip/videodvd/k3bvideodvdrippingtitlelistview.cpp src/rip/videodvd/k3bvideodvdrippingtitlelistview.cpp +--- src/rip/videodvd/k3bvideodvdrippingtitlelistview.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ src/rip/videodvd/k3bvideodvdrippingtitlelistview.cpp 2009-07-23 11:42:04.000000000 +0200 +@@ -243,7 +243,7 @@ + case 1: + // Title X + length + return i18n("

Title %1 (%2)
%3", +- QString::number( m_title.titleNumber(), 2 ), ++ QString::number( m_title.titleNumber() ).rightJustified( 2 ), + m_title.playbackTime().toString( false ), + i18np("%1 chapter", "%1 chapters", m_title.numPTTs() ) ); + +diff -ru src/rip/videodvd/k3bvideodvdrippingwidget.cpp src/rip/videodvd/k3bvideodvdrippingwidget.cpp +--- src/rip/videodvd/k3bvideodvdrippingwidget.cpp 2009-04-21 19:54:02.000000000 +0200 ++++ src/rip/videodvd/k3bvideodvdrippingwidget.cpp 2009-04-24 10:39:13.000000000 +0200 +@@ -26,7 +26,10 @@ + #include + #include + #include ++#include ++#if KDE_IS_VERSION(4,2,0) + #include ++#endif + + #include + #include +@@ -255,10 +258,17 @@ + path.truncate( path.lastIndexOf('/') ); + + QPalette pal( m_labelFreeSpace->palette() ); ++#if KDE_IS_VERSION(4,2,0) + KDiskFreeSpaceInfo free = KDiskFreeSpaceInfo::freeSpaceInfo( path ); + if( free.isValid() ) { + m_labelFreeSpace->setText( KIO::convertSizeFromKiB(free.available()) ); + if( free.available() < m_neededSize/1024 ) ++#else ++ unsigned long size, avail; ++ if( K3b::kbFreeOnFs( path, size, avail ) ) { ++ m_labelFreeSpace->setText( KIO::convertSizeFromKiB(avail) ); ++ if( avail < m_neededSize/1024 ) ++#endif + pal.setColor( QPalette::Text, Qt::red ); + else + pal.setColor( QPalette::Text, palette().color( QPalette::Text ) );