First draft of a NetworkSetup preflet AddOn interface. Dummy addon included...
Local (BoneYard or not) add-ons should not be under a sub-folder ./add-ons/boneyard/ anymore. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4835 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -3,5 +3,6 @@ SubDir OBOS_TOP src tests kits net preflet ;
|
|||||||
SimpleTest Network :
|
SimpleTest Network :
|
||||||
Network.cpp
|
Network.cpp
|
||||||
NetworkWindow.cpp
|
NetworkWindow.cpp
|
||||||
|
NetworkSetupAddOn.cpp
|
||||||
: be root
|
: be root
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "NetworkSetupAddOn.h"
|
||||||
|
|
||||||
|
|
||||||
|
NetworkSetupAddOn::NetworkSetupAddOn()
|
||||||
|
: fIsDirty(false), fProfile(NULL)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
NetworkSetupAddOn::~NetworkSetupAddOn()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
BView * NetworkSetupAddOn::CreateView(BRect *bounds)
|
||||||
|
{
|
||||||
|
BView *v = new BView(*bounds, "a view", B_FOLLOW_ALL, B_WILL_DRAW);
|
||||||
|
v->SetViewColor((rand() % 256), (rand() % 256), (rand() % 256));
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t NetworkSetupAddOn::Save()
|
||||||
|
{
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t NetworkSetupAddOn::Revert()
|
||||||
|
{
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t NetworkSetupAddOn::SetProfile(NetworkProfile *new_profile)
|
||||||
|
{
|
||||||
|
fProfile = new_profile;
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char * NetworkSetupAddOn::Name()
|
||||||
|
{
|
||||||
|
return "Dummy NetworkSetupAddon";
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
#ifndef NETWORKSETUPADDON_H
|
||||||
|
#define NETWORKSETUPADDON_H
|
||||||
|
|
||||||
|
#include <View.h>
|
||||||
|
|
||||||
|
class NetworkProfile;
|
||||||
|
|
||||||
|
class NetworkSetupAddOn {
|
||||||
|
public:
|
||||||
|
NetworkSetupAddOn();
|
||||||
|
virtual ~NetworkSetupAddOn();
|
||||||
|
|
||||||
|
virtual BView * CreateView(BRect *bounds);
|
||||||
|
virtual status_t Save();
|
||||||
|
virtual status_t Revert();
|
||||||
|
|
||||||
|
virtual const char *Name();
|
||||||
|
|
||||||
|
|
||||||
|
status_t SetProfile(NetworkProfile *new_profile);
|
||||||
|
NetworkProfile * Profile();
|
||||||
|
bool IsDirty();
|
||||||
|
void SetDirty(bool dirty = true);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool fIsDirty;
|
||||||
|
NetworkProfile * fProfile;
|
||||||
|
};
|
||||||
|
|
||||||
|
inline bool NetworkSetupAddOn::IsDirty() { return fIsDirty; };
|
||||||
|
inline void NetworkSetupAddOn::SetDirty(bool dirty) { fIsDirty = dirty; };
|
||||||
|
inline NetworkProfile * NetworkSetupAddOn::Profile() { return fProfile; };
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
typedef NetworkSetupAddOn * (*network_setup_addon_instantiate)(void);
|
||||||
|
NetworkSetupAddOn * get_addon(void);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // ifdef NETWORKSETUPADDON_H
|
||||||
|
|
||||||
@@ -8,7 +8,8 @@
|
|||||||
#include <StorageKit.h>
|
#include <StorageKit.h>
|
||||||
#include <SupportKit.h>
|
#include <SupportKit.h>
|
||||||
|
|
||||||
#include <BoneyardAddOn.h>
|
#include "BoneyardAddOn.h"
|
||||||
|
#include "NetworkSetupAddOn.h"
|
||||||
|
|
||||||
#include "NetworkWindow.h"
|
#include "NetworkWindow.h"
|
||||||
|
|
||||||
@@ -165,17 +166,25 @@ void NetworkWindow::MessageReceived
|
|||||||
|
|
||||||
case SHOW_MSG: {
|
case SHOW_MSG: {
|
||||||
BYAddon *by;
|
BYAddon *by;
|
||||||
|
NetworkSetupAddOn *addon;
|
||||||
|
|
||||||
if (fShowView)
|
if (fShowView)
|
||||||
fShowView->RemoveSelf();
|
fShowView->RemoveSelf();
|
||||||
|
|
||||||
fShowView = NULL;
|
fShowView = NULL;
|
||||||
|
|
||||||
if (msg->FindPointer("byaddon", (void **) &by) != B_OK)
|
by = NULL;
|
||||||
break;
|
addon = NULL;
|
||||||
|
if (msg->FindPointer("addon", (void **) &addon) != B_OK) {
|
||||||
|
if (msg->FindPointer("byaddon", (void **) &by) != B_OK)
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
|
||||||
fShowRect = fPanel->Bounds();
|
fShowRect = fPanel->Bounds();
|
||||||
fShowView = by->CreateView(&fShowRect);
|
if (addon)
|
||||||
|
fShowView = addon->CreateView(&fShowRect);
|
||||||
|
else
|
||||||
|
fShowView = by->CreateView(&fShowRect);
|
||||||
if (fShowView) {
|
if (fShowView) {
|
||||||
fPanel->AddChild(fShowView);
|
fPanel->AddChild(fShowView);
|
||||||
// fShowView->SetViewColor((rand() % 256), (rand() % 256), (rand() % 256));
|
// fShowView->SetViewColor((rand() % 256), (rand() % 256), (rand() % 256));
|
||||||
@@ -311,11 +320,11 @@ void NetworkWindow::BuildShowMenu
|
|||||||
path.Append(search_path + 3);
|
path.Append(search_path + 3);
|
||||||
} else {
|
} else {
|
||||||
path.SetTo(search_path);
|
path.SetTo(search_path);
|
||||||
|
path.Append("boneyard");
|
||||||
};
|
};
|
||||||
|
|
||||||
search_path = strtok_r(NULL, ":", &next_path_token);
|
search_path = strtok_r(NULL, ":", &next_path_token);
|
||||||
|
|
||||||
path.Append("boneyard");
|
|
||||||
printf("Looking into %s\n", path.Path());
|
printf("Looking into %s\n", path.Path());
|
||||||
|
|
||||||
dir.SetTo(path.Path());
|
dir.SetTo(path.Path());
|
||||||
@@ -336,21 +345,39 @@ void NetworkWindow::BuildShowMenu
|
|||||||
|
|
||||||
printf("Addon %s loaded.\n", addon_path.Path());
|
printf("Addon %s loaded.\n", addon_path.Path());
|
||||||
|
|
||||||
by_instantiate_func func;
|
by_instantiate_func by_func;
|
||||||
|
network_setup_addon_instantiate ns_func;
|
||||||
status_t status;
|
status_t status;
|
||||||
|
|
||||||
status = get_image_symbol(addon_id, "instantiate", B_SYMBOL_TYPE_TEXT, (void **) &func);
|
status = get_image_symbol(addon_id, "get_addon", B_SYMBOL_TYPE_TEXT, (void **) &ns_func);
|
||||||
if (status != B_OK) {
|
if (status == B_OK) {
|
||||||
// No "modules" symbol found in this addon
|
NetworkSetupAddOn *addon;
|
||||||
printf("Symbol \"instantiate\" not found in %s addon: not a module addon!\n", addon_path.Path());
|
|
||||||
} else {
|
addon = ns_func();
|
||||||
BYAddon *by = func();
|
|
||||||
BMessage *msg = new BMessage(msg_what);
|
BMessage *msg = new BMessage(msg_what);
|
||||||
msg->AddInt32("image_id", addon_id);
|
msg->AddInt32("image_id", addon_id);
|
||||||
msg->AddString("addon_path", addon_path.Path());
|
msg->AddString("addon_path", addon_path.Path());
|
||||||
msg->AddPointer("byaddon", by);
|
msg->AddPointer("addon", addon);
|
||||||
menu->AddItem(new BMenuItem(by->Name(), msg));
|
menu->AddItem(new BMenuItem(addon->Name(), msg));
|
||||||
|
continue;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
status = get_image_symbol(addon_id, "instantiate", B_SYMBOL_TYPE_TEXT, (void **) &by_func);
|
||||||
|
if (status == B_OK) {
|
||||||
|
BYAddon *addon;
|
||||||
|
|
||||||
|
addon = by_func();
|
||||||
|
BMessage *msg = new BMessage(msg_what);
|
||||||
|
msg->AddInt32("image_id", addon_id);
|
||||||
|
msg->AddString("addon_path", addon_path.Path());
|
||||||
|
msg->AddPointer("byaddon", addon);
|
||||||
|
menu->AddItem(new BMenuItem(addon->Name(), msg));
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
|
||||||
|
// No "modules" symbol found in this addon
|
||||||
|
printf("Symbol \"instantiate\" not found in %s addon: not a module addon!\n", addon_path.Path());
|
||||||
|
unload_add_on(addon_id);
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "NetworkSetupAddOn.h"
|
||||||
|
|
||||||
|
class StatusAddOn : public NetworkSetupAddOn {
|
||||||
|
public:
|
||||||
|
const char * Name();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const char * StatusAddOn::Name()
|
||||||
|
{
|
||||||
|
return "Status";
|
||||||
|
}
|
||||||
|
|
||||||
|
NetworkSetupAddOn * get_addon()
|
||||||
|
{
|
||||||
|
return new StatusAddOn();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user