root/src/apps/poorman/PoorManWindow.h
/* PoorManWindow.h
 *
 *      Philip Harrison
 *      Started: 4/25/2004
 *      Version: 0.1
 */

#ifndef POOR_MAN_WINDOW_H
#define POOR_MAN_WINDOW_H

#include <pthread.h>

#include <SupportDefs.h>
#include <Window.h>
#include <String.h>

class BPoint;
class BFilePanel;
class BMessage;
class BMenuBar;
class BMenu;
class BTextView;
class BStringView;
class BScrollView;
class BRect;
class BFile;
class BFont;

class PoorManView;
class PoorManPreferencesWindow;
class PoorManServer;

class PoorManWindow: public BWindow
{
public:
                                                        PoorManWindow(BRect frame);
        virtual                                 ~PoorManWindow();
        virtual void                    MessageReceived(BMessage* message);

        virtual void                    FrameMoved(BPoint origin);
        virtual void                    FrameResized(float width, float height);
        virtual bool                    QuitRequested();
        virtual void                    Zoom(BPoint origin, float width, float height);

        // -------------------------------------------
        // Public PoorMan Window Methods
                        void                    SetDirLabel(const char* name);
                        void                    SetHits(uint32 num);
                        uint32                  GetHits() { return fHits; }
                        status_t                SaveConsole(BMessage* message, bool);
                
                        status_t                SaveSettings();
                        status_t                ReadSettings();
                        void                    DefaultSettings();
                
                        status_t                StartServer();
                        status_t                StopServer();
                
                        PoorManServer*  GetServer() const { return fServer;}
        // -------------------------------------------  
        // Preferences and Settings
                // Site Tab             
        bool DirListFlag()
        {
                return fDirListFlag;
        }

        void SetDirListFlag(bool flag)
        {
                fDirListFlag = flag;
        }

        const char* IndexFileName()
        {
                return fIndexFileName.String();
        }

        void SetIndexFileName(const char* str)
        {
                fIndexFileName.SetTo(str);
        }

        const char*     WebDir()
        {
                return fWebDirectory.String();
        }

        void SetWebDir(const char* str)
        {
                fWebDirectory.SetTo(str);
        }

        // Logging Tab

        bool LogConsoleFlag()
        {
                return fLogConsoleFlag;
        }

        void SetLogConsoleFlag(bool flag)
        {
                fLogConsoleFlag = flag;
        }

        bool LogFileFlag()
        {
                return fLogFileFlag;
        }

        void SetLogFileFlag(bool flag)
        {
                fLogFileFlag = flag;
        }

        const char* LogPath()
        {
                return fLogPath.String();
        }

                        void SetLogPath(const char* str);

        // Advanced Tab
        int16 MaxConnections()
        {
                return fMaxConnections;
        }

        void SetMaxConnections(int16 num)
        {
                fMaxConnections = num;
        }

private:
        // -------------------------------------------
        // PoorMan Window Methods
                        void                    UpdateStatusLabelAndMenuItem();
                        void                    UpdateHitsLabel();
        
private:
        // -------------------------------------------
        // Build Menu Methods
                        BMenu*                  BuildFileMenu() const;
                        BMenu*                  BuildEditMenu() const;
                        BMenu*                  BuildControlsMenu() const;
        
        // --------------------------------------------
        // MenuBar & Menu items
                        BMenuBar*               fFileMenuBar;
                        BMenu*                  fFileMenu;
                        BMenu*                  fEditMenu;
                        BMenu*                  fControlsMenu;
        
        // --------------------------------------------
        // Status, Hits, Directory
                        BStringView*    fStatusView;
                        BStringView*    fHitsView;
                        BStringView*    fDirView;
        
                        bool                    fStatus;
                        uint32                  fHits;
                        char                    fHitsLabel[25];
        
        // --------------------------------------------
        // Logging View
                        BScrollView*    fScrollView;
                        BTextView*              fLoggingView;
        // use asctime() for format of [Date/Time]:
        

        // -------------------------------------------
        // PoorMan Preference Window
                        PoorManPreferencesWindow * fPrefWindow;
        
        // site tab
                        BString                 fWebDirectory;
                        BString                 fIndexFileName;
                        bool                    fDirListFlag;

        // logging tab
                        bool                    fLogConsoleFlag;
                        bool                    fLogFileFlag;
                        BString                 fLogPath;
        
        // advanced tab
                        int16                   fMaxConnections;
                
                        bool                    fIsZoomed;
                        float                   fLastWidth;
                        float                   fLastHeight;
                        BRect                   fFrame;
                        BRect                   fSetwindowFrame;
        
        // File Panels
                        BFilePanel*             fSaveConsoleFilePanel;
                        BFilePanel*             fSaveConsoleSelectionFilePanel;

                        BFile*                  fLogFile;
        
                        PoorManServer*  fServer;
        
                        pthread_rwlock_t fLogFileLock;
};

#endif