* Copyright 2011-2016, Rene Gollent, rene@gollent.com.
* Copyright 2012, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#ifndef COMMAND_LINE_USER_INTERFACE_H
#define COMMAND_LINE_USER_INTERFACE_H
#include <ObjectList.h>
#include <String.h>
#include "CliContext.h"
#include "UserInterface.h"
class CliCommand;
class CommandLineUserInterface : public UserInterface {
public:
CommandLineUserInterface();
virtual ~CommandLineUserInterface();
virtual const char* ID() const;
virtual status_t Init(Team* team,
UserInterfaceListener* listener);
virtual void Show();
virtual void Terminate();
virtual UserInterface* Clone() const;
virtual bool IsInteractive() const;
virtual status_t LoadSettings(const TeamUiSettings* settings);
virtual status_t SaveSettings(TeamUiSettings*& settings) const;
virtual void NotifyUser(const char* title,
const char* message,
user_notification_type type);
virtual void NotifyBackgroundWorkStatus(
const char* message);
virtual int32 SynchronouslyAskUser(const char* title,
const char* message, const char* choice1,
const char* choice2, const char* choice3);
virtual status_t SynchronouslyAskUserForFile(entry_ref* _ref);
void Run();
private:
struct CommandEntry;
typedef BObjectList<CommandEntry, true> CommandList;
struct HelpCommand;
friend struct HelpCommand;
private:
status_t _InputLoop();
status_t _RegisterCommands();
bool _RegisterCommand(const BString& name,
CliCommand* command);
void _ExecuteCommand(int argc,
const char* const* argv);
CommandEntry* _FindCommand(const char* commandName);
void _PrintHelp(const char* commandName);
static int _CompareCommandEntries(
const CommandEntry* command1,
const CommandEntry* command2);
private:
CliContext* fContext;
CommandList fCommands;
sem_id fShowSemaphore;
bool fShown;
volatile bool fTerminating;
};
#endif