///Decorator 装饰者模式提供了一种给类增加职责的方法,不是通过继承实现的,而是通过组合。 ///动态地给一个对象添加一些额外的职责或者行为。就增加功能来说, Decorator模式相比生成子类更为灵活。 ///它是通过创建一个包装对象,也就是装饰来包裹真实的对象 ///Decorator 模式除了采用组合的方式取得了比采用继承方式更好的效果,Decorator 模式 还给设计带来一种“即用即付”的方式来添加职责 ///Decorator 模式和 Proxy 模式的相似的地方在于它们都拥有一个指向其他对象的引用 ///为了多态,通过父类指针指向其具体子类,但是这就带来另外一个问题,当具体子类要添加 新的职责,就必须向其父类添加一个这个职责的抽象接口,否则是通过父类指针是调用不到 这个方法了。这样处于高层的父类就承载了太多的特征(方法),并且继承自这个父类的所 有子类都不可避免继承了父类的这些接口,但是可能这并不是这个具体子类所需要的。而在 Decorator 模式提供了一种较好的解决方法,当需要添加一个操作的时候就可以通过 Decorator 模式来解决,你可以一步步添加新的职责。 ///透明性使得你可以递归的嵌套多个装饰,从而可以添加任意多的功能 ///以下情况使用Decorator模式 ///1.在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。 ///2 处理那些可以撤消的职责。 ///3.当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展 void DecoratorTest() { ::Component* com = new ConcreteComponent(); Decorator* dec = new ConcreteDecorator(com); dec->Operation(); delete com; delete dec; }
TEST_F(TestVariadicTemplate, Get) { Tested obj; const size_t originalExpected = 7; EXPECT_EQ(originalExpected, obj.Get()); { Forwarder forwarder(obj); EXPECT_EQ(originalExpected, forwarder.Get()); { const size_t expected = originalExpected + 1; Mock mock(forwarder); EXPECT_CALL(mock, Get()).Times(1).WillOnce(::testing::Return(expected)); EXPECT_EQ(expected, forwarder.Get()); } ASSERT_FALSE(forwarder.pMock_); } { Decorator decorator; EXPECT_EQ(originalExpected, decorator.Get()); { Mock mock(decorator); const size_t expected = originalExpected + 11; EXPECT_CALL(mock, Get()).Times(1).WillOnce(::testing::Return(expected)); EXPECT_EQ(expected, decorator.Get()); } ASSERT_FALSE(decorator.pMock_); } }
bool ex_diff(void *args) { ITheFramework *frame = Factory::GetFramework(); Decorator *decorator = ssi_create(Decorator, 0, true); frame->AddDecorator(decorator); Mouse *mouse = ssi_create(Mouse, 0, true); mouse->getOptions()->mask = Mouse::LEFT; ITransformable *cursor_t = frame->AddProvider(mouse, SSI_MOUSE_CURSOR_PROVIDER_NAME); frame->AddSensor(mouse); PythonFilter *py_diff = ssi_create(PythonFilter, 0, true); py_diff->getOptions()->setScript("ssi_diff"); ITransformable *py_diff_t = frame->AddTransformer(cursor_t, py_diff, "0.1s"); SignalPainter *plot = 0; plot = ssi_create_id(SignalPainter, 0, "plot"); plot->getOptions()->setTitle("DIFF (PYTHON)"); plot->getOptions()->size = 10; frame->AddConsumer(py_diff_t, plot, "1"); decorator->add("console", 0, 0, 650, 800); decorator->add("plot*", 650, 0, 400, 400); decorator->add("monitor*", 650, 400, 400, 400); frame->Start(); frame->Wait(); frame->Stop(); frame->Clear(); return true; }
int main(int argc, char* argv[]) { Component* com = new ConcreteComponent(); Decorator* dec = new ConcreteDecorator(com); dec->Operation(); delete dec; return 0; }
bool ex_print(void *args) { ITheFramework *frame = Factory::GetFramework(); Decorator *decorator = ssi_create(Decorator, 0, true); frame->AddDecorator(decorator); Mouse *mouse = ssi_create(Mouse, 0, true); mouse->getOptions()->mask = Mouse::LEFT; ITransformable *button_t = frame->AddProvider(mouse, SSI_MOUSE_BUTTON_PROVIDER_NAME); ITransformable *cursor_t = frame->AddProvider(mouse, SSI_MOUSE_CURSOR_PROVIDER_NAME); frame->AddSensor(mouse); PythonConsumer *py_print = ssi_create(PythonConsumer, 0, true); py_print->getOptions()->setScript("ssi_print"); ITransformable *input[] = { button_t, cursor_t }; //py_print->getOptions()->add("path", "result.txt"); frame->AddConsumer(2, input, py_print, "100ms"); decorator->add("console", 0, 0, 650, 800); decorator->add("plot*", 650, 0, 400, 400); decorator->add("monitor*", 650, 400, 400, 400); frame->Start(); frame->Wait(); frame->Stop(); frame->Clear(); return true; }
Decorator * DecorInfo::Instantiate(Desktop* desktop, DrawingEngine* engine, BRect rect, const char *title, window_look look, uint32 flags) { if (!desktop->LockSingleWindow()) return NULL; DesktopSettings settings(desktop); Decorator *decorator; try { if (fAllocator != NULL) decorator = fAllocator(settings, rect, look, flags); else decorator = new DefaultDecorator(settings, rect, look, flags); } catch (...) { desktop->UnlockSingleWindow(); return NULL; } desktop->UnlockSingleWindow(); decorator->SetDrawingEngine(engine); decorator->SetTitle(title); return decorator; }
bool MovingPixelsState::onMouseDown(Editor* editor, Message* msg) { ASSERT(m_pixelsMovement != NULL); Decorator* decorator = static_cast<Decorator*>(editor->getDecorator()); Document* document = editor->getDocument(); // Start scroll loop if (checkForScroll(editor, msg)) return true; // Transform selected pixels if (document->isMaskVisible() && decorator->getTransformHandles(editor)) { TransformHandles* transfHandles = decorator->getTransformHandles(editor); // Get the handle covered by the mouse. HandleType handle = transfHandles->getHandleAtPoint(editor, gfx::Point(msg->mouse.x, msg->mouse.y), getTransformation(editor)); if (handle != NoHandle) { // Re-catch the image int x, y; editor->screenToEditor(msg->mouse.x, msg->mouse.y, &x, &y); m_pixelsMovement->catchImageAgain(x, y, handle); editor->captureMouse(); return true; } } // Start "moving pixels" loop if (editor->isInsideSelection() && (msg->mouse.left || msg->mouse.right)) { // In case that the user is pressing the copy-selection keyboard shortcut. EditorCustomizationDelegate* customization = editor->getCustomizationDelegate(); if (customization && customization->isCopySelectionKeyPressed()) { // Stamp the pixels to create the copy. m_pixelsMovement->stampImage(); } // Re-catch the image int x, y; editor->screenToEditor(msg->mouse.x, msg->mouse.y, &x, &y); m_pixelsMovement->catchImageAgain(x, y, MoveHandle); editor->captureMouse(); return true; } // End "moving pixels" loop else { // Drop pixels (e.g. to start drawing) dropPixels(editor); } // Use StandbyState implementation return StandbyState::onMouseDown(editor, msg); }
void ex_mfcc_chain () { ITheFramework *frame = Factory::GetFramework (); Decorator *decorator = ssi_create (Decorator, 0, true); frame->AddDecorator(decorator); // audio sensor #ifndef SIMULATE Audio *audio = ssi_create (Audio, "audio", true); audio->getOptions()->scale = true; ITransformable *audio_p = frame->AddProvider(audio, SSI_AUDIO_PROVIDER_NAME); #else WavReader *audio = ssi_create (WavReader, 0, true); audio->getOptions()->setPath("audio.wav"); audio->getOptions()->scale = true; ITransformable *audio_p = frame->AddProvider(audio, SSI_WAVREADER_PROVIDER_NAME); #endif frame->AddSensor(audio); // preemph OSPreemphasis *preemph = ssi_create (OSPreemphasis, "preemph", true); ITransformable *preemph_t = frame->AddTransformer(audio_p, preemph, "0.02s"); // fft OSMfccChain *mfcc = ssi_create (OSMfccChain, "mfcc", true); mfcc->getOSTransformFFT()->getOptions()->nfft = 2048; ITransformable *mfcc_t = frame->AddTransformer(preemph_t, mfcc, "0.01s", "0.01s"); // plot SignalPainter *plot = 0; plot = ssi_create_id (SignalPainter, 0, "plot"); plot->getOptions()->setTitle("audio"); plot->getOptions()->type = PaintSignalType::AUDIO; plot->getOptions()->size = 10.0; frame->AddConsumer(audio_p, plot, "0.1s"); plot = ssi_create_id (SignalPainter, 0, "plot"); plot->getOptions()->setTitle("mfcc"); plot->getOptions()->type = PaintSignalType::IMAGE; plot->getOptions()->size = 10.0; frame->AddConsumer(mfcc_t, plot, "0.1s"); FileWriter *writer = ssi_create (FileWriter, 0, true); writer->getOptions()->setPath("mfcc_chain"); writer->getOptions()->type = File::ASCII; frame->AddConsumer(mfcc_t, writer, "0.1s"); // run framework decorator->add("console", 0, 0, 650, 800); decorator->add("plot*", 650, 0, 400, 400); decorator->add("monitor*", 650, 400, 400, 400); frame->Start(); frame->Wait(); frame->Stop(); frame->Clear(); }
bool ex_plp(void *args) { ITheFramework *frame = Factory::GetFramework(); Decorator *decorator = ssi_create (Decorator, 0, true); frame->AddDecorator(decorator); // audio sensor #ifndef SIMULATE Audio *audio = ssi_create(Audio, "audio", true); audio->getOptions()->scale = true; ITransformable *audio_p = frame->AddProvider(audio, SSI_AUDIO_PROVIDER_NAME); #else WavReader *audio = ssi_create(WavReader, 0, true); audio->getOptions()->setPath("audio.wav"); audio->getOptions()->scale = true; ITransformable *audio_p = frame->AddProvider(audio, SSI_WAVREADER_PROVIDER_NAME); #endif frame->AddSensor(audio); OSPlpChain *plp = ssi_create(OSPlpChain, "OSPlpChain", true); ITransformable *plp_t = frame->AddTransformer(audio_p, plp, "0.06s", "0.01s"); SignalPainter *plot = 0; plot = ssi_create_id (SignalPainter, 0, "plot"); plot->getOptions()->setTitle("audio"); plot->getOptions()->type = PaintSignalType::AUDIO; plot->getOptions()->size = 10.0; frame->AddConsumer(audio_p, plot, "0.1s"); plot = ssi_create_id (SignalPainter, 0, "plot"); plot->getOptions()->setTitle("lpc"); plot->getOptions()->size = 10.0; frame->AddConsumer(plp_t, plot, "1"); FileWriter *writer = ssi_create(FileWriter, 0, true); writer->getOptions()->setPath("plp_chain"); writer->getOptions()->type = File::ASCII; frame->AddConsumer(plp_t, writer, "1"); #ifdef SIMULATE AudioPlayer *player = ssi_create(AudioPlayer, "player", true); frame->AddConsumer(audio_p, player, "0.01s"); #endif // run framework decorator->add("console", 0, 0, 650, 800); decorator->add("plot*", 650, 0, 400, 400); decorator->add("monitor*", 650, 400, 400, 400); frame->Start(); frame->Wait(); frame->Stop(); frame->Clear(); return true; }
bool ex_send_notifications(void *arg) { ITheFramework *frame = Factory::GetFramework(); Decorator *decorator = ssi_create(Decorator, 0, true); decorator->getOptions()->setOrigin(CONSOLE_WIDTH, 0); frame->AddDecorator(decorator); // start mouse Mouse *mouse = ssi_create(Mouse, 0, true); ITransformable *cursor_p = frame->AddProvider(mouse, SSI_MOUSE_CURSOR_PROVIDER_NAME); frame->AddSensor(mouse); // sender + receiver NotifySender *sender = ssi_create_id(NotifySender, 0, "sender"); sender->setLogLevel(SSI_LOG_LEVEL_DEBUG); sender->getOptions()->setUrl("udp://localhost:1111"); frame->AddRunnable(sender); NotifyReceiver *receiver = ssi_create_id(NotifyReceiver, 0, "receiver"); receiver->setLogLevel(SSI_LOG_LEVEL_DEBUG); receiver->getOptions()->setUrl("udp://localhost:1111"); receiver->getOptions()->setId("plot"); frame->AddRunnable((SSI_IRunnableObject*)receiver); // control (place after sender!) ControlCheckBox *checkbox = 0; checkbox = ssi_create_id(ControlCheckBox, 0, "checkbox"); checkbox->getOptions()->setId("sender"); checkbox->getOptions()->setTitle("VISUALIZATION"); checkbox->getOptions()->setLabel("SHOW"); checkbox->getOptions()->value = false; frame->AddRunnable(checkbox); // plot SignalPainter *plot; plot = ssi_create_id(SignalPainter, 0, "plot"); plot->getOptions()->size = 10; plot->getOptions()->setTitle("cursor"); frame->AddConsumer(cursor_p, plot, "0.2s"); decorator->add("plot*", 0, 0, 400, CONSOLE_HEIGHT - 200); decorator->add("checkbox*", 0, CONSOLE_HEIGHT - 200, 400, 200); frame->Start(); frame->Wait(); frame->Stop(); frame->Clear(); return true; }
int main() { Component *pCom = new ConcreteComponent(); Decorator *pDec = new ConcreteDecoratorA(pCom); pDec->operation(); pDec = new ConcreteDecoratorB(pCom); pDec->operation(); }
void ex_pitch_chain () { ITheFramework *frame = Factory::GetFramework (); Decorator *decorator = ssi_create (Decorator, 0, true); frame->AddDecorator(decorator); // audio sensor #ifndef SIMULATE Audio *audio = ssi_create (Audio, "audio", true); audio->getOptions()->scale = true; ITransformable *audio_p = frame->AddProvider(audio, SSI_AUDIO_PROVIDER_NAME); #else WavReader *audio = ssi_create (WavReader, 0, true); audio->getOptions()->setPath("audio.wav"); audio->getOptions()->scale = true; audio->getOptions()->block = 0.01; ITransformable *audio_p = frame->AddProvider(audio, SSI_WAVREADER_PROVIDER_NAME); #endif frame->AddSensor(audio); // pitch OSPitchChain *pitch = ssi_create (OSPitchChain, "pitch", true); pitch->getOSTransformFFT()->getOptions()->nfft = 1024; pitch->getOSPitchShs()->getOptions()->baseSr = audio_p->getSampleRate(); ITransformable *pitch_t = frame->AddTransformer(audio_p, pitch, "0.01s", "0.01s"); // plot SignalPainter *plot = 0; plot = ssi_create_id (SignalPainter, 0, "plot"); plot->getOptions()->setTitle("audio"); plot->getOptions()->type = PaintSignalType::AUDIO; plot->getOptions()->size = 10.0; frame->AddConsumer(audio_p, plot, "0.01s"); plot = ssi_create_id (SignalPainter, 0, "plot"); plot->getOptions()->setTitle("pitch"); plot->getOptions()->size = 10.0; frame->AddConsumer(pitch_t, plot, "0.01s"); FileWriter *writer = ssi_create (FileWriter, 0, true); writer->getOptions()->setPath("pitch_chain"); writer->getOptions()->type = File::ASCII; frame->AddConsumer(pitch_t, writer, "0.01s"); // run framework decorator->add("console", 0, 0, 650, 800); decorator->add("plot*", 650, 0, 400, 400); decorator->add("monitor*", 650, 400, 400, 400); frame->Start(); frame->Wait(); frame->Stop(); frame->Clear(); }
bool ex_clone(void *args) { ITheFramework *frame = Factory::GetFramework(); Decorator *decorator = ssi_create(Decorator, 0, true); frame->AddDecorator(decorator); Mouse *mouse = ssi_create(Mouse, 0, true); mouse->getOptions()->mask = Mouse::LEFT; ITransformable *button_t = frame->AddProvider(mouse, SSI_MOUSE_BUTTON_PROVIDER_NAME); ITransformable *cursor_t = frame->AddProvider(mouse, SSI_MOUSE_CURSOR_PROVIDER_NAME); frame->AddSensor(mouse); PythonTransformer *clone = 0; clone = ssi_create(PythonTransformer, 0, true); clone->getOptions()->setScript("ssi_clone"); ITransformable *button_clone_t = frame->AddTransformer(button_t, clone, "0.1s"); clone = ssi_create(PythonTransformer, 0, true); clone->getOptions()->setScript("ssi_clone"); ITransformable *cursor_clone_t = frame->AddTransformer(cursor_t, clone, "0.1s"); SignalPainter *plot = 0; plot = ssi_create_id(SignalPainter, 0, "plot"); plot->getOptions()->setTitle("BUTTON (RAW)"); plot->getOptions()->size = 5; frame->AddConsumer(button_t, plot, "0.1s"); plot = ssi_create_id(SignalPainter, 0, "plot"); plot->getOptions()->setTitle("CURSOR (RAW)"); plot->getOptions()->size = 5; frame->AddConsumer(cursor_t, plot, "0.1s"); plot = ssi_create_id(SignalPainter, 0, "plot"); plot->getOptions()->setTitle("BUTTON (CLONE)"); plot->getOptions()->size = 5; frame->AddConsumer(button_clone_t, plot, "0.1s"); plot = ssi_create_id(SignalPainter, 0, "plot"); plot->getOptions()->setTitle("CURSOR (CLONE)"); plot->getOptions()->size = 5; frame->AddConsumer(cursor_clone_t, plot, "0.1s"); decorator->add("console", 0, 0, 650, 800); decorator->add("plot*", 650, 0, 400, 400); decorator->add("monitor*", 650, 400, 400, 400); frame->Start(); frame->Wait(); frame->Stop(); frame->Clear(); return true; }
int main(){ Component* pComponent = new ConcreateComponent(); cout << "aaaaaaaaaaaa\n"; Decorator* pDecorator = new ConcreateDecorator(pComponent); cout <<"bbbbbbbbbbbbb\n"; pDecorator->Operation(); cout <<"cccccccccccc\n"; delete pDecorator; return 0; }
int main() { // 初始化一个Component对象 Component* pComponent = new ConcreateComponent(); // 采用这个Component对象去初始化一个Decorator对象, // 这样就可以为这个Component对象动态添加职责 Decorator* pDecorator = new ConcreateDecorator(pComponent); pDecorator->Operation(); delete pDecorator; return 0; }
bool ex_gsr_arousal(void *args) { ITheEventBoard *board = Factory::GetEventBoard(); ITheFramework *frame = Factory::GetFramework(); Decorator *decorator = ssi_create(Decorator, 0, true); frame->AddDecorator(decorator); FileReader *reader = ssi_create(FileReader, 0, true); reader->getOptions()->setPath("data\\gsr"); reader->getOptions()->block = 0.2; ITransformable *gsr_p = frame->AddProvider(reader, SSI_FILEREADER_PROVIDER_NAME); frame->AddSensor(reader); GSRArousalEstimation *arousal = ssi_create(GSRArousalEstimation, 0, true); ITransformable *arousal_p = frame->AddTransformer(gsr_p, arousal, "1"); ThresClassEventSender *classifier = ssi_create(ThresClassEventSender, 0, true); classifier->getOptions()->setClasses("low,med,high"); classifier->getOptions()->setThresholds("0.01,0.3,0.7"); frame->AddConsumer(arousal_p, classifier, "1"); board->RegisterSender(*classifier); EventMonitor *monitor = ssi_create_id(EventMonitor, 0, "monitor"); board->RegisterListener(*monitor, "@"); SignalPainter *plot = 0; plot = ssi_create_id(SignalPainter, 0, "plot"); plot->getOptions()->setTitle("gsr"); plot->getOptions()->size = 150.0; frame->AddConsumer(gsr_p, plot, "0.2s"); plot = ssi_create_id(SignalPainter, 0, "plot"); plot->getOptions()->setTitle("arousal"); plot->getOptions()->size = 150.0; frame->AddConsumer(arousal_p, plot, "0.2s"); decorator->add("console", 0, 0, 650, 800); decorator->add("plot*", 650, 0, 400, 400); decorator->add("monitor*", 650, 400, 400, 400); board->Start(); frame->Start(); frame->Wait(); frame->Stop(); board->Stop(); frame->Clear(); board->Clear(); return true; }
bool ex_stream_info(void *arg) { Factory::RegisterDLL("ssimouse"); ITheFramework *frame = Factory::GetFramework(); Decorator *decorator = ssi_create (Decorator, 0, true); frame->AddDecorator(decorator); ITheEventBoard *board = Factory::GetEventBoard(); //ClockEventSender *eclock = ssi_create(ClockEventSender, 0, true); Mouse *mouse = ssi_create(Mouse, "mouse", true); mouse->getOptions()->mask = Mouse::LEFT; mouse->getOptions()->scale = true; mouse->getOptions()->single = false; mouse->getOptions()->sendEvent = true; ITransformable *cursor_p = frame->AddProvider(mouse, SSI_MOUSE_CURSOR_PROVIDER_NAME); ITransformable *button_p = frame->AddProvider(mouse, SSI_MOUSE_BUTTON_PROVIDER_NAME); frame->AddSensor(mouse); board->RegisterSender(*mouse); Websocket *websocket = ssi_create(Websocket, 0, true); websocket->getOptions()->setHttpRoot("stream_to_browser_info"); websocket->getOptions()->send_info = true; //frame->AddConsumer(cursor_p, websocket, "0.25s"); ssi::ITransformable *src[2] = { cursor_p, button_p }; frame->AddConsumer(2, src, websocket, "1"); board->RegisterSender(*websocket); board->RegisterListener(*websocket); EventMonitor *monitor = ssi_create_id (EventMonitor, 0, "monitor"); board->RegisterListener(*monitor); decorator->add("console", 0, 0, 650, 800); decorator->add("plot*", 650, 0, 400, 400); decorator->add("monitor*", 650, 400, 400, 400); board->Start(); frame->Start(); frame->Wait(); frame->Stop(); frame->Clear(); return true; }
bool ex_sender_video(void *arg) { #if _WIN32|_WIN64 ITheFramework *frame = Factory::GetFramework(); Decorator *decorator = ssi_create(Decorator, 0, true); decorator->getOptions()->setOrigin(CONSOLE_WIDTH, 0); frame->AddDecorator(decorator); FakeSignal *camera = ssi_create(FakeSignal, 0, true); camera->getOptions()->type = FakeSignal::SIGNAL::IMAGE_SSI; camera->getOptions()->sr = 1; ITransformable *camera_p = frame->AddProvider(camera, "fake"); camera->setLogLevel(SSI_LOG_LEVEL_DEBUG); frame->AddSensor(camera); SocketWriter *socket_writer_img = ssi_create (SocketWriter, 0, true); socket_writer_img->getOptions()->port = 4444; socket_writer_img->getOptions()->setHost("localhost"); socket_writer_img->getOptions()->type = Socket::TYPE::UDP; socket_writer_img->getOptions()->format = SocketWriter::Options::FORMAT::IMAGE; frame->AddConsumer(camera_p, socket_writer_img, "1"); SocketReader *socket_reader_img = ssi_create (SocketReader, 0, true); socket_reader_img->getOptions()->port = 4444; socket_reader_img->getOptions()->type = Socket::TYPE::UDP; socket_reader_img->getOptions()->format = SocketReader::Options::FORMAT::IMAGE; socket_reader_img->getOptions()->setSampleInfo(camera->getFormat()); ITransformable *socket_reader_img_p = frame->AddProvider(socket_reader_img, SSI_SOCKETREADER_PROVIDER_NAME); frame->AddSensor(socket_reader_img); VideoPainter *plot; plot = ssi_create_id(VideoPainter, 0, "plot"); frame->AddConsumer(camera_p, plot, "1"); plot = ssi_create_id(VideoPainter, 0, "plot"); frame->AddConsumer(socket_reader_img_p, plot, "1"); decorator->add("plot*", 1, 2, 0, 0, 320, 480); frame->Start(); frame->Wait(); frame->Stop(); frame->Clear(); #endif return true; }
bool ex_imgplot(void *args) { ITheFramework *frame = Factory::GetFramework(); Decorator *decorator = ssi_create(Decorator, 0, true); frame->AddDecorator(decorator); FakeSignal *video = 0; video = ssi_create(FakeSignal, 0, true); video->getOptions()->type = FakeSignal::SIGNAL::IMAGE_RANDOM_RGB; ITransformable *rgb_t = frame->AddProvider(video, "video"); frame->AddSensor(video); video = ssi_create(FakeSignal, 0, true); video->getOptions()->type = FakeSignal::SIGNAL::IMAGE_RANDOM_GRAY; ITransformable *gray_t = frame->AddProvider(video, "video"); frame->AddSensor(video); PythonImageConsumer *imgplot = 0; imgplot = ssi_create(PythonImageConsumer, 0, true); imgplot->getOptions()->setScript("ssi_imgplot"); imgplot->getOptions()->add("name", "RGB"); imgplot->getOptions()->add("x", 650); imgplot->getOptions()->add("y", 0); imgplot->getOptions()->add("width", 200); imgplot->getOptions()->add("height", 200); frame->AddConsumer(rgb_t, imgplot, "1"); imgplot = ssi_create(PythonImageConsumer, 0, true); imgplot->getOptions()->setScript("ssi_imgplot"); imgplot->getOptions()->add("name", "GRAY"); imgplot->getOptions()->add("x", 650); imgplot->getOptions()->add("y", 220); imgplot->getOptions()->add("width", 200); imgplot->getOptions()->add("height", 200); frame->AddConsumer(gray_t, imgplot, "1"); decorator->add("console", 0, 0, 650, 800); decorator->add("plot*", 650, 0, 400, 400); decorator->add("monitor*", 650, 400, 400, 400); frame->Start(); frame->Wait(); frame->Stop(); frame->Clear(); return true; }
int main() { // initialize a Componentt object Componentt* pComponent = new ConcreteComponent(); // initialize a Decorator object through the Componentt object. // so the decorator could dynamically add behavior for Componentt. Decorator* pDecorator = new ConcreteDecorator(pComponent); pDecorator->Operation(); delete pDecorator; system("pause"); return 0; }
int main(int argc, char **argv) { LoadData::LoadSuang(); Component* pComponentObj = new ConcreteComponent(); Decorator* pTongJi = new TongJi(pComponentObj); pTongJi->Operation(); std::cout<<"TongJi"<<std::endl; for(int i = 0; i < 10; i++) { S_suang data; GetOneShuang(data); data.Print(); } return 0; //Decorator *pDecoratorAOjb = new ConcreteDecoratorA(pComponentObj); /* pDecoratorAOjb->Operation(); std::cout<<"============================================="<<std::endl; Decorator *pDecoratorBOjb = new ConcreteDecoratorB(pComponentObj); pDecoratorBOjb->Operation(); std::cout<<"============================================="<<std::endl; */ //Decorator *pDecoratorBAOjb = new ConcreteDecoratorB(pDecoratorAOjb); //pDecoratorBAOjb->Operation(); //std::cout<<"============================================="<<std::endl; /* for(int i = 0; i < 10; i++) { std::cout<<GetOneNumber(1, 32)<<std::endl; } */ }
bool ex_event(void *args) { ITheFramework *frame = Factory::GetFramework(); ITheEventBoard *board = Factory::GetEventBoard(); Decorator *decorator = ssi_create(Decorator, 0, true); frame->AddDecorator(decorator); Mouse *mouse = ssi_create(Mouse, 0, true); mouse->getOptions()->mask = Mouse::LEFT; ITransformable *button_t = frame->AddProvider(mouse, SSI_MOUSE_BUTTON_PROVIDER_NAME); ITransformable *cursor_t = frame->AddProvider(mouse, SSI_MOUSE_CURSOR_PROVIDER_NAME); frame->AddSensor(mouse); PythonConsumer *py_send = ssi_create_id(PythonConsumer, 0, "pysend"); py_send->getOptions()->setScript("ssi_send"); ITransformable *input[] = { button_t, cursor_t }; frame->AddConsumer(2, input, py_send, "100ms"); board->RegisterSender(*py_send); PythonObject *py_listen = ssi_create_id(PythonObject, 0, "pylisten"); py_listen->getOptions()->setScript("ssi_listen"); board->RegisterListener(*py_listen, py_send->getEventAddress()); EventMonitor *monitor = ssi_create_id(EventMonitor, 0, "monitor"); board->RegisterListener(*monitor, 0, 10000u); SignalPainter *plot = 0; plot = ssi_create_id(SignalPainter, 0, "plot"); plot->getOptions()->setTitle("CURSOR"); frame->AddEventConsumer(cursor_t, plot, board, py_send->getEventAddress()); decorator->add("console", 0, 0, 650, 800); decorator->add("plot*", 650, 0, 400, 400); decorator->add("monitor*", 650, 400, 400, 400); board->Start(); frame->Start(); frame->Wait(); frame->Stop(); board->Stop(); frame->Clear(); board->Clear(); return true; }
void Window::calculateWindowRects( const yguipp::Point& position, const yguipp::Point& size, yguipp::Rect& screenRect, yguipp::Rect& clientRect ) { if (m_flags & yguipp::WINDOW_NO_BORDER) { m_screenRect = yguipp::Rect(size); m_screenRect += position; m_clientRect = m_screenRect; } else { Decorator* decorator = m_guiServer->getWindowManager()->getDecorator(); m_screenRect = yguipp::Rect(size + decorator->getSize()); m_screenRect += position; m_clientRect = yguipp::Rect(size); m_clientRect += position; m_clientRect += decorator->leftTop(); } }
bool Window::init( WinCreate* request ) { Decorator* decorator = m_guiServer->getWindowManager()->getDecorator(); m_order = request->m_order; m_flags = request->m_flags; m_title = reinterpret_cast<char*>(request + 1); calculateWindowRects(request->m_position, request->m_size, m_screenRect, m_clientRect); if ((m_screenRect.width() != 0) && (m_screenRect.height() != 0)) { m_bitmap = new Bitmap(m_screenRect.width(), m_screenRect.height(), yguipp::CS_RGB32); } m_decoratorData = decorator->createWindowData(); return true; }
bool MovingPixelsState::onMouseMove(Editor* editor, MouseMessage* msg) { ASSERT(m_pixelsMovement != NULL); // If there is a button pressed if (m_pixelsMovement->isDragging()) { // Auto-scroll gfx::Point mousePos = editor->autoScroll(msg, AutoScroll::MouseDir, false); // Get the position of the mouse in the sprite int x, y; editor->screenToEditor(mousePos.x, mousePos.y, &x, &y); // Get the customization for the pixels movement (snap to grid, angle snap, etc.). PixelsMovement::MoveModifier moveModifier = PixelsMovement::NormalMovement; if (editor->getCustomizationDelegate()->isSnapToGridKeyPressed()) moveModifier |= PixelsMovement::SnapToGridMovement; if (editor->getCustomizationDelegate()->isAngleSnapKeyPressed()) moveModifier |= PixelsMovement::AngleSnapMovement; if (editor->getCustomizationDelegate()->isMaintainAspectRatioKeyPressed()) moveModifier |= PixelsMovement::MaintainAspectRatioMovement; if (editor->getCustomizationDelegate()->isLockAxisKeyPressed()) moveModifier |= PixelsMovement::LockAxisMovement; // Invalidate handles Decorator* decorator = static_cast<Decorator*>(editor->decorator()); TransformHandles* transfHandles = decorator->getTransformHandles(editor); transfHandles->invalidateHandles(editor, m_pixelsMovement->getTransformation()); // Drag the image to that position m_pixelsMovement->moveImage(x, y, moveModifier); editor->updateStatusBar(); return true; } // Use StandbyState implementation return StandbyState::onMouseMove(editor, msg); }
int main(int argc, char const *argv[]) { //调用方法1 Component *com=new ConComponent(); //Decorator *dec=new ConDecorator(com); Decorator *ss= new ConDecoratorB(com); ss->Operation(); cout<<"--------------"<<endl; //调用方法2 Decorator *dd = new ConDecorator( new ConDecoratorB( new ConComponent())); dd->Operation(); delete ss; delete dd; return 0; }
Decorator* DecorAddOn::AllocateDecorator(Desktop* desktop, DrawingEngine* engine, BRect rect, const char* title, window_look look, uint32 flags) { if (!desktop->LockSingleWindow()) return NULL; DesktopSettings settings(desktop); Decorator* decorator; decorator = _AllocateDecorator(settings, rect, look, flags); desktop->UnlockSingleWindow(); if (!decorator) return NULL; decorator->SetDrawingEngine(engine); decorator->SetTitle(title); return decorator; }
bool ex_sensor(void *args) { ITheFramework *frame = Factory::GetFramework(); Decorator *decorator = ssi_create(Decorator, 0, true); frame->AddDecorator(decorator); PythonSensor *py_sensor = ssi_create(PythonSensor, 0, true); py_sensor->getOptions()->setScript("ssi_sensor"); py_sensor->getOptions()->block = 0.5; py_sensor->getOptions()->add("sr", "1000"); py_sensor->getOptions()->add("dim", "2"); ITransformable *sine_t = frame->AddProvider(py_sensor, "sine"); ITransformable *saw_t = frame->AddProvider(py_sensor, "saw"); frame->AddSensor(py_sensor); SignalPainter *plot = 0; plot = ssi_create_id(SignalPainter, 0, "plot"); plot->getOptions()->setTitle("SINE"); plot->getOptions()->size = 5; frame->AddConsumer(sine_t, plot, "0.5s"); plot = ssi_create_id(SignalPainter, 0, "plot"); plot->getOptions()->setTitle("SAW"); plot->getOptions()->size = 5; frame->AddConsumer(saw_t, plot, "0.5s"); decorator->add("console", 0, 0, 650, 800); decorator->add("plot*", 650, 0, 400, 400); decorator->add("monitor*", 650, 400, 400, 400); frame->Start(); frame->Wait(); frame->Stop(); frame->Clear(); return true; }
bool ex_mobile_events(void *arg) { Factory::RegisterDLL("ssiioput"); ITheFramework *frame = Factory::GetFramework(); Decorator *decorator = ssi_create (Decorator, 0, true); frame->AddDecorator(decorator); ITheEventBoard *board = Factory::GetEventBoard(); Websocket *websocket = ssi_create(Websocket, 0, true); websocket->getOptions()->setHttpRoot("mobile_browser_to_SSI"); board->RegisterSender(*websocket); board->RegisterListener(*websocket); EventMonitor *monitor = ssi_create_id (EventMonitor, 0, "monitor"); board->RegisterListener(*monitor); FileEventWriter *writer = ssi_create(FileEventWriter, 0, true); writer->getOptions()->setPath("sensor_data"); board->RegisterListener(*writer); decorator->add("console", 0, 0, 650, 800); decorator->add("plot*", 650, 0, 400, 400); decorator->add("monitor*", 650, 400, 400, 400); board->Start(); frame->Start(); frame->Wait(); frame->Stop(); frame->Clear(); return true; }
bool ex_events_string(void *arg) { ITheFramework *frame = Factory::GetFramework(); Decorator *decorator = ssi_create (Decorator, 0, true); frame->AddDecorator(decorator); ITheEventBoard *board = Factory::GetEventBoard(); ClockEventSender *eclock = ssi_create(ClockEventSender, 0, true); eclock->getOptions()->clock = 1000; eclock->getOptions()->empty = false; eclock->getOptions()->setString("test"); board->RegisterSender(*eclock); frame->AddRunnable(eclock); Websocket *websocket = ssi_create(Websocket, 0, true); board->RegisterSender(*websocket); board->RegisterListener(*websocket); EventMonitor *monitor = ssi_create_id (EventMonitor, 0, "monitor"); board->RegisterListener(*monitor); decorator->add("console", 0, 0, 650, 800); decorator->add("plot*", 650, 0, 400, 400); decorator->add("monitor*", 650, 400, 400, 400); board->Start(); frame->Start(); frame->Wait(); frame->Stop(); frame->Clear(); return true; }