23 декабря 2010 г.

Геттеры и сеттеры в Ruby

Пример работы сеттеров и геттеров в Ruby.
attr_reader  - реализует только геттер для заданного поля
attr_accessor - реализует геттер и сеттер
В примере приведу только на чтение/ запись и чтение (на запись можно сделать по аналогии):
#Пример работы Геттеров и Сеттеров в Ruby
class Setter_and_getter
# Объявляю геттеры и сеттеры
 attr_reader :var_readOnly #Доступ только для чтения
 attr_accessor :var_readWrite #Доступ чтение/записи
 def setData
  @var_readOnly="set" # Устанавливаю значение
  @var_readWrite="r/w";
  puts self.var_readOnly, self.var_readWrite #Проверяю
 end
end
testObj=Setter_and_getter.new
testObj.setData
puts "_________"
#testObj.var_readOnly="fff"; # Получаю ошибку при попытке записи
testObj.var_readWrite="read and write"
puts "I have: #{testObj.var_readOnly}, #{testObj.var_readWrite}" # "Считываю значение"

19 декабря 2010 г.

Добавляем свое меню в Microsoft Bing Maps Silverlight Control

Задача очень проста, создать меню которое будет отображаться на карте.

Меню добавляется в отдельный слой на карте, xaml код:

<m:Map NavigationVisibility="Visible">
  <m:Map.CredentialsProvider>
    <m:ApplicationIdCredentialsProvider ApplicationId="{StaticResource bmk}"/>
  </m:Map.CredentialsProvider>
  <m:Map.Children>
    <m:MapLayer x:Name="ControlLayer"><!-- Собственно меню, вот оно -->
      <Border CornerRadius="5" Width="100" HorizontalAlignment="Right" VerticalAlignment="Top" Background="Black" Opacity="0.8">
        <StackPanel Orientation="Vertical" Margin="5" Height="95">
        <RadioButton Content="Стандарт" GroupName="modeSelection" Foreground="White" IsChecked="True" Name="mode0" Checked="RadioButton_Checked"/>
        <RadioButton Content="Метки" GroupName="modeSelection" Foreground="White" Checked="RadioButton_Checked" Name="mode1"/>
        <RadioButton Content="Редактор" GroupName="modeSelection" Foreground="White" Checked="RadioButton_Checked" Name="mode2"/>
        <RadioButton Content="Навигация" GroupName="modeSelection" Foreground="White" Checked="RadioButton_Checked" Name="mode3"/>
        <StackPanel Orientation="Vertical" x:Name="AnotherControls" Visibility="Collapsed">
          <Button Content="Color" x:Name="colorChange" Click="currentPoint_Click" />
          <Button Content="Delete" x:Name="delComponent" Click="redoLineButton_Click"/>
        </StackPanel>
        <Button Content=">" x:Name="mapMenu"/><!-- Кнопка с помощью которой мы будем "раздвигать" меню -->
        </StackPanel>
      </Border>
    </m:MapLayer>
  </m:Map.Children>
</m:Map>

* This source code was highlighted with Source Code Highlighter.

Код на C#, который может пригодится:

//Обрабатываем расширения меню, которое расположенно в слое на карте
this.mapMenu.Click+=(sen,ev)=>{
  Button currentButton = sen as Button;
  //Если дополнительные пункты меню скрыты => открываем
  if (this.AnotherControls.Visibility == Visibility.Collapsed)
  {
    (currentButton.Parent as Panel).Height += 40;
    this.AnotherControls.Visibility = Visibility.Visible;
    currentButton.Content = "<";
  }
  else//Иначе скрываем
  {
    this.AnotherControls.Visibility = Visibility.Collapsed;
    (currentButton.Parent as Panel).Height -= 40;
    currentButton.Content = ">";
  }
};


* This source code was highlighted with Source Code Highlighter.