00001 #include <gui/GUI.h>
00002 #include <os/OS.h>
00003
00004 using namespace SkyGI;
00005
00006 class MyNetworkInterface : public View
00007 {
00008 public:
00009 MyNetworkInterface(Window *pParent, const Rect &rFrame, unsigned int nWindowLayoutFlags);
00010
00011 void Select(ListViewRow* pRow, const InputEvent& nInputEvent);
00012
00013 TextView *pTextView;
00014 ListView *pList;
00015 };
00016
00017 void MyNetworkInterface::Select(ListViewRow* pRow, const InputEvent& nInputEvent)
00018 {
00019 int i;
00020 NetworkInterfaceLink nLink;
00021 NetworkInterface pInterface;
00022
00023 pTextView->Clear();
00024
00025 if (pInterface.SetTo(((ListViewStringNode*)pRow->GetNode(0))->GetText()) == false)
00026 {
00027 pTextView->Set("Invalid network interface");
00028 return;
00029 }
00030
00031 pTextView->Append(String("DeviceName: ") + pInterface.GetName(), true);
00032 pTextView->Append(String("MAC: ") + pInterface.GetEthernetAddress().GetString(), true);
00033 pTextView->Append(String("IP: ") + pInterface.GetIP().GetString(), true);
00034 pTextView->Append(String("Netmask: ") + pInterface.GetNetMask().GetString(), true);
00035 pTextView->Append(String("Gateway: ") + pInterface.GetDefaultGateway().GetString(), true);
00036
00037 pTextView->Append(String("Loopback: "), true);
00038 if (pInterface.IsLoopBack())
00039 pTextView->Append("Yes");
00040 else
00041 pTextView->Append("No");
00042
00043 pTextView->Append(String("Running: "), true);
00044 if (pInterface.IsRunning())
00045 pTextView->Append("Yes");
00046 else
00047 pTextView->Append("No");
00048
00049 pTextView->Append(String("Link Status: "), true);
00050 nLink = pInterface.GetLink();
00051 switch (nLink)
00052 {
00053 case NETWORK_INTERFACE_LINK_UNKNOWN: pTextView->Append("Unknown"); break;
00054 case NETWORK_INTERFACE_LINK_DISCONNECT: pTextView->Append("Disconnected"); break;
00055 case NETWORK_INTERFACE_LINK_CONNECTED_10MBIT: pTextView->Append("Connected (10MBIT)"); break;
00056 case NETWORK_INTERFACE_LINK_CONNECTED_100MBIT: pTextView->Append("Connected (100MBIT)"); break;
00057 case NETWORK_INTERFACE_LINK_CONNECTED_1000MBIT: pTextView->Append("Connected (1000MBIT)"); break;
00058 case NETWORK_INTERFACE_LINK_CONNECTED_UNKNOWN: pTextView->Append("Connected (unknown media)"); break;
00059 }
00060
00061 char str[255];
00062
00063 std::vector<NetworkRoute> pList = NetworkRoutingTable::Get();
00064 pTextView->Append("", true);
00065 pTextView->Append("Routing table:", true);
00066 sprintf(str, "%d entries", pList.size());
00067 pTextView->Append(str, true);
00068
00069 for (i=0;i<pList.size();i++)
00070 {
00071 pTextView->Append("Target: ", true);
00072 pTextView->Append(pList[i].GetTarget());
00073 pTextView->Append(" Mask: ");
00074 pTextView->Append(pList[i].GetNetmask());
00075 pTextView->Append(" Gateway: ");
00076 pTextView->Append(pList[i].GetGateway());
00077 pTextView->Append(" Device: ");
00078 pTextView->Append(pList[i].GetNetworkDevice());
00079 pTextView->Append(" Metric: ");
00080 sprintf(str, "%d",pList[i].GetMetric());
00081 pTextView->Append(str);
00082 }
00083
00084
00085
00086
00087
00088
00089
00090 pTextView->Append("", true);
00091
00092 }
00093
00094 MyNetworkInterface::MyNetworkInterface(Window *pParent, const Rect &rFrame, unsigned int nWindowLayoutFlags) : View(pParent, rFrame, nWindowLayoutFlags)
00095 {
00096 std::vector<String> pNetworkInterfaceList;
00097
00098 pList = new ListView(this, Rect(0,0,0, 100), WINDOW_LAYOUT_SAME_WIDTH);
00099
00100 pTextView = new TextView(this, Rect(0,100,0,Height()), WINDOW_LAYOUT_FOLLOW_BOTTOM | WINDOW_LAYOUT_SAME_WIDTH);
00101
00102 pNetworkInterfaceList = NetworkInterfaceList::Get();
00103
00104 for (int i=0;i<pNetworkInterfaceList.size();i++)
00105 {
00106 ListViewRow *pRow = new ListViewRow();
00107 pRow->Append(new ListViewStringNode(pNetworkInterfaceList[i]));
00108 pList->Append(pRow);
00109
00110 }
00111
00112 pList->Sort();
00113
00114 pList->Selected.Connect(this, &MyNetworkInterface::Select);
00115 }
00116
00117 void NetworkInterfaceTest()
00118 {
00119 Rect r(Point(100, 100), Point(400, 440));
00120
00121 ApplicationWindow* pApplicationWindow = new ApplicationWindow(r, "NetworkInterface", WINDOW_LAYOUT_NOTHING, APPLICATION_WINDOW_NO_VIEW);
00122
00123 pApplicationWindow->GetTitleWindow()->SetFlags( (TitleWindowFlags)(pApplicationWindow->GetTitleWindow()->GetFlags() ));
00124 pApplicationWindow->AttachView(new MyNetworkInterface(pApplicationWindow, pApplicationWindow->GetClientRect(), WINDOW_LAYOUT_NOTHING));
00125 pApplicationWindow->Show();
00126 }
00127