Commit 41602c42 authored by Joachim Eibl's avatar Joachim Eibl

New files.


git-svn-id: https://kdiff3.svn.sourceforge.net/svnroot/kdiff3/trunk@85 c8aa9fed-2811-0410-8543-893ada326672
parent ee73893a
cmake_minimum_required(VERSION 2.6)
project(kdiff3)
find_package(KDE4 REQUIRED)
include (MacroLibrary)
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
MACRO_OPTIONAL_FIND_PACKAGE(LibKonq)
MACRO_BOOL_TO_01(LIBKONQ_FOUND HAVE_LIBKONQ)
add_definitions(${QT_DEFINITIONS} ${KDE4_DEFINITIONS})
include_directories(
${KDE4_INCLUDE_DIR}
${QT_INCLUDES}
${CMAKE_CURRENT_BINARY_DIR}
)
link_directories(
${KDE4_LIB_DIR}
)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config-kdiff3.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kdiff3.h )
add_subdirectory(src-QT4)
add_subdirectory(po)
add_subdirectory(doc)
if(LIBKONQ_FOUND)
message(STATUS "")
message(STATUS "libkonq module found........... YES")
message(STATUS " => kdiff3plugin (KDiff3 contextmenu plugin for Konqueror) will be built.")
message(STATUS "")
add_subdirectory(kdiff3plugin-QT4)
else(LIBKONQ_FOUND)
message(STATUS "")
message(STATUS "libkonq module found........... NO")
message(STATUS " => kdiff3plugin (KDiff3 contextmenu plugin for Konqueror) will not be built.)")
message(STATUS "")
endif(LIBKONQ_FOUND)
# - Try to find konqueror library
# Once done this will define
#
# LIBKONQ_FOUND - system has libkonq library
# LIBKONQ_INCLUDE_DIR - the LIBKONQ include directory
# LIBKONQ_LIBRARY - the libkonq library
#
# Original file: FindMarbleWidget.cmake (found in digikam-0.10.0-beta2)
# copyright 2008 by Patrick Spendrin <ps_ml@gmx.de>
# use this file as you like
#
# Modifications to find libkonq by Joachim Eibl 2008
if(LIBKONQ_INCLUDE_DIR AND LIBKONQ_LIBRARY)
# Already in cache
set(LIBKONQ_FOUND TRUE)
else(LIBKONQ_INCLUDE_DIR AND LIBKONQ_LIBRARY)
find_path(LIBKONQ_INCLUDE_DIR konq_popupmenuplugin.h )
find_library(LIBKONQ_LIBRARY konq)
if(LIBKONQ_INCLUDE_DIR AND LIBKONQ_LIBRARY)
set(LIBKONQ_FOUND TRUE)
endif(LIBKONQ_INCLUDE_DIR AND LIBKONQ_LIBRARY)
if(LIBKONQ_FOUND)
if (NOT LIBKONQ_FIND_QUIETLY)
message(STATUS "Found libkonq: ${LIBKONQ_LIBRARY}")
endif (NOT LIBKONQ_FIND_QUIETLY)
else(LIBKONQ_FOUND)
if(LIBKONQ_FIND_REQUIRED)
message(FATAL_ERROR "Could NOT find KDE4 libkonq library")
endif(LIBKONQ_FIND_REQUIRED)
endif(LIBKONQ_FOUND)
mark_as_advanced(LIBKONQ_INCLUDE_DIR LIBKONQ_LIBRARY)
endif(LIBKONQ_INCLUDE_DIR AND LIBKONQ_LIBRARY)
add_subdirectory(en)
add_subdirectory(da)
add_subdirectory(de)
add_subdirectory(es)
add_subdirectory(et)
add_subdirectory(fr)
add_subdirectory(it)
add_subdirectory(nl)
add_subdirectory(pt)
kde4_create_handbook(index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/da SUBDIR kdiff3)
kde4_create_handbook(index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/de SUBDIR kdiff3)
kde4_create_handbook(index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/en SUBDIR kdiff3)
kde4_create_handbook(index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/es SUBDIR kdiff3)
kde4_create_handbook(index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/et SUBDIR kdiff3)
kde4_create_handbook(index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/fr SUBDIR kdiff3)
kde4_create_handbook(index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/it SUBDIR kdiff3)
kde4_create_handbook(index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/nl SUBDIR kdiff3)
kde4_create_handbook(index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/pt SUBDIR kdiff3)
kde4_create_handbook(index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/sv SUBDIR kdiff3)
########### kdiff3 plugin ###############
find_package(LibKonq REQUIRED)
set(kdiff3plugin_SRCS
kdiff3plugin.cpp )
kde4_add_plugin(kdiff3plugin WITH_PREFIX ${kdiff3plugin_SRCS})
target_link_libraries(kdiff3plugin ${KDE4_KDECORE_LIBS} ${KDE4_KPARTS_LIBS} konq )
#${KDE4_KDECORE_LIBRARY} ${KDE4_KDEUI_LIBRARY} ${KDE4_KIO_LIBRARY} QtGui QtCore konq )
install(TARGETS kdiff3plugin DESTINATION ${PLUGIN_INSTALL_DIR} )
########## install files ###############
install( FILES kdiff3_plugin.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
#! /usr/bin/env bash
$XGETTEXT -kaliasLocal `find -name \*.cpp -o -name \*.h` -o $podir/kdiff3plugin.pot
[Desktop Entry]
Encoding=UTF-8
Type=Service
Name=Compare/Merge Files/Directories
Name[bg]=Сравняване/Сливане на файлове/директории
Name[el]=Σύγκριση/Συγχώνευση αρχείων/καταλόγων
Name[es]=Comparar/mezclar archivos/carpetas
Name[et]=Failide/kataloogide võrdlemine/liitmine
Name[fr]=Comparer / Fusionner les fichiers / dossiers
Name[ga]=Comhaid/Comhadlanna a Chur i gComparáid/a Chumasc
Name[gl]=Comparar e fusionar ficheiros e cartafoles
Name[hi]=तुलना करें/मिलाएं फ़ाइलें/डिरेक्ट्रीज़
Name[ja]=ファイルやディレクトリを比較/マージ
Name[km]=ប្រៀបធៀប/បញ្ចូល​ឯកសារ​ចូល​គ្នា/ថត
Name[ko]=파일과 디렉터리를 비교하거나 병합
Name[nds]=Verglieken/Tosamenföhren Dateien Ornern
Name[nl]=Bestanden/mappen vergelijken/samenvoegen
Name[nn]=Samanlikn/flett filer og mapper
Name[pt]=Comparar/Juntar os Ficheiros/Pastas
Name[pt_BR]=Compara/Mescla Arquivos/Diretórios
Name[ro]=Compară/unește fișiere/directoare
Name[sv]=Jämför, sammanfoga filer, kataloger
Name[tr]=Dosyaları/Klasörleri Karşılaştır/Birleştir
Name[uk]=Порівняння/З’єднання Файлів/Тек
Name[x-test]=xxCompare/Merge Files/Directoriesxx
Name[zh_CN]=比较/合并 文件/目录
Name[zh_TW]=比較/合併檔案與目錄
X-KDE-Library=libkdiff3plugin
ServiceTypes=KonqPopupMenu/Plugin,application/octet-stream,inode/directory
/* This file is part of the KDiff3 project
Copyright (C) 2008 Joachim Eibl <joachim dot eibl at gmx dot de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; version 2
of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#include "kdiff3plugin.h"
#include <kapplication.h>
#include <kstandarddirs.h>
#include <kaction.h>
#include <kactionmenu.h>
#include <klocale.h>
#include <kgenericfactory.h>
#include <kurl.h>
#include <kconfig.h>
#include <kconfiggroup.h>
#include <konq_popupmenuinformation.h>
#include <kmessagebox.h>
#include <kprocess.h>
//#include <iostream>
static QStringList* s_pHistory=0;
class KDiff3PluginFactory : public KGenericFactory < KDiff3Plugin, KonqPopupMenu >
{
KConfig* m_pConfig;
KConfigGroup* m_pConfigGroup;
public:
KDiff3PluginFactory( const char* instanceName = 0 )
: KGenericFactory< KDiff3Plugin, KonqPopupMenu >( instanceName )
{
m_pConfig = 0;
if (s_pHistory==0)
{
//std::cout << "New History: " << instanceName << std::endl;
s_pHistory = new QStringList;
m_pConfig = new KConfig( "kdiff3pluginrc", KConfig::SimpleConfig );
m_pConfigGroup = new KConfigGroup( m_pConfig, "KDiff3Plugin" );
*s_pHistory = m_pConfigGroup->readEntry("HistoryStack", QStringList() );
}
}
~KDiff3PluginFactory()
{
//std::cout << "Delete History" << std::endl;
if ( s_pHistory && m_pConfigGroup )
m_pConfigGroup->writeEntry("HistoryStack",*s_pHistory);
delete s_pHistory;
delete m_pConfigGroup;
delete m_pConfig;
s_pHistory = 0;
m_pConfig = 0;
}
};
K_EXPORT_COMPONENT_FACTORY (libkdiff3plugin, KDiff3PluginFactory ("kdiff3plugin"))
KDiff3Plugin::KDiff3Plugin( KonqPopupMenu* pPopupMenu, const QStringList & /* list */ )
:KonqPopupMenuPlugin(pPopupMenu)
{
KGlobal::locale()->insertCatalog("kdiff3_plugin");
m_pPopupMenu = pPopupMenu;
m_pParentWidget = pPopupMenu->parentWidget();
}
void KDiff3Plugin::setup( KActionCollection* actionCollection, const KonqPopupMenuInformation& popupMenuInfo, QMenu* pMenu )
{
if (KStandardDirs::findExe("kdiff3").isNull ())
return;
// remember currently selected files (copy to a QStringList)
KFileItemList itemList = popupMenuInfo.items();
foreach ( const KFileItem& item, itemList )
{
//m_urlList.append( item.url() );
m_list.append( item.url().url() );
}
/* Menu structure:
KDiff3 -> (1 File selected): Save 'selection' for later comparison (push onto history stack)
Compare 'selection' with first file on history stack.
Compare 'selection' with -> choice from history stack
Merge 'selection' with first file on history stack.
Merge 'selection' with last two files on history stack.
(2 Files selected): Compare 's1' with 's2'
Merge 's1' with 's2'
(3 Files selected): Compare 's1', 's2' and 's3'
*/
KActionMenu* pActionMenu = new KActionMenu (i18n ("KDiff3"), actionCollection );
KAction* pAction = 0;
QString s;
if(m_list.count() == 1)
{
int historyCount = s_pHistory ? s_pHistory->count() : 0;
s = i18n("Compare with %1", (historyCount>0 ? s_pHistory->front() : QString()) );
pAction = new KAction ( s, actionCollection );
connect( pAction, SIGNAL(triggered(bool)), this, SLOT(slotCompareWith()));
pAction->setEnabled( m_list.count()>0 && historyCount>0 );
pActionMenu->addAction(pAction);
s = i18n("Merge with %1", historyCount>0 ? s_pHistory->front() : QString() );
pAction = new KAction( s, actionCollection);
connect( pAction, SIGNAL(triggered(bool)), this, SLOT(slotMergeWith()));
pAction->setEnabled( m_list.count()>0 && historyCount>0 );
pActionMenu->addAction (pAction);
s = i18n("Save '%1' for later", ( m_list.front() ) );
pAction = new KAction ( s, actionCollection);
connect( pAction, SIGNAL(triggered(bool)), this, SLOT(slotSaveForLater()));
pAction->setEnabled( m_list.count()>0 );
pActionMenu->addAction(pAction);
pAction = new KAction (i18n("3-way merge with base"), actionCollection);
connect( pAction, SIGNAL(triggered(bool)), this, SLOT(slotMergeThreeWay()));
pAction->setEnabled( m_list.count()>0 && historyCount>=2 );
pActionMenu->addAction (pAction);
if ( s_pHistory && !s_pHistory->empty() )
{
KActionMenu* pHistoryMenu = new KActionMenu( i18n("Compare with ..."), actionCollection );
pHistoryMenu->setEnabled( m_list.count()>0 && historyCount>0 );
pActionMenu->addAction(pHistoryMenu);
for (QStringList::iterator i = s_pHistory->begin(); i!=s_pHistory->end(); ++i)
{
pAction = new KAction( *i, actionCollection);
connect( pAction, SIGNAL(triggered(bool)), this, SLOT(slotCompareWithHistoryItem()));
pHistoryMenu->addAction (pAction);
}
pAction = new KAction (i18n("Clear list"), actionCollection);
connect( pAction, SIGNAL(triggered(bool)), this, SLOT(slotClearList()));
pActionMenu->addAction (pAction);
pAction->setEnabled( historyCount>0 );
}
}
else if(m_list.count() == 2)
{
pAction = new KAction (i18n("Compare"), actionCollection);
connect( pAction, SIGNAL(triggered(bool)), this, SLOT(slotCompareTwoFiles()));
pActionMenu->addAction (pAction);
}
else if ( m_list.count() == 3 )
{
pAction = new KAction (i18n("3 way comparison"), actionCollection);
connect( pAction, SIGNAL(triggered(bool)), this, SLOT(slotCompareThreeFiles()));
pActionMenu->addAction (pAction);
}
pAction = new KAction (i18n("About KDiff3 menu plugin ..."), actionCollection);
connect( pAction, SIGNAL(triggered(bool)), this, SLOT(slotAbout()));
pActionMenu->addAction (pAction);
pMenu->addSeparator();
pMenu->addAction( pActionMenu );
pMenu->addSeparator();
}
KDiff3Plugin::~KDiff3Plugin ()
{
}
void KDiff3Plugin::slotCompareWith()
{
if ( m_list.count() > 0 && s_pHistory && ! s_pHistory->empty() )
{
QStringList args;
args << s_pHistory->front();
args << m_list.front();
KProcess::execute("kdiff3", args);
}
}
void KDiff3Plugin::slotCompareWithHistoryItem()
{
const KAction* pAction = dynamic_cast<const KAction*>( sender() );
if ( m_list.count() > 0 && pAction )
{
QStringList args;
args << pAction->text();
args << m_list.front();
KProcess::execute ("kdiff3", args);
}
}
void KDiff3Plugin::slotCompareTwoFiles()
{
if ( m_list.count() == 2 )
{
QStringList args;
args << m_list.front();
args << m_list.back();
KProcess::execute ("kdiff3", args);
}
}
void KDiff3Plugin::slotCompareThreeFiles()
{
if ( m_list.count() == 3 )
{
QStringList args;
args << m_list[0];
args << m_list[1];
args << m_list[2];
KProcess::execute ("kdiff3", args);
}
}
void KDiff3Plugin::slotMergeWith()
{
if ( m_list.count() > 0 && s_pHistory && ! s_pHistory->empty() )
{
QStringList args;
args << s_pHistory->front();
args << m_list.front();
args << ( "-o" + m_list.front() );
KProcess::execute ("kdiff3", args);
}
}
void KDiff3Plugin::slotMergeThreeWay()
{
if ( m_list.count() > 0 && s_pHistory && s_pHistory->count()>=2 )
{
QStringList args;
args << (*s_pHistory)[1];
args << (*s_pHistory)[0];
args << m_list.front();
args << ("-o" + m_list.front());
KProcess::execute ("kdiff3", args);
}
}
void KDiff3Plugin::slotSaveForLater()
{
if ( !m_list.isEmpty() && s_pHistory )
{
while ( s_pHistory->count()>=10 )
s_pHistory->pop_back();
s_pHistory->push_front( m_list.front() );
}
}
void KDiff3Plugin::slotClearList()
{
if ( s_pHistory )
s_pHistory->clear();
}
void KDiff3Plugin::slotAbout()
{
QString s = i18n("KDiff3 Menu Plugin: Copyright (C) 2008 Joachim Eibl\n"
"KDiff3 homepage: http://kdiff3.sourceforge.net\n\n");
s += i18n("Using the contextmenu extension:\n"
"For simple comparison of two selected files choose \"Compare\".\n"
"If the other file is somewhere else \"Save\" the first file for later. "
"It will appear in the \"Compare With ...\" submenu. "
"Then use \"Compare With\" on second file.\n"
"For a 3-way merge first \"Save\" the base file, then the branch to merge and "
"choose \"3-way merge with base\" on the other branch which will be used as destination.\n"
"Same also applies to directory comparison and merge.");
KMessageBox::information(m_pParentWidget, s, tr("About KDiff3 Menu Plugin") );
}
[Desktop Entry]
Encoding=UTF-8
Type=Service
Name=Compare/Merge Files/Directories with KDiff3
Name[bg]=Сравняване/Сливане на файлове/директории с KDiff3
Name[el]=Σύγκριση/Συγχώνευση αρχείων/καταλόγων με το KDiff3
Name[es]=Comparar/mezclar archivos/carpetas con KDiff3
Name[et]=Failide/kataloogide võrdlemine/liitmine KDiff3-ga
Name[fr]=Comparer / Fusionner les fichiers / dossiers à l'aide de KDiff3
Name[ga]=Comhaid/Comhadlanna a Chur i gComparáid/a Chumasc le KDiff3
Name[gl]=Compara e fusionar ficheiros e cartafoles con KDiff3
Name[hi]=केडिफ़३ के साथ तुलना करें/मिलाएं फ़ाइलें/डिरेक्ट्रीज़
Name[ja]=KDiff3 でファイルやディレクトリを比較/マージ
Name[km]=ប្រៀបធៀប/បញ្ចូល​ឯកសារ​ចូល​គ្នា/ថត​ជាមួយ KDiff3
Name[ko]=KDiff3으로 파일과 디렉터리를 비교하거나 병합합니다
Name[nds]=Verglieken Tosamenföhren vun Dateien/Ornern mit KDiff3
Name[nl]=Bestanden/mappen vergelijken/samenvoegen met KDiff3
Name[nn]=Samanlikn/flett filer og mapper med KDiff3
Name[pt]=Comparar/Juntar os Ficheiros/Pastas com o KDiff3
Name[pt_BR]=Compara/Mescla Arquivos/Diretórios com KDiff3
Name[ro]=Compară/unește fișiere/directoare cu KDiff3
Name[sv]=Jämför, sammanfoga filer, kataloger med Kdiff3
Name[tr]=KDiff3 ile Dosyaları/Klasörleri Karşılaştır/Birleştir
Name[uk]=Порівнюйте або з’єднуйте файли або теки з KDiff3
Name[x-test]=xxCompare/Merge Files/Directories with KDiff3xx
Name[zh_CN]=使用 KDiff3 比较/合并 文件/目录
Name[zh_TW]=用 KDiff3 比較/合併檔案與目錄
Icon=kdiff3
#X-KDE-ParentApp=konqueror
#DocPath=konq-plugins/kdiff3plugin/index.html
NoDisplay=true
/* This file is part of the KDiff3 project
Copyright (C) 2008 Joachim Eibl <Joachim dot Eibl at gmx dot de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; version 2
of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#ifndef _KDIFF3PLUGIN_H_
#define _KDIFF3PLUGIN_H_
#include <konq_popupmenu.h>
#include <konq_popupmenuplugin.h>
#include <QStringList>
class QStringList;
class KDiff3Plugin : public KonqPopupMenuPlugin
{
Q_OBJECT
public:
KDiff3Plugin (KonqPopupMenu *, const QStringList & list);
virtual ~KDiff3Plugin();
// implement pure virtual method from KonqPopupMenuPlugin
virtual void setup( KActionCollection* actionCollection, const KonqPopupMenuInformation& popupMenuInfo, QMenu* menu );
private slots:
void slotCompareWith();
void slotCompareTwoFiles();
void slotCompareThreeFiles();
void slotMergeWith();
void slotMergeThreeWay();
void slotSaveForLater();
void slotClearList();
void slotCompareWithHistoryItem();
void slotAbout();
private:
QStringList m_list;
QWidget* m_pParentWidget;
KonqPopupMenu* m_pPopupMenu;
};
#endif
find_package(Gettext REQUIRED)
if (NOT GETTEXT_MSGMERGE_EXECUTABLE)
MESSAGE(FATAL_ERROR "Please install msgmerge binary")
endif (NOT GETTEXT_MSGMERGE_EXECUTABLE)
if (NOT GETTEXT_MSGFMT_EXECUTABLE)
MESSAGE(FATAL_ERROR "Please install msgmerge binary")
endif (NOT GETTEXT_MSGFMT_EXECUTABLE)
add_subdirectory(ar)
add_subdirectory(bg)
add_subdirectory(br)
add_subdirectory(cs)
add_subdirectory(cy)
add_subdirectory(da)
add_subdirectory(de)
add_subdirectory(el)
add_subdirectory(en_GB)
add_subdirectory(es)
add_subdirectory(et)
add_subdirectory(fr)
add_subdirectory(ga)
add_subdirectory(gl)
add_subdirectory(hi)
add_subdirectory(hu)
add_subdirectory(it)
add_subdirectory(ja)
add_subdirectory(ka)
add_subdirectory(lt)
add_subdirectory(nb)
add_subdirectory(nds)
add_subdirectory(nl)
add_subdirectory(pl)
add_subdirectory(pt)
add_subdirectory(pt_BR)
add_subdirectory(ro)
add_subdirectory(ru)
add_subdirectory(rw)
add_subdirectory(sv)
add_subdirectory(ta)
add_subdirectory(tg)
add_subdirectory(tr)
add_subdirectory(uk)
add_subdirectory(zh_CN)
file(GLOB _po_files *.po)
GETTEXT_PROCESS_PO_FILES(xx ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} )
file(GLOB _po_files *.po)
GETTEXT_PROCESS_PO_FILES(ar ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} )
This diff is collapsed.