root/src/apps/text_search/GrepWindow.h
/*
 * Copyright (c) 1998-2007 Matthijs Hollemans
 * All rights reserved. Distributed under the terms of the MIT License.
 */
#ifndef GREP_WINDOW_H
#define GREP_WINDOW_H

#include <Catalog.h>
#include <InterfaceKit.h>
#include <FilePanel.h>
#include <Locale.h>

#include "Model.h"
#include "GrepListView.h"

class BMessageRunner;
class ChangesIterator;
class Grepper;

class GrepWindow : public BWindow {
public:
                                                                GrepWindow(BMessage* message);
        virtual                                         ~GrepWindow();

        virtual void                            FrameResized(float width, float height);
        virtual void                            FrameMoved(BPoint origin);
        virtual void                            MenusBeginning();
        virtual void                            MenusEnded();
        virtual void                            MessageReceived(BMessage* message);
        virtual void                            Quit();

private:
                        void                            _InitRefsReceived(entry_ref* directory,
                                                                        BMessage* message);
                        void                            _SetWindowTitle();
                        void                            _CreateMenus();
                        void                            _UpdateMenus();
                        void                            _CreateViews();
                        void                            _LayoutViews();
                        void                            _TileIfMultipleWindows();

                        void                            _LoadPrefs();
                        void                            _SavePrefs();

                        void                            _StartNodeMonitoring();
                        void                            _StopNodeMonitoring();

                        void                            _OnStartCancel();
                        void                            _OnSearchFinished();
                        void                            _OnNodeMonitorEvent(BMessage* message);
                        void                            _OnNodeMonitorPulse();
                        void                            _OnReportFileName(BMessage* message);
                        void                            _OnReportResult(BMessage* message);
                        void                            _OnReportError(BMessage* message);
                        void                            _OnRecurseLinks();
                        void                            _OnRecurseDirs();
                        void                            _OnSkipDotDirs();
                        void                            _OnRegularExpression();
                        void                            _OnCaseSensitive();
                        void                            _OnTextOnly();
                        void                            _OnInvokeEditor();
                        void                            _OnCheckboxShowLines();
                        void                            _OnInvokeItem();
                        void                            _OnSearchText();
                        void                            _OnHistoryItem(BMessage* message);
                        void                            _OnTrimSelection();
                        void                            _OnCopyText();
                        void                            _OnSelectInTracker();
                        void                            _OnQuitNow();
                        void                            _OnFileDrop(BMessage* message);
                        void                            _OnRefsReceived(BMessage* message);
                        void                            _OnOpenPanel();
                        void                            _OnOpenPanelCancel();
                        void                            _OnSelectAll(BMessage* message);
                        void                            _OnNewWindow();
                        void                            _OnSetTargetToParent();
                        void                            _OnGlobFilterChange();

                        void                            _ModelChanged();
                        bool                            _OpenInEditor(const entry_ref& ref, int32 lineNum);
                        void                            _RemoveFolderListDuplicates(BList* folderList);
                        status_t                        _OpenFoldersInTracker(BList* folderList);
                        bool                            _AreAllFoldersOpenInTracker(BList* folderList);
                        status_t                        _SelectFilesInTracker(BList* folderList,
                                                                        BMessage* refsMessage);

private:
                        BTextControl*           fSearchText;
                        BTextControl*           fGlobText;
                        GrepListView*           fSearchResults;

                        BMenuBar*                       fMenuBar;
                        BMenu*                          fFileMenu;
                        BMenuItem*                      fNew;
                        BMenuItem*                      fOpen;
                        BMenuItem*                      fSetTargetToParent;
                        BMenuItem*                      fClose;
                        BMenuItem*                      fQuit;
                        BMenu*                          fActionMenu;
                        BMenuItem*                      fSelectAll;
                        BMenuItem*                      fSearch;
                        BMenuItem*                      fTrimSelection;
                        BMenuItem*                      fCopyText;
                        BMenuItem*                      fSelectInTracker;
                        BMenuItem*                      fOpenSelection;
                        BMenu*                          fPreferencesMenu;
                        BMenuItem*                      fRecurseLinks;
                        BMenuItem*                      fRecurseDirs;
                        BMenuItem*                      fSkipDotDirs;
                        BMenuItem*                      fCaseSensitive;
                        BMenuItem*                      fRegularExpression;
                        BMenuItem*                      fTextOnly;
                        BMenuItem*                      fInvokeEditor;
                        BMenu*                          fHistoryMenu;
                        BMenu*                          fEncodingMenu;
                        BMenuItem*                      fUTF8;
                        BMenuItem*                      fShiftJIS;
                        BMenuItem*                      fEUC;
                        BMenuItem*                      fJIS;

                        BCheckBox*                      fShowLinesCheckbox;
                        BButton*                        fButton;

                        Grepper*                        fGrepper;
                        BString                         fOldPattern;
                        BString                         fIncludeFilesGlob;
                        Model*                          fModel;
                        bigtime_t                       fLastNodeMonitorEvent;
                        ChangesIterator*        fChangesIterator;
                        BMessageRunner*         fChangesPulse;

                        int32                           fCurrentHistoryIndex;
                        BFilePanel*                     fFilePanel;
};

#endif // GREP_WINDOW_H