joachim99@8: /*************************************************************************** joachim99@8: kdiff3.h - description joachim99@8: ------------------- joachim99@8: begin : Don Jul 11 12:31:29 CEST 2002 joachim99@8: copyright : (C) 2002 by Joachim Eibl joachim99@8: email : joachim.eibl@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@8: #ifdef HAVE_CONFIG_H joachim99@8: #include joachim99@8: #endif joachim99@8: joachim99@8: // include files for Qt joachim99@8: #include joachim99@8: #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@8: #include joachim99@8: joachim99@8: joachim99@8: // forward declaration of the KDiff3 classes joachim99@8: class OptionDialog; joachim99@8: class FindDialog; joachim99@8: joachim99@8: class QScrollBar; joachim99@8: class QComboBox; joachim99@8: class QLineEdit; joachim99@8: class QCheckBox; 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@8: class KDiff3App : public QSplitter joachim99@8: { joachim99@8: Q_OBJECT joachim99@8: joachim99@8: public: joachim99@8: /** construtor 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@8: void saveOptions( KConfig* ); joachim99@8: joachim99@8: /** read general Options again and initialize all variables like the recent file list */ joachim99@8: void readOptions( KConfig* ); joachim99@8: joachim99@8: // Finish initialisation (virtual, so that it can be called from the shell too.) joachim99@8: virtual void completeInit(); 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@8: 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@8: QString an1, QString an2, QString an3 ); joachim99@8: 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@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@8: KAction* fileQuit; joachim99@8: KAction* fileReload; joachim99@8: KAction* editCut; joachim99@8: KAction* editCopy; joachim99@8: KAction* editPaste; 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@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@8: KAction *autoSolve; joachim99@8: KAction *unsolve; 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@8: joachim99@8: QPopupMenu* m_pMergeEditorPopupMenu; joachim99@8: joachim99@8: QSplitter* m_pMainSplitter; joachim99@8: QFrame* m_pMainWidget; joachim99@8: QFrame* m_pMergeWindowFrame; joachim99@8: QScrollBar* 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@8: QSplitter* m_pDiffWindowSplitter; joachim99@8: joachim99@8: MergeResultWindow* m_pMergeResultWindow; 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: SourceData m_sdlm1; // SourceData for Line Matching only. joachim99@8: SourceData m_sdlm2; joachim99@8: SourceData m_sdlm3; 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@8: Diff3LineList m_diff3LineList; joachim99@8: Diff3LineVector m_diff3LineVector; joachim99@8: joachim99@8: int m_neededLines; joachim99@8: int m_maxWidth; joachim99@8: int m_DTWHeight; joachim99@8: bool m_bOutputModified; joachim99@8: bool m_bTimerBlock; // Synchronisation joachim99@8: joachim99@8: OptionDialog* m_pOptionDialog; joachim99@8: FindDialog* m_pFindDialog; joachim99@8: joachim99@8: void init( bool bAuto=false ); joachim99@8: joachim99@8: virtual bool eventFilter( QObject* o, QEvent* e ); joachim99@8: virtual void resizeEvent(QResizeEvent*); joachim99@8: joachim99@8: bool improveFilenames(); joachim99@8: joachim99@8: bool runDiff( LineData* p1, int size1, 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@8: bool m_bAuto; joachim99@8: joachim99@51: public slots: joachim99@8: void resizeDiffTextWindow(int newWidth, int newHeight); joachim99@8: void resizeMergeResultWindow(); 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@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@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@8: void slotOutputModified(); 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@8: void slotShowWindowAToggled(); joachim99@8: void slotShowWindowBToggled(); joachim99@8: void slotShowWindowCToggled(); joachim99@8: void slotWinFocusNext(); joachim99@8: void slotWinFocusPrev(); joachim99@8: void slotWinToggleSplitterOrientation(); joachim99@8: }; joachim99@8: joachim99@8: joachim99@8: class OpenDialog : public QDialog joachim99@8: { joachim99@8: Q_OBJECT joachim99@8: public: joachim99@8: OpenDialog( joachim99@8: QWidget* pParent, const QString& n1, const QString& n2, const QString& n3, joachim99@8: bool bMerge, const QString& outputName, const char* slotConfigure, OptionDialog* pOptions ); joachim99@8: joachim99@8: QComboBox* m_lineA; joachim99@8: QComboBox* m_lineB; joachim99@8: QComboBox* m_lineC; joachim99@8: QComboBox* m_lineOut; joachim99@8: joachim99@8: QCheckBox* m_pMerge; joachim99@8: virtual void accept(); joachim99@8: private: joachim99@8: OptionDialog* m_pOptions; joachim99@8: void selectURL( QComboBox* pLine, bool bDir, int i, bool bSave ); joachim99@8: private slots: joachim99@8: void selectFileA(); joachim99@8: void selectFileB(); joachim99@8: void selectFileC(); joachim99@8: void selectDirA(); joachim99@8: void selectDirB(); joachim99@8: void selectDirC(); joachim99@8: void selectOutputName(); joachim99@8: void selectOutputDir(); joachim99@8: void internalSlot(int); joachim99@8: signals: joachim99@8: void internalSignal(bool); joachim99@8: }; joachim99@8: joachim99@8: class FindDialog : public QDialog joachim99@8: { joachim99@8: Q_OBJECT joachim99@8: public: joachim99@8: FindDialog(QWidget* pParent); joachim99@8: joachim99@8: signals: joachim99@8: void findNext(); joachim99@8: joachim99@8: public: joachim99@8: QLineEdit* m_pSearchString; joachim99@8: QCheckBox* m_pSearchInA; joachim99@8: QCheckBox* m_pSearchInB; joachim99@8: QCheckBox* m_pSearchInC; joachim99@8: QCheckBox* m_pSearchInOutput; joachim99@8: QCheckBox* m_pCaseSensitive; joachim99@8: joachim99@8: int currentLine; joachim99@8: int currentPos; joachim99@8: int currentWindow; joachim99@8: }; joachim99@8: #endif // KDIFF3_H