예제 #1
0
파일: main.cpp 프로젝트: chenxin0123/Demos
///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;
}
예제 #2
0
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_);
    }
}
예제 #3
0
파일: Main.cpp 프로젝트: hcmlab/mobileSSI
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;
}
예제 #5
0
파일: Main.cpp 프로젝트: hcmlab/mobileSSI
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;
}
예제 #6
0
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;
}
예제 #7
0
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);
}
예제 #8
0
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();	
}
예제 #9
0
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;
}
예제 #10
0
파일: Main.cpp 프로젝트: hcmlab/mobileSSI
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;

}
예제 #11
0
파일: decorator.cpp 프로젝트: DavidL92/Try
int main()
{
    Component *pCom = new ConcreteComponent();
    Decorator *pDec = new ConcreteDecoratorA(pCom);
    pDec->operation();

    pDec = new ConcreteDecoratorB(pCom);
    pDec->operation();
}
예제 #12
0
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();	
}
예제 #13
0
파일: Main.cpp 프로젝트: hcmlab/mobileSSI
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;
}
예제 #14
0
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;
}
예제 #15
0
파일: main.cpp 프로젝트: zhuliting/code
int main()
{
    // 初始化一个Component对象
    Component* pComponent = new ConcreateComponent();
    // 采用这个Component对象去初始化一个Decorator对象,
    // 这样就可以为这个Component对象动态添加职责
    Decorator* pDecorator = new ConcreateDecorator(pComponent);
    pDecorator->Operation();

    delete pDecorator;
    return 0;
}
예제 #16
0
파일: Main.cpp 프로젝트: hcmlab/mobileSSI
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;
}
예제 #17
0
파일: Main.cpp 프로젝트: hcmlab/mobileSSI
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;
}
예제 #18
0
파일: Main.cpp 프로젝트: hcmlab/mobileSSI
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;
}
예제 #19
0
파일: Main.cpp 프로젝트: hcmlab/mobileSSI
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;
}
예제 #20
0
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; 
}
예제 #21
0
파일: hehe.cpp 프로젝트: liujiejie/hehe
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;
	} */
	

	
} 
예제 #22
0
파일: Main.cpp 프로젝트: hcmlab/mobileSSI
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;
}
예제 #23
0
파일: window.cpp 프로젝트: csko/yaosp
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();
    }
}
예제 #24
0
파일: window.cpp 프로젝트: csko/yaosp
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;
}
예제 #25
0
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);
}
예제 #26
0
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;
}
예제 #27
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;
}
예제 #28
0
파일: Main.cpp 프로젝트: hcmlab/mobileSSI
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;
}
예제 #29
0
파일: Main.cpp 프로젝트: hcmlab/mobileSSI
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;
}
예제 #30
0
파일: Main.cpp 프로젝트: hcmlab/mobileSSI
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;
}