/*
 *  Copyright (C) 2003 Marek Janukowicz <marek@janukowicz.net>
 */


#ifndef __KDEVPART_RUBYSUPPORT_H__
#define __KDEVPART_RUBYSUPPORT_H__

#include <tqguardedptr.h>

#include "kdevlanguagesupport.h"

class KDialogBase;
class TQPopupMenu;
class Context;
class KDevShellWidget;

class RubySupportPart : public KDevLanguageSupport
{
  TQ_OBJECT
  

public:

  RubySupportPart(TQObject *parent, const char *name, const TQStringList &);
  virtual ~RubySupportPart();

  virtual KDevDesignerIntegration *designer(KInterfaceDesigner::DesignerType type);

protected:
    virtual Features features();
    virtual KMimeType::List mimeTypes();

private slots:
    void projectConfigWidget(KDialogBase *dlg);
    void projectOpened();
    void projectClosed();
    void savedFile(const KURL &fileName);
    void addedFilesToProject(const TQStringList &fileList);
    void removedFilesFromProject(const TQStringList &fileList);
    void slotRun();
    void slotRunTestUnderCursor();
    void slotCreateSubclass();
    void contextMenu(TQPopupMenu *popup, const Context *context);
    void slotBrowse();

    void initialParse();

    void slotSwitchToController();
    void slotSwitchToView();
    void slotSwitchToModel();
    void slotSwitchToTest();

private:
    void startApplication(const TQString &program);
    TQString interpreter();
    TQString shell();
    TQString mainProgram();
    TQString runDirectory();
    TQString programArgs();
    TQString characterCoding();

    void maybeParse(const TQString fileName);
    void parse(const TQString &fileName);

    TQMap<KInterfaceDesigner::DesignerType, KDevDesignerIntegration*> m_designers;

    TQString m_contextFileName;
    TQCString m_shell;

    TQGuardedPtr<KDevShellWidget> m_shellWidget;
};


#endif
