Index: samples/github/ios/github/MainController.mm |
diff --git a/samples/github/ios/github/MainController.mm b/samples/github/ios/github/MainController.mm |
deleted file mode 100644 |
index 35009c820f9eb4bfe3b433163e8eb2939bacbb2e..0000000000000000000000000000000000000000 |
--- a/samples/github/ios/github/MainController.mm |
+++ /dev/null |
@@ -1,212 +0,0 @@ |
-// Copyright (c) 2015, the Dartino project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE.md file. |
- |
-#import "MainController.h" |
-#import "CommitListPresenter.h" |
- |
-#import "ImmiSamples/DrawerPresenter.h" |
-#import "ImmiSamples/LoginPresenter.h" |
-#import "ImmiSamples/MenuPresenter.h" |
-#import "ImmiSamples/SlidingWindowPresenter.h" |
- |
-#import "github_mock.h" |
- |
-@interface AnyNodePresenter : NSObject <ViewPresenter, NodePresenter> |
-@property CommitListPresenter* commitListPresenter; |
-@property LoginPresenter* loginPresenter; |
-@property MenuPresenter* menuPresenter; |
-@property id<ViewPresenter> currentPresenter; |
-- (id)init:(UIStoryboard*)storyboard; |
-@end |
- |
-@interface LeftPresenter : NSObject <ViewPresenter, NodePresenter> |
-@property MenuPresenter* presenter; |
-- (id)init:(UIStoryboard*)storyboard; |
-@end |
- |
-@interface MainController () <NodePresenter, DrawerPresenter> |
-@property ImmiRoot* immiRoot; |
-@property DrawerPresenter* drawerPresenter; |
-@property AnyNodePresenter* centerPresenter; |
-@property AnyNodePresenter* leftPresenter; |
-@property AnyNodePresenter* rightPresenter; |
-@end |
- |
-@implementation AnyNodePresenter |
- |
-- (id)init:(UIStoryboard*)storyboard { |
- self.commitListPresenter = |
- [storyboard instantiateViewControllerWithIdentifier:@"CommitListPresenter"]; |
- self.loginPresenter = |
- [storyboard instantiateViewControllerWithIdentifier:@"LoginPresenter"]; |
- self.menuPresenter = |
- [storyboard instantiateViewControllerWithIdentifier:@"MenuPresenter"]; |
- return self; |
-} |
- |
-- (void)presentNode:(Node*)node { |
- if ([node is:SlidingWindowNode.class]) { |
- self.currentPresenter = self.commitListPresenter; |
- [self.commitListPresenter |
- presentSlidingWindow:[node as:SlidingWindowNode.class]]; |
- } else if ([node is:LoginNode.class]) { |
- self.currentPresenter = self.loginPresenter; |
- [self.loginPresenter presentLogin:[node as:LoginNode.class]]; |
- } else if ([node is:MenuNode.class]) { |
- self.currentPresenter = self.menuPresenter; |
- [self.menuPresenter presentMenu:[node as:MenuNode.class]]; |
- } else { |
- abort(); |
- } |
-} |
- |
-- (void)patchNode:(NodePatch*)patch { |
- if ([patch is:SlidingWindowPatch.class]) { |
- SlidingWindowPatch* p = [patch as:SlidingWindowPatch.class]; |
- [p applyTo:self.commitListPresenter]; |
- } else if ([patch is:LoginPatch.class]) { |
- LoginPatch* p = [patch as:LoginPatch.class]; |
- [p applyTo:self.loginPresenter]; |
- } else if ([patch is:MenuPatch.class]) { |
- MenuPatch* p = [patch as:MenuPatch.class]; |
- [p applyTo:self.menuPresenter]; |
- } else { |
- abort(); |
- } |
-} |
- |
-- (UIViewController*)viewController { |
- return [self.currentPresenter viewController]; |
-} |
- |
-@end |
- |
-@implementation MainController |
- |
-- (void)viewDidLoad { |
- [super viewDidLoad]; |
- |
- // Ensure that the github mock server is running. |
- // TODO(zerny): Dynamically configure the http port. |
- GithubMockServer::start(8321); |
- |
- UIStoryboard* storyboard = |
- [UIStoryboard storyboardWithName:@"Main" bundle:nil]; |
- |
- self.centerPresenter = [[AnyNodePresenter alloc] init:storyboard]; |
- self.leftPresenter = [[AnyNodePresenter alloc] init:storyboard]; |
- self.rightPresenter = nil; |
- |
- // Create a drawer presenter do to the interpretation work. |
- self.drawerPresenter = |
- [[DrawerPresenter alloc] initWithCenterPresenter:self.centerPresenter |
- leftPresenter:self.leftPresenter |
- rightPresenter:self.rightPresenter]; |
- |
- // Create the IMMI service. |
- ImmiService* immi = [[ImmiService alloc] init]; |
- |
- // Register a root presenter for the DrawerPresenter root. |
- self.immiRoot = [immi registerPresenter:self forName:@"DrawerPresenter"]; |
- |
- // Render the initial graph. |
- [self.immiRoot refresh]; |
- |
- // Setup some drawer properties. |
- self.shouldStretchDrawer = NO; |
- |
- self.openDrawerGestureModeMask = MMOpenDrawerGestureModePanningCenterView; |
- |
- self.closeDrawerGestureModeMask = MMCloseDrawerGestureModePanningDrawerView | |
- MMCloseDrawerGestureModePanningCenterView | |
- MMCloseDrawerGestureModeTapCenterView; |
- |
- // Monitor when the side panes close. |
- [self setDrawerVisualStateBlock:^(MMDrawerController* mySelf, |
- MMDrawerSide drawerSide, |
- CGFloat percentVisible) { |
- MainController* mainController = (MainController*)mySelf; |
- if (percentVisible == 0.0 && mainController.openSide == drawerSide) { |
- [mainController setVisibility:drawerSide visible:false]; |
- } |
- }]; |
-} |
- |
-- (void)presentNode:(Node*)node { |
- [self presentDrawer:[node as:DrawerNode.class]]; |
-} |
- |
-- (void)patchNode:(NodePatch*)patch { |
- [self patchDrawer:[patch as:DrawerPatch.class]]; |
-} |
- |
-- (void)presentDrawer:(DrawerNode*)node { |
- [self.drawerPresenter presentDrawer:node]; |
- [self performSelectorOnMainThread:@selector(presentOnMainThread:) |
- withObject:node |
- waitUntilDone:NO]; |
-} |
- |
-- (void)presentOnMainThread:(DrawerNode*)node { |
- self.centerViewController = |
- [self.drawerPresenter.centerPresenter viewController]; |
- [self.drawerPresenter addDrawerButtons:self.centerViewController |
- leftTitle:@"menu"]; |
- self.leftDrawerViewController = |
- [self.drawerPresenter.leftPresenter viewController]; |
- self.rightDrawerViewController = |
- [self.drawerPresenter.rightPresenter viewController]; |
-} |
- |
-- (void)patchDrawer:(DrawerPatch*)patch { |
- [self.drawerPresenter patchDrawer:patch]; |
- [self performSelectorOnMainThread:@selector(patchOnMainThread:) |
- withObject:patch |
- waitUntilDone:NO]; |
-} |
- |
-- (void)patchOnMainThread:(DrawerPatch*)patch { |
- if (patch.center.changed) { |
- self.centerViewController = |
- [self.drawerPresenter.centerPresenter viewController]; |
- if (patch.center.replaced) { |
- [self.drawerPresenter addDrawerButtons:self.centerViewController]; |
- } |
- } |
- if (patch.left.changed) { |
- self.leftDrawerViewController = |
- [self.drawerPresenter.leftPresenter viewController]; |
- } |
- if (patch.right.changed) { |
- self.rightDrawerViewController = |
- [self.drawerPresenter.rightPresenter viewController]; |
- } |
- if (patch.leftVisible.changed && patch.leftVisible.current) { |
- [self openPane:MMDrawerSideLeft]; |
- } else if (patch.rightVisible.changed && patch.rightVisible.current) { |
- [self openPane:MMDrawerSideRight]; |
- } else if (patch.leftVisible.changed || patch.rightVisible.changed) { |
- [self closeDrawerAnimated:YES completion:nil]; |
- } |
-} |
- |
-- (void)openPane:(MMDrawerSide)side { |
- if (self.openSide == side) return; |
- [self openDrawerSide:side animated:YES completion:nil]; |
-} |
- |
-- (void)prepareToPresentDrawer:(MMDrawerSide)drawer animated:(BOOL)animated { |
- [super prepareToPresentDrawer:drawer animated:animated]; |
- [self setVisibility:drawer visible:true]; |
-} |
- |
-- (void)setVisibility:(MMDrawerSide)side visible:(bool)visible { |
- if (side == MMDrawerSideLeft) { |
- self.drawerPresenter.leftVisible = visible; |
- } else if (side == MMDrawerSideRight) { |
- self.drawerPresenter.rightVisible = visible; |
- } |
-} |
- |
-@end |