示例#1
0
        public override bool Load()
        {
            dataBook = (DataBook)GetDataBook(mainWindow);

            widget         = new Infobar(dataBook);
            widget.Visible = true;

            Services.UI.Info = widget;

            ((VBox)mainWindow.Child).PackEnd(widget, false, false, 0);

            AddMenuItems(uiManager);

            dataBook.PageAdded  += new DataView.DataViewEventHandler(OnDataViewAdded);
            dataBook.Removed    += new RemovedHandler(OnDataViewRemoved);
            dataBook.SwitchPage += new SwitchPageHandler(OnSwitchPage);

            PreferencesChangedHandler handler = new PreferencesChangedHandler(OnPreferencesChanged);

            Preferences.Proxy.Subscribe("View.Statusbar.Show", "ib1", handler);
            Preferences.Proxy.Subscribe("View.Statusbar.Selection", "ib1", handler);
            Preferences.Proxy.Subscribe("View.Statusbar.Overwrite", "ib1", handler);
            Preferences.Proxy.Subscribe("View.Statusbar.Offset", "ib1", handler);

            loaded = true;
            return(true);
        }
示例#2
0
文件: DataView.cs 项目: switsys/bless
        ///<summary>Create a DataView</summary>
        public DataView()
        {
            dvControl = new DataViewControl(this);
            dvDisplay = new DataViewDisplay(this);

            dvDisplay.Control = dvControl;
            dvControl.Display = dvDisplay;

            // initialize clipdata buffer
            // and clipboard
            clipdata  = new byte[0];
            clipboard = Gtk.Clipboard.Get(Gdk.Atom.Intern("CLIPBOARD", true));

            // initialize undo/redo cursor offset stacks
            cursorUndoDeque = new Deque <CursorState>();
            cursorRedoDeque = new Deque <CursorState>();

            prefID = "dv" + this.GetHashCode().ToString();
            PreferencesChangedHandler handler = new PreferencesChangedHandler(OnPreferencesChanged);

            Preferences.Proxy.Subscribe("Undo.Limited", prefID, handler);
            Preferences.Proxy.Subscribe("Undo.Actions", prefID, handler);
            Preferences.Proxy.Subscribe("Highlight.PatternMatch", prefID, handler);
            Preferences.Proxy.Subscribe("ByteBuffer.TempDir", prefID, handler);
        }
        public void Subscribe(string pref, string id, PreferencesChangedHandler handler)
        {
            if (!prefSubscribers.Contains(pref))
                prefSubscribers[pref] = new Hashtable();

            (prefSubscribers[pref] as Hashtable).Add(id, handler);
        }
示例#4
0
        public void Subscribe(string pref, string id, PreferencesChangedHandler handler)
        {
            if (!prefSubscribers.Contains(pref))
            {
                prefSubscribers[pref] = new Hashtable();
            }

            (prefSubscribers[pref] as Hashtable).Add(id, handler);
        }
        public void Subscribe(string pref, string id, PreferencesChangedHandler handler)
        {
            if (!prefSubscribers.Contains(pref))
            {
                prefSubscribers[pref] = new Hashtable();
            }

            Hashtable hashtable = prefSubscribers[pref] as Hashtable;

            if (hashtable != null)
            {
                hashtable.Add(id, handler);
            }
        }
        public void Change(string pref, string val, string id)
        {
            if (_enable == false)
            {
                return;
            }

            if (currentlyHandling.Contains(pref))
            {
                return;
            }

            if (id != "__Preferences__")
            {
                prefs.SetWithoutNotify(pref, val);
            }

            if (!prefSubscribers.Contains(pref))
            {
                return;
            }

            currentlyHandling.Add(pref, null);

            Hashtable subscribers = prefSubscribers[pref] as Hashtable;

            if (subscribers != null)
            {
                foreach (DictionaryEntry subscriber in subscribers)
                {
                    if ((subscriber.Key as string) != id)
                    {
                        PreferencesChangedHandler preferencesChangedHandler = subscriber.Value as PreferencesChangedHandler;
                        if (preferencesChangedHandler != null)
                        {
                            preferencesChangedHandler(prefs);
                        }
                    }
                }
            }

            currentlyHandling.Remove(pref);
        }
示例#7
0
        public Infobar(DataBook db)
        {
            dataBook = db;

            MessageLabel           = new Label();
            MessageLabel.Ellipsize = Pango.EllipsizeMode.End;
            MessageLabel.SetAlignment(0.0f, 0.5f);
            OffsetLabel    = new Label();
            SelectionLabel = new Label();
            OverwriteLabel = new Label();

            EventBox OffsetEB = new EventBox();

            OffsetEB.Add(OffsetLabel);
            OffsetEB.ButtonPressEvent += ChangeNumberBase;

            EventBox SelectionEB = new EventBox();

            SelectionEB.Add(SelectionLabel);
            SelectionEB.ButtonPressEvent += ChangeNumberBase;

            EventBox OverwriteEB = new EventBox();

            OverwriteEB.Add(OverwriteLabel);
            OverwriteEB.ButtonPressEvent += OnOverwriteLabelPressed;

            this.PackStart(MessageLabel, true, true, 20);
            this.PackStart(OffsetEB, false, false, 20);
            this.PackStart(SelectionEB, false, false, 20);
            this.PackStart(OverwriteEB, false, false, 20);

            this.NumberBase = 16;

            PreferencesChangedHandler handler = new PreferencesChangedHandler(OnPreferencesChanged);

            Preferences.Proxy.Subscribe("View.Statusbar.Show", "ib2", handler);
            Preferences.Proxy.Subscribe("View.Statusbar.Selection", "ib2", handler);
            Preferences.Proxy.Subscribe("View.Statusbar.Overwrite", "ib2", handler);
            Preferences.Proxy.Subscribe("View.Statusbar.Offset", "ib2", handler);

            this.ShowAll();
        }
示例#8
0
    public BlessMain(string[] args)
    {
        Application.Init();

        //
        Catalog.Init(ConfigureDefines.GETTEXT_PACKAGE, ConfigureDefines.LOCALE_DIR);

        // load main window from glade XML
        Glade.XML gxml = new Glade.XML(FileResourcePath.GetDataPath("bless.glade"), "MainWindow", "bless");
        gxml.Autoconnect(this);

        // set the application icon
        MainWindow.Icon = new Gdk.Pixbuf(FileResourcePath.GetDataPath("bless-48x48.png"));

        string blessConfDir = FileResourcePath.GetUserPath();

        // make sure local configuration directory exists
        try {
            if (!Directory.Exists(blessConfDir))
            {
                Directory.CreateDirectory(blessConfDir);
            }
        }
        catch (Exception ex) {
            ErrorAlert ea = new ErrorAlert(Catalog.GetString("Cannot create user configuration directory"), ex.Message + Catalog.GetString("\n\nSome features of Bless may not work properly."), MainWindow);
            ea.Run();
            ea.Destroy();
        }

        Preferences.Proxy.Enable = false;
        // load default preferences
        Preferences.Default.Load(FileResourcePath.GetDataPath("default-preferences.xml"));
        Preferences.Default["Default.Layout.File"] = FileResourcePath.GetDataPath("bless-default.layout");

        // load user preferences
        LoadPreferences(Path.Combine(blessConfDir, "preferences.xml"));
        Preferences.Instance.AutoSavePath = Path.Combine(blessConfDir, "preferences.xml");

        // add the (empty) Menubar and toolbar
        uiManager = new UIManager();
        MainWindow.AddAccelGroup(uiManager.AccelGroup);
        uiManager.AddUiFromString(uiXml);

        actionEntries = new ActionEntry[] {
            new ActionEntry("File", null, Catalog.GetString("_File"), null, null, null),
            new ActionEntry("Edit", null, Catalog.GetString("_Edit"), null, null, null),
            new ActionEntry("View", null, Catalog.GetString("_View"), null, null, null),
            new ActionEntry("Search", null, Catalog.GetString("_Search"), null, null, null),
            new ActionEntry("Tools", null, Catalog.GetString("_Tools"), null, null, null),
            new ActionEntry("Help", null, Catalog.GetString("_Help"), null, null, null)
        };

        ActionGroup group = new ActionGroup("MainMenuActions");

        group.Add(actionEntries);
        group.Add(new ToggleActionEntry[] {
            new ToggleActionEntry("ToolbarAction", null, Catalog.GetString("Toolbar"), null, null,
                                  new EventHandler(OnViewToolbarToggled), false)
        });

        uiManager.InsertActionGroup(group, 0);

        Widget mb = uiManager.GetWidget("/menubar");

        MainVBox.PackStart(mb, false, false, 0);
        MainVBox.ReorderChild(mb, 0);
        Widget tb = uiManager.GetWidget("/toolbar");

        tb.Visible = false;
        MainVBox.PackStart(tb, false, false, 0);
        MainVBox.ReorderChild(tb, 1);

        // create the DataBook
        dataBook             = new DataBook();
        dataBook.PageAdded  += new DataView.DataViewEventHandler(OnDataViewAdded);
        dataBook.Removed    += new RemovedHandler(OnDataViewRemoved);
        dataBook.SwitchPage += new SwitchPageHandler(OnSwitchPage);

        DataViewBox.PackStart(dataBook);


        // create the widget groups that hold utility widgets
        WidgetGroup widgetGroup0     = new WidgetGroup();
        WidgetGroup widgetGroup1     = new WidgetGroup();
        WidgetGroup sideWidgetGroup0 = new WidgetGroup();
        WidgetGroup sideWidgetGroup1 = new WidgetGroup();

        widgetGroup0.Show();
        widgetGroup1.Show();
        sideWidgetGroup0.Show();
        sideWidgetGroup1.Show();

        MainVBox.PackStart(widgetGroup0, false, false, 0);
        MainVBox.ReorderChild(widgetGroup0, 3);
        MainVBox.PackStart(widgetGroup1, false, false, 0);
        MainVBox.ReorderChild(widgetGroup1, 4);

        DataViewBox.PackStart(sideWidgetGroup0, false, false, 0);
        DataViewBox.ReorderChild(sideWidgetGroup0, 0);
        DataViewBox.PackEnd(sideWidgetGroup1, false, false, 0);
        //MainVBox.ReorderChild(widgetGroup1, 4);


        Services.File    = new FileService(dataBook, MainWindow);
        Services.Session = new SessionService(dataBook, MainWindow);
        Services.UI      = new UIService(uiManager);
        //Services.Info=new InfoService(infobar);

        // Add area plugins
        PluginManager.AddForType(typeof(AreaPlugin), new object[0]);
        PluginManager areaPlugins = PluginManager.GetForType(typeof(AreaPlugin));

        Area.InitiatePluginTable();
        foreach (AreaPlugin p in areaPlugins.Plugins)
        {
            Area.AddFactoryItem(p.Name, p.CreateArea);
        }

        // Load GUI plugins
        PluginManager.AddForType(typeof(GuiPlugin), new object[] { MainWindow, uiManager });
        PluginManager guiPlugins = PluginManager.GetForType(typeof(GuiPlugin));

        foreach (Plugin p in guiPlugins.Plugins)
        {
            guiPlugins.LoadPlugin(p);
        }

        // load recent file history
        try {
            History.Instance.Load(Path.Combine(blessConfDir, "history.xml"));
        }
        catch (Exception e) {
            System.Console.WriteLine(e.Message);
        }

        // if user specified files on the command line
        // try to load them
        if (args.Length > 0)
        {
            Services.File.LoadFiles(args);
        }
        else if (Preferences.Instance["Session.LoadPrevious"] == "True")
        {
            bool   loadIt          = true;
            string prevSessionFile = Path.Combine(blessConfDir, "last.session");

            if (Preferences.Instance["Session.AskBeforeLoading"] == "True" &&
                File.Exists(prevSessionFile))
            {
                MessageDialog md = new MessageDialog(MainWindow,
                                                     DialogFlags.DestroyWithParent,
                                                     MessageType.Question,
                                                     ButtonsType.YesNo, Catalog.GetString("Do you want to load your previous session?"));

                ResponseType result = (ResponseType)md.Run();
                md.Destroy();

                if (result == ResponseType.Yes)
                {
                    loadIt = true;
                }
                else
                {
                    loadIt = false;
                }
            }
            // try to load previous session
            if (loadIt)
            {
                Services.Session.Load(prevSessionFile);
            }
        }

        // if nothing has been loaded, create a new file
        if (dataBook.NPages == 0)
        {
            ByteBuffer bb = Services.File.NewFile();

            // create and setup a  DataView
            DataView dv = Services.File.CreateDataView(bb);

            // append the DataView to the DataBook
            dataBook.AppendView(dv, new CloseViewDelegate(Services.File.CloseFile), Path.GetFileName(bb.Filename));
        }

        PreferencesChangedHandler handler = new PreferencesChangedHandler(OnPreferencesChanged);

        Preferences.Proxy.Subscribe("View.Toolbar.Show", "mainwin", handler);


        // register drag and drop of files
        MainWindow.DragDataReceived += OnDragDataReceived;
        Gtk.Drag.DestSet(MainWindow, DestDefaults.Motion | DestDefaults.Drop, dropTargets, Gdk.DragAction.Copy | Gdk.DragAction.Move);

        DataViewBox.ShowAll();

        Preferences.Proxy.Enable = true;
        // fire the preferences changed event
        // so things are setup according to the preferences
        Preferences.Proxy.NotifyAll();

        Application.Run();
    }
示例#9
0
        public Infobar(DataBook db)
        {
            dataBook = db;

            // create bars
            MessageStatusbar = new Statusbar();

            OffsetStatusbar = new Statusbar();
            OffsetStatusbar.WidthRequest = 270;

            SelectionStatusbar = new Statusbar();
            SelectionStatusbar.WidthRequest = 270;

            OverwriteStatusbar = new Statusbar();
            OverwriteStatusbar.WidthRequest = 60;

            DummyStatusbar         = new Statusbar();
            DummyStatusbar.Visible = false;

            EventBox OffsetEB = new EventBox();

            OffsetEB.Add(OffsetStatusbar);
            OffsetEB.ButtonPressEvent += ChangeNumberBase;

            EventBox SelectionEB = new EventBox();

            SelectionEB.Add(SelectionStatusbar);
            SelectionEB.ButtonPressEvent += ChangeNumberBase;

            EventBox OverwriteEB = new EventBox();

            OverwriteEB.Add(OverwriteStatusbar);
            OverwriteEB.ButtonPressEvent += OnOverwriteStatusbarPressed;

            // create hbox to put bars in
            HBox StatusHBox = new HBox();

            StatusHBox.PackStart(DummyStatusbar, false, true, 0);
            StatusHBox.PackStart(OffsetEB, false, true, 0);
            StatusHBox.PackStart(SelectionEB, false, true, 0);
            StatusHBox.PackStart(OverwriteEB, false, true, 0);

            // align the hbox
            Alignment StatusAlignment = new Alignment(1.0f, 0.5f, 0.0f, 1.0f);

            StatusAlignment.Add(StatusHBox);

            this.Pack1(MessageStatusbar, true, true);
            this.Pack2(StatusAlignment, false, true);

            this.NumberBase = 16;

            PreferencesChangedHandler handler = new PreferencesChangedHandler(OnPreferencesChanged);

            Preferences.Proxy.Subscribe("View.Statusbar.Show", "ib2", handler);
            Preferences.Proxy.Subscribe("View.Statusbar.Selection", "ib2", handler);
            Preferences.Proxy.Subscribe("View.Statusbar.Overwrite", "ib2", handler);
            Preferences.Proxy.Subscribe("View.Statusbar.Offset", "ib2", handler);

            this.MapEvent += OnMapEvent;
            this.ShowAll();
        }