joachim99@8: /*************************************************************************** joachim99@8: kdiff3.h - description joachim99@8: ------------------- joachim99@8: begin : Don Jul 11 12:31:29 CEST 2002 joachim99@77: copyright : (C) 2002-2007 by Joachim Eibl joachim99@69: email : joachim.eibl at gmx.de joachim99@8: ***************************************************************************/ joachim99@8: joachim99@8: /*************************************************************************** joachim99@8: * * joachim99@8: * This program is free software; you can redistribute it and/or modify * joachim99@8: * it under the terms of the GNU General Public License as published by * joachim99@8: * the Free Software Foundation; either version 2 of the License, or * joachim99@8: * (at your option) any later version. * joachim99@8: * * joachim99@8: ***************************************************************************/ joachim99@8: joachim99@8: #ifndef KDIFF3_H joachim99@8: #define KDIFF3_H joachim99@8: joachim99@8: #include "diff.h" joachim99@8: joachim99@80: #include joachim99@8: joachim99@8: // include files for Qt joachim99@75: #include joachim99@75: #include joachim99@8: joachim99@8: // include files for KDE joachim99@8: #include joachim99@8: #include joachim99@8: #include joachim99@8: #include joachim99@8: #include joachim99@80: #include joachim99@8: joachim99@8: joachim99@8: // forward declaration of the KDiff3 classes joachim99@8: class OptionDialog; joachim99@8: class FindDialog; joachim99@69: class ManualDiffHelpDialog; joachim99@69: class DiffTextWindow; joachim99@69: class DiffTextWindowFrame; joachim99@69: class MergeResultWindow; joachim99@75: class WindowTitleWidget; joachim99@69: class Overview; joachim99@8: joachim99@8: class QScrollBar; joachim99@8: class QSplitter; joachim99@8: joachim99@8: joachim99@8: class KDiff3Part; joachim99@8: class DirectoryMergeWindow; joachim99@8: class DirectoryMergeInfo; joachim99@8: joachim99@8: joachim99@68: class ReversibleScrollBar : public QScrollBar joachim99@68: { joachim99@68: Q_OBJECT joachim99@68: bool* m_pbRightToLeftLanguage; joachim99@68: int m_realVal; joachim99@68: public: joachim99@75: ReversibleScrollBar( Qt::Orientation o, bool* pbRightToLeftLanguage ) joachim99@75: : QScrollBar( o ) joachim99@68: { joachim99@68: m_pbRightToLeftLanguage=pbRightToLeftLanguage; joachim99@68: m_realVal=0; joachim99@68: connect( this, SIGNAL(valueChanged(int)), this, SLOT(slotValueChanged(int))); joachim99@68: } joachim99@68: void setAgain(){ setValue(m_realVal); } joachim99@68: public slots: joachim99@68: void slotValueChanged(int i) joachim99@68: { joachim99@68: m_realVal = i; joachim99@68: if(m_pbRightToLeftLanguage && *m_pbRightToLeftLanguage) joachim99@75: m_realVal = maximum()-(i-minimum()); joachim99@68: emit valueChanged2(m_realVal); joachim99@68: } joachim99@68: void setValue(int i) joachim99@68: { joachim99@68: if(m_pbRightToLeftLanguage && *m_pbRightToLeftLanguage) joachim99@75: QScrollBar::setValue( maximum()-(i-minimum()) ); joachim99@68: else joachim99@68: QScrollBar::setValue( i ); joachim99@68: } joachim99@68: signals: joachim99@68: void valueChanged2(int); joachim99@68: }; joachim99@68: joachim99@8: class KDiff3App : public QSplitter joachim99@8: { joachim99@8: Q_OBJECT joachim99@8: joachim99@8: public: joachim99@69: /** constructor of KDiff3App, calls all init functions to create the application. joachim99@8: */ joachim99@8: KDiff3App( QWidget* parent, const char* name, KDiff3Part* pKDiff3Part ); joachim99@8: ~KDiff3App(); joachim99@8: joachim99@8: bool isPart(); joachim99@8: joachim99@8: /** initializes the KActions of the application */ joachim99@8: void initActions( KActionCollection* ); joachim99@8: joachim99@8: /** save general Options like all bar positions and status as well as the geometry joachim99@8: and the recent file list to the configuration file */ joachim99@80: void saveOptions( KSharedConfigPtr ); joachim99@8: joachim99@8: /** read general Options again and initialize all variables like the recent file list */ joachim99@80: void readOptions( KSharedConfigPtr ); joachim99@8: joachim99@8: // Finish initialisation (virtual, so that it can be called from the shell too.) joachim99@69: virtual void completeInit(const QString& fn1="", const QString& fn2="", const QString& fn3=""); joachim99@8: joachim99@8: /** queryClose is called by KMainWindow on each closeEvent of a window. Against the joachim99@8: * default implementation (only returns true), this calles saveModified() on the document object to ask if the document shall joachim99@8: * be saved if Modified; on cancel the closeEvent is rejected. joachim99@8: * @see KMainWindow#queryClose joachim99@8: * @see KMainWindow#closeEvent joachim99@8: */ joachim99@8: virtual bool queryClose(); joachim99@69: virtual bool isFileSaved(); joachim99@80: virtual bool isDirComparison(); joachim99@8: joachim99@69: signals: joachim99@69: void createNewInstance( const QString& fn1, const QString& fn2, const QString& fn3 ); joachim99@8: protected: joachim99@8: void initDirectoryMergeActions(); joachim99@8: /** sets up the statusbar for the main window by initialzing a statuslabel. */ joachim99@8: void initStatusBar(); joachim99@8: joachim99@8: /** creates the centerwidget of the KMainWindow instance and sets it as the view */ joachim99@8: void initView(); joachim99@8: joachim99@8: public slots: joachim99@8: joachim99@8: /** open a file and load it into the document*/ joachim99@8: void slotFileOpen(); joachim99@8: void slotFileOpen2( QString fn1, QString fn2, QString fn3, QString ofn, joachim99@66: QString an1, QString an2, QString an3, TotalDiffStatus* pTotalDiffStatus ); joachim99@8: joachim99@69: void slotFileNameChanged(const QString& fileName, int winIdx); joachim99@69: joachim99@8: /** save a document */ joachim99@8: void slotFileSave(); joachim99@8: /** save a document by a new filename*/ joachim99@8: void slotFileSaveAs(); joachim99@8: joachim99@69: void slotFilePrint(); joachim99@69: joachim99@8: /** closes all open windows by calling close() on each memberList item until the list is empty, then quits the application. joachim99@8: * If queryClose() returns false because the user canceled the saveModified() dialog, the closing breaks. joachim99@8: */ joachim99@8: void slotFileQuit(); joachim99@8: /** put the marked text/object into the clipboard and remove joachim99@8: * it from the document joachim99@8: */ joachim99@8: void slotEditCut(); joachim99@8: /** put the marked text/object into the clipboard joachim99@8: */ joachim99@8: void slotEditCopy(); joachim99@8: /** paste the clipboard into the document joachim99@8: */ joachim99@8: void slotEditPaste(); joachim99@8: /** toggles the toolbar joachim99@8: */ joachim99@8: void slotViewToolBar(); joachim99@8: /** toggles the statusbar joachim99@8: */ joachim99@8: void slotViewStatusBar(); joachim99@8: /** changes the statusbar contents for the standard label permanently, used to indicate current actions. joachim99@8: * @param text the text that is displayed in the statusbar joachim99@8: */ joachim99@8: void slotStatusMsg(const QString &text); joachim99@8: joachim99@8: private: joachim99@8: /** the configuration object of the application */ joachim99@8: //KConfig *config; joachim99@8: joachim99@8: // KAction pointers to enable/disable actions joachim99@8: KAction* fileOpen; joachim99@8: KAction* fileSave; joachim99@8: KAction* fileSaveAs; joachim99@69: KAction* filePrint; joachim99@8: KAction* fileQuit; joachim99@8: KAction* fileReload; joachim99@8: KAction* editCut; joachim99@8: KAction* editCopy; joachim99@8: KAction* editPaste; joachim99@69: KAction* editSelectAll; joachim99@8: KToggleAction* viewToolBar; joachim99@8: KToggleAction* viewStatusBar; joachim99@8: joachim99@8: //////////////////////////////////////////////////////////////////////// joachim99@8: // Special KDiff3 specific stuff starts here joachim99@8: KAction *editFind; joachim99@8: KAction *editFindNext; joachim99@8: joachim99@8: KAction *goCurrent; joachim99@8: KAction *goTop; joachim99@8: KAction *goBottom; joachim99@8: KAction *goPrevUnsolvedConflict; joachim99@8: KAction *goNextUnsolvedConflict; joachim99@8: KAction *goPrevConflict; joachim99@8: KAction *goNextConflict; joachim99@8: KAction *goPrevDelta; joachim99@8: KAction *goNextDelta; joachim99@8: KToggleAction *chooseA; joachim99@8: KToggleAction *chooseB; joachim99@8: KToggleAction *chooseC; joachim99@8: KToggleAction *autoAdvance; joachim99@66: KToggleAction *wordWrap; joachim99@69: KAction* splitDiff; joachim99@69: KAction* joinDiffs; joachim99@69: KAction* addManualDiffHelp; joachim99@69: KAction* clearManualDiffHelpList; joachim99@51: KToggleAction *showWhiteSpaceCharacters; joachim99@8: KToggleAction *showWhiteSpace; joachim99@8: KToggleAction *showLineNumbers; joachim99@51: KAction* chooseAEverywhere; joachim99@51: KAction* chooseBEverywhere; joachim99@51: KAction* chooseCEverywhere; joachim99@51: KAction* chooseAForUnsolvedConflicts; joachim99@51: KAction* chooseBForUnsolvedConflicts; joachim99@51: KAction* chooseCForUnsolvedConflicts; joachim99@51: KAction* chooseAForUnsolvedWhiteSpaceConflicts; joachim99@51: KAction* chooseBForUnsolvedWhiteSpaceConflicts; joachim99@51: KAction* chooseCForUnsolvedWhiteSpaceConflicts; joachim99@69: KAction* autoSolve; joachim99@69: KAction* unsolve; joachim99@69: KAction* mergeHistory; joachim99@69: KAction* mergeRegExp; joachim99@8: KToggleAction *showWindowA; joachim99@8: KToggleAction *showWindowB; joachim99@8: KToggleAction *showWindowC; joachim99@8: KAction *winFocusNext; joachim99@8: KAction *winFocusPrev; joachim99@8: KAction* winToggleSplitOrientation; joachim99@51: KToggleAction *dirShowBoth; joachim99@51: KAction *dirViewToggle; joachim99@66: KToggleAction *overviewModeNormal; joachim99@66: KToggleAction *overviewModeAB; joachim99@66: KToggleAction *overviewModeAC; joachim99@66: KToggleAction *overviewModeBC; joachim99@66: joachim99@8: joachim99@75: QMenu* m_pMergeEditorPopupMenu; joachim99@8: joachim99@8: QSplitter* m_pMainSplitter; joachim99@69: QWidget* m_pMainWidget; joachim99@69: QWidget* m_pMergeWindowFrame; joachim99@68: ReversibleScrollBar* m_pHScrollBar; joachim99@8: QScrollBar* m_pDiffVScrollBar; joachim99@8: QScrollBar* m_pMergeVScrollBar; joachim99@8: joachim99@8: DiffTextWindow* m_pDiffTextWindow1; joachim99@8: DiffTextWindow* m_pDiffTextWindow2; joachim99@8: DiffTextWindow* m_pDiffTextWindow3; joachim99@69: DiffTextWindowFrame* m_pDiffTextWindowFrame1; joachim99@69: DiffTextWindowFrame* m_pDiffTextWindowFrame2; joachim99@69: DiffTextWindowFrame* m_pDiffTextWindowFrame3; joachim99@8: QSplitter* m_pDiffWindowSplitter; joachim99@8: joachim99@8: MergeResultWindow* m_pMergeResultWindow; joachim99@75: WindowTitleWidget* m_pMergeResultWindowTitle; joachim99@8: bool m_bTripleDiff; joachim99@8: joachim99@8: QSplitter* m_pDirectoryMergeSplitter; joachim99@8: DirectoryMergeWindow* m_pDirectoryMergeWindow; joachim99@8: DirectoryMergeInfo* m_pDirectoryMergeInfo; joachim99@8: bool m_bDirCompare; joachim99@8: joachim99@8: Overview* m_pOverview; joachim99@8: joachim99@8: QWidget* m_pCornerWidget; joachim99@51: joachim99@8: TotalDiffStatus m_totalDiffStatus; joachim99@8: joachim99@8: SourceData m_sd1; joachim99@8: SourceData m_sd2; joachim99@8: SourceData m_sd3; joachim99@8: joachim99@8: QString m_outputFilename; joachim99@8: bool m_bDefaultFilename; joachim99@8: joachim99@8: DiffList m_diffList12; joachim99@8: DiffList m_diffList23; joachim99@8: DiffList m_diffList13; joachim99@8: joachim99@69: DiffBufferInfo m_diffBufferInfo; joachim99@8: Diff3LineList m_diff3LineList; joachim99@8: Diff3LineVector m_diff3LineVector; joachim99@69: //ManualDiffHelpDialog* m_pManualDiffHelpDialog; joachim99@69: ManualDiffHelpList m_manualDiffHelpList; joachim99@8: joachim99@8: int m_neededLines; joachim99@8: int m_DTWHeight; joachim99@8: bool m_bOutputModified; joachim99@69: bool m_bFileSaved; joachim99@8: bool m_bTimerBlock; // Synchronisation joachim99@8: joachim99@8: OptionDialog* m_pOptionDialog; joachim99@8: FindDialog* m_pFindDialog; joachim99@8: joachim99@69: void init( bool bAuto=false, TotalDiffStatus* pTotalDiffStatus=0, bool bLoadFiles=true ); joachim99@8: joachim99@80: joachim99@8: virtual bool eventFilter( QObject* o, QEvent* e ); joachim99@8: virtual void resizeEvent(QResizeEvent*); joachim99@8: joachim99@69: bool improveFilenames(bool bCreateNewInstance); joachim99@8: joachim99@69: bool runDiff( const LineData* p1, int size1, const LineData* p2, int size2, DiffList& diffList, int winIdx1, int winIdx2 ); joachim99@58: bool runDiff( const LineData* p1, int size1, const LineData* p2, int size2, DiffList& diffList ); joachim99@8: bool canContinue(); joachim99@8: joachim99@53: void choose(int choice); joachim99@8: joachim99@8: KActionCollection* actionCollection(); joachim99@8: KStatusBar* statusBar(); joachim99@8: KToolBar* toolBar(const char*); joachim99@8: KDiff3Part* m_pKDiff3Part; joachim99@8: KParts::MainWindow* m_pKDiff3Shell; joachim99@77: bool m_bAutoFlag; joachim99@77: bool m_bAutoMode; joachim99@69: void recalcWordWrap(int nofVisibleColumns=-1); joachim99@92: void setHScrollBarRange(); joachim99@8: joachim99@51: public slots: joachim99@8: void resizeDiffTextWindow(int newWidth, int newHeight); joachim99@8: void resizeMergeResultWindow(); joachim99@69: void slotRecalcWordWrap(); joachim99@8: joachim99@8: void showPopupMenu( const QPoint& point ); joachim99@8: joachim99@8: void scrollDiffTextWindow( int deltaX, int deltaY ); joachim99@8: void scrollMergeResultWindow( int deltaX, int deltaY ); joachim99@8: void setDiff3Line( int line ); joachim99@8: void sourceMask( int srcMask, int enabledMask ); joachim99@8: joachim99@8: void slotDirShowBoth(); joachim99@8: void slotDirViewToggle(); joachim99@8: joachim99@8: void slotUpdateAvailabilities(); joachim99@69: void slotEditSelectAll(); joachim99@8: void slotEditFind(); joachim99@8: void slotEditFindNext(); joachim99@8: void slotGoCurrent(); joachim99@8: void slotGoTop(); joachim99@8: void slotGoBottom(); joachim99@8: void slotGoPrevUnsolvedConflict(); joachim99@8: void slotGoNextUnsolvedConflict(); joachim99@8: void slotGoPrevConflict(); joachim99@8: void slotGoNextConflict(); joachim99@8: void slotGoPrevDelta(); joachim99@8: void slotGoNextDelta(); joachim99@8: void slotChooseA(); joachim99@8: void slotChooseB(); joachim99@8: void slotChooseC(); joachim99@8: void slotAutoSolve(); joachim99@8: void slotUnsolve(); joachim99@69: void slotMergeHistory(); joachim99@69: void slotRegExpAutoMerge(); joachim99@8: void slotChooseAEverywhere(); joachim99@8: void slotChooseBEverywhere(); joachim99@8: void slotChooseCEverywhere(); joachim99@51: void slotChooseAForUnsolvedConflicts(); joachim99@51: void slotChooseBForUnsolvedConflicts(); joachim99@51: void slotChooseCForUnsolvedConflicts(); joachim99@51: void slotChooseAForUnsolvedWhiteSpaceConflicts(); joachim99@51: void slotChooseBForUnsolvedWhiteSpaceConflicts(); joachim99@51: void slotChooseCForUnsolvedWhiteSpaceConflicts(); joachim99@8: void slotConfigure(); joachim99@8: void slotConfigureKeys(); joachim99@8: void slotRefresh(); joachim99@8: void slotSelectionEnd(); joachim99@8: void slotSelectionStart(); joachim99@8: void slotClipboardChanged(); joachim99@75: void slotOutputModified(bool); joachim99@8: void slotAfterFirstPaint(); joachim99@8: void slotMergeCurrentFile(); joachim99@8: void slotReload(); joachim99@8: void slotCheckIfCanContinue( bool* pbContinue ); joachim99@8: void slotShowWhiteSpaceToggled(); joachim99@8: void slotShowLineNumbersToggled(); joachim99@8: void slotAutoAdvanceToggled(); joachim99@66: void slotWordWrapToggled(); joachim99@8: void slotShowWindowAToggled(); joachim99@8: void slotShowWindowBToggled(); joachim99@8: void slotShowWindowCToggled(); joachim99@8: void slotWinFocusNext(); joachim99@8: void slotWinFocusPrev(); joachim99@8: void slotWinToggleSplitterOrientation(); joachim99@66: void slotOverviewNormal(); joachim99@66: void slotOverviewAB(); joachim99@66: void slotOverviewAC(); joachim99@66: void slotOverviewBC(); joachim99@69: void slotSplitDiff(); joachim99@69: void slotJoinDiffs(); joachim99@69: void slotAddManualDiffHelp(); joachim99@69: void slotClearManualDiffHelpList(); joachim99@69: joachim99@69: void slotNoRelevantChangesDetected(); joachim99@8: }; joachim99@8: joachim99@8: #endif // KDIFF3_H