Development/Tutorials/Plasma4/RubyApplet (ru): Difference between revisions

From KDE TechBase
m (Text replace - "<code ruby>" to "<syntaxhighlight lang="ruby">")
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Template:I18n/Language Navigation Bar|Development/Tutorials/Plasma/RubyApplet}}
 
==Abstract==
==Abstract==


Line 16: Line 16:
Для нашего апплета ВебБраузера, мы используем файл [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/plasma/examples/applets/webapplet/plasma-ruby-applet-web.desktop?view=markup plasma-ruby-applet-web.desktop], который содержит:
Для нашего апплета ВебБраузера, мы используем файл [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/plasma/examples/applets/webapplet/plasma-ruby-applet-web.desktop?view=markup plasma-ruby-applet-web.desktop], который содержит:


<code>
<syntaxhighlight lang="text">
[Desktop Entry]
[Desktop Entry]
Name=Ruby Web Browser
Name=Ruby Web Browser
Line 33: Line 33:
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-EnabledByDefault=true
X-KDE-PluginInfo-EnabledByDefault=true
</code>
</syntaxhighlight>


The important parts within those desktop service file are the referenced X-KDE-Library which will be loaded on request and is responsible for executing our with X-KDE-PluginKeyword defined Ruby scrip file. Our applet will be known by Plasma under the unique name "plasma-ruby-web-applet".
The important parts within those desktop service file are the referenced X-KDE-Library which will be loaded on request and is responsible for executing our with X-KDE-PluginKeyword defined Ruby scrip file. Our applet will be known by Plasma under the unique name "plasma-ruby-web-applet".
Line 118: Line 118:
   end
   end
end
end
</code>
</syntaxhighlight>


That was already all the code needed to implement our own webbrowser Applet using the Ruby language. The in this sample used [http://doc.trolltech.com/4.4/qtwebkit.html webbrowser] does provide additional functionality to use optional a full powered webbrowser or adopt it to your needings.
That was already all the code needed to implement our own webbrowser Applet using the Ruby language. The in this sample used [http://doc.trolltech.com/4.4/qtwebkit.html webbrowser] does provide additional functionality to use optional a full powered webbrowser or adopt it to your needings.
Line 126: Line 126:
To install the Applet the [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/plasma/examples/applets/webapplet/CMakeLists.txt?view=markup CMakeLists.txt] is used. It basically does copy the both files above to the right locations. Translated to command-line arguments it would look like;
To install the Applet the [http://websvn.kde.org/trunk/KDE/kdebindings/ruby/plasma/examples/applets/webapplet/CMakeLists.txt?view=markup CMakeLists.txt] is used. It basically does copy the both files above to the right locations. Translated to command-line arguments it would look like;


<code>
<syntaxhighlight lang="text">
sudo cp plasma-ruby-applet-web.desktop `kde4-config --install services`
sudo cp plasma-ruby-applet-web.desktop `kde4-config --install services`
sudo mkdir `kde4-config --install data`/plasma_ruby_web_applet/
sudo mkdir `kde4-config --install data`/plasma_ruby_web_applet/
sudo cp web_applet.rb `kde4-config --install data`/plasma_ruby_web_applet/
sudo cp web_applet.rb `kde4-config --install data`/plasma_ruby_web_applet/
</code>
</syntaxhighlight>


what installs the both files to the global installation directory to make hem available for all users on your sysem. If you like to have them accessible only from within one user, then just copy those both files to the users $KDEHOME (the command "kde4-config --localprefix" should provide you a hint where that may be).
what installs the both files to the global installation directory to make hem available for all users on your sysem. If you like to have them accessible only from within one user, then just copy those both files to the users $KDEHOME (the command "kde4-config --localprefix" should provide you a hint where that may be).
Line 136: Line 136:
To take a look at your applet or test it during development, you can;
To take a look at your applet or test it during development, you can;


<code>
<syntaxhighlight lang="text">
kbuildsycoca4
kbuildsycoca4
plasmoidviewer plasma-ruby-web-applet
plasmoidviewer plasma-ruby-web-applet
</code>
</syntaxhighlight>


where the kbuildsycoca4 does rebuild the desktop-cache to update changes done to the desktop file. The plasmoidviewer is a tool that allows you to start and view your applet outside of plasma.
where the kbuildsycoca4 does rebuild the desktop-cache to update changes done to the desktop file. The plasmoidviewer is a tool that allows you to start and view your applet outside of plasma.
[[Media:Example.ogg]]
[[Media:Example.ogg]]

Latest revision as of 23:27, 11 September 2014

Abstract

Этот туториал покажет как создать свой собственный Plasma Виджет/Апплет/Плазмоид используя скриптовый язык программирования Ruby.

Смотрите также:

Файл desktop

Файл desktop является входной точкой нашего апплета. Он определяет для чего этот апплет, как он должен быть загружен и управляться plasma.

Для нашего апплета ВебБраузера, мы используем файл plasma-ruby-applet-web.desktop, который содержит:

[Desktop Entry]
Name=Ruby Web Browser
Icon=internet-web-browser

Type=Service
ServiceTypes=Plasma/Applet

X-KDE-Library=krubypluginfactory
X-KDE-PluginKeyword=plasma_ruby_web_applet/web_applet.rb
X-KDE-PluginInfo-Name=plasma-ruby-web-applet

X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Category=Web
X-KDE-PluginInfo-Depends=QtRuby
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-EnabledByDefault=true

The important parts within those desktop service file are the referenced X-KDE-Library which will be loaded on request and is responsible for executing our with X-KDE-PluginKeyword defined Ruby scrip file. Our applet will be known by Plasma under the unique name "plasma-ruby-web-applet".

The Ruby Script

It follows the Ruby scripting code which does implement the whole functionality to display a webbrowser within the applet and to browse around those content.

The web_applet.rb ruby script looks like;

# import the plasma-applet functionality which we need to
# implement our own webbrowser applet.
require 'plasma_applet'

# We define an own module
module PlasmaRubyWebApplet

  # The WebApplet class does implement a Plasma::Applet.
  class WebApplet < Plasma::Applet

    # The both slots used by our applet.
    slots 'load(QUrl)',
          'loadFinished(bool)'

    # Constructor for our WebApplet class.
    def initialize(parent, args)
      super
    end

    # On initialization this method will be called by plasma. Here we
    # are able to do expensive initialization work to show something
    # within our applet.
    def init
      # Let's start with a nice default size.
      resize(600, 400)

      # Create the Browser widget which will display the content
      # of webpages.
      @page = Plasma::WebContent.new(self)
      @page.page = Qt::WebPage.new(@page)
      @page.page.linkDelegationPolicy = Qt::WebPage::DelegateAllLinks
      @page.page.settings.setAttribute(
        Qt::WebSettings::LinksIncludedInFocusChain, true)

      # Connect signals the webbrowser provides with own functions.
      connect(@page, SIGNAL('loadFinished(bool)'),
              self, SLOT('loadFinished(bool)'))
      connect(@page.page, SIGNAL('linkClicked(QUrl)'),
              self, SLOT('load(QUrl)'))

      # Start browsing some webpage
      @page.url = Qt::Url.new("http://dot.kde.org/")
    end

    # This method will be called once the user clicks on a link.
    # We just load the defined URL-address and let the
    # webbrowser-page display the content.
    def load(url)
      puts "Loading #{url.toString}"
      @page.url = url
    end

    # This method will be called once loading a page finished.
    def loadFinished(success)
      puts "page loaded #{@page.page.currentFrame.url.toString}"
    end

    # This method will be called each time a constraint changed. the
    # for us most interesting constraints are;
    # * LocationConstraint if the location of the applet changed
    # * ScreenConstraint if the screen on which the applet is located
    #   on changed
    # * SizeConstraint if the size of the applet changed
    # * ImmutableConstraint if the applet got locked/unlocked
    def constraintsEvent(constraints)
      if constraints.to_i & Plasma::SizeConstraint.to_i
        # if the size of the Applet changed, then resize also the
        # webbrowser.
        @page.resize(size())
      end
    end

  end
end

That was already all the code needed to implement our own webbrowser Applet using the Ruby language. The in this sample used webbrowser does provide additional functionality to use optional a full powered webbrowser or adopt it to your needings.

Install and test the Applet

To install the Applet the CMakeLists.txt is used. It basically does copy the both files above to the right locations. Translated to command-line arguments it would look like;

sudo cp plasma-ruby-applet-web.desktop `kde4-config --install services`
sudo mkdir `kde4-config --install data`/plasma_ruby_web_applet/
sudo cp web_applet.rb `kde4-config --install data`/plasma_ruby_web_applet/

what installs the both files to the global installation directory to make hem available for all users on your sysem. If you like to have them accessible only from within one user, then just copy those both files to the users $KDEHOME (the command "kde4-config --localprefix" should provide you a hint where that may be).

To take a look at your applet or test it during development, you can;

kbuildsycoca4
plasmoidviewer plasma-ruby-web-applet

where the kbuildsycoca4 does rebuild the desktop-cache to update changes done to the desktop file. The plasmoidviewer is a tool that allows you to start and view your applet outside of plasma. Media:Example.ogg