Aklımda Kalası Kelimeler

* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur

26 Nisan 2013 Cuma

Select2 içinde bootstrap dropdown düğmelerin görüntülenmesi.

Yapmak istediğimiz:

Bootstrap açılır düğmenin html yapısı:
<div class="btn-group">
    <button class="btn btn-mini">Action</button>
    <button class="btn btn-mini dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>
    <ul class="dropdown-menu">
        <li><a href="#">Action</a></li>
        <li><a href="#">Another action</a></li>
        <li><a href="#">Something else here</a></li>
        <li class="divider"></li>
        <li><a href="#">Separated link</a></li>
    </ul>
</div>

Önceki yazımda jQuery nesnelerindeki trigger, on olaylarını yüklü jQuery'e iliştirme olayını okuyabilirsiniz:
var obj = $({});
jQuery["on"] = function () {
    obj["on"].apply(obj, arguments);
};
jQuery["trigger"] = function () {
    obj["trigger"].apply(obj, arguments);
};

Bunu yaptık çünkü Select2 içinde bir event oluşturup her arama sonucunda bir eleman seçtiğinizde tetiklenmesini istiyoruz. Böylece eklenmiş elemanı Select2 dışında kontrol edebilmemizi sağlayacağız.
addSelectedChoice: function (data) {
        var enableChoice = !data.locked,
            enabledItem = $(
                "
  • " + "
    " + " " + "
  • "), disabledItem = $( "
  • " + "
    " + "
  • "); var choice = enableChoice ? enabledItem : disabledItem, id = this.id(data), val = this.getVal(), formatted; /* Eğer seçilen eleman formatlı geliyorsa ve bizim dropdown html yapısı olacağı için uygunsa escapeMarkup ile html taglarını silme işini kapatmalıyız. İşte bu seçilen eleman eklendikten sonra "cem" diye tanımladığım eventi tetikleyeceğiz ve event type haricinde çeşitli tipleri (burada val içinde seçilen satırı), choice ile eklemiş olduğumuz html elemanının jQuery nesnesini göndereceğiz */ formatted = this.opts.formatSelection(data, choice.find("div")); if (formatted != undefined) { //choice.find("div").replaceWith("
    " + this.opts.escapeMarkup(formatted) + "
    "); choice.find("div").replaceWith("
    " + formatted + "
    "); $.trigger({ type: "cem", val: data, choice: $(choice.find("div")[0])}); }

    Tag şeklinde açılacağı ve multiselect hedeflediğim için container içinde menü elemanlarını görüntüleyebilmek için aşağıdaki css içinde bazı değişiklikler yapacağız.
    .select2-container-multi .select2-choices {
        height: auto !important;
        height: 1%;
        margin: 0;
        padding: 0;
        position: relative;
    
        border: 1px solid #aaa;
        cursor: text;
        overflow: hidden;
    
        background-color: #fff;
        background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
        background-image: -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
        background-image: -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
        background-image: -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
        background-image: -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
        background-image: linear-gradient(top, #eeeeee 1%, #ffffff 15%);
    }
    overflow: hidden ile menü elemanları gizleniyordu. Bunu visible yapacağız ki menü gözüksün.
    display: inline-block; genişlemeyi otomatik yapabilmemiz için.
    min-width: 200px; en azından 200px genişliğinde görünsün istiyoruz.

    Sonuç:
    .select2-container-multi .select2-choices {
        height: auto !important;
        height: 1%;
        margin: 0;
        padding: 0;
        position: relative;
    
        border: 1px solid #aaa;
        cursor: text;
        overflow: visible;
    
        display: inline-block;
        min-width: 200px;
    
        background-color: #fff;
        background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
        background-image: -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
        background-image: -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
        background-image: -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
        background-image: -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
        background-image: linear-gradient(top, #eeeeee 1%, #ffffff 15%);
    }

    Select2'nin css içinde ul içinde li taglarını float:left ile inline-block şeklinde gösteriyor. Bizde dropdown button içinde li kullandığımıza göre ve dikey dizilmiş li menu item dizimiz olsun istediğimiz için .select2-container-multi .select2-choices li şeklinde tüm li elemanlarını etkileyen stilimizi sadece ilk seviye li elemanlarına uygulamak için şu şekle getiririz: .select2-container-multi .select2-choices > li

    Tüm html kodu:
    <!DOCTYPE html>
    <html>
    <head>
        <link rel="stylesheet" href="select2-3.3.2/select2.css" />
        <link rel="stylesheet" href="bootstrap/css/bootstrap.css" />
    </head>
    <body>
        <input type="hidden" id="hdn" value="" style="width: 200px;" />
    
    </body>
    
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script type="text/javascript" src="bootstrap/js/bootstrap.min.js"></script>
    <script type="text/javascript" src="select2-3.3.2/select2.js"></script>
    <script type="text/javascript">
        var l = console.log.bind(console);
    
        var d = [{ id: 1, text: "bir" }, { id: 2, text: "iki" }, { id: 3, text: "üç" }];
        $(function () {
            //$('.dropdown-toggle').dropdown();
            var btn = ["<div class='btn-group'>                                                 "
    + "  <button class='btn btn-mini'>Action</button>                          "
    + "  <button class='btn btn-mini dropdown-toggle' data-toggle='dropdown'>  "
    + "    <span class='caret'></span>                                         "
    + "  </button>                                                             "
    + "  <ul class='dropdown-menu'>                                            "
    + "        <li><a href='#'>Action</a></li>                                 "
    + "        <li><a href='#'>Another action</a></li>                         "
    + "        <li><a href='#'>Something else here</a></li>                    "
    + "        <li class='divider'></li>                                       "
    + "        <li><a href='#'>Separated link</a></li>                         "
    + "  </ul>                                                                 "
    + "</div>                                                                  "];
            $('body').append($(btn.join()));
    
            $('#hdn').on('cem', function (a) {
                console.log(a);
                alert('cemmmm');
            });
    
            var obj = $({});
            jQuery["on"] = function () {
                obj["on"].apply(obj, arguments);
            };
            jQuery["trigger"] = function () {
                obj["trigger"].apply(obj, arguments);
            };
    
            $.on('cem', function (a) {
                l(a);
                l('jquery cemmmm');
    
            });
    
            $('#hdn').select2({
                autoWidth: true,
                multiple: true,
    
                query: function (query) {
                    var data = { results: [] };
                    $.each(d, function () {
                        if (query.term.length == 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0) {
                            data.results.push({ id: this.id, text: this.text });
                        }
                    });
                    query.callback(data);
                },
                formatSelection: function (item) {
                    return btn.join();
                }
            });
        });
        $('#hdn').select2('data', d);
    </script>
    </html>
    
    



    Select2 Kodu:

    Select2.css Kodu:
    /*
    Version: @@ver@@ Timestamp: @@timestamp@@
    */
    .select2-container {
        position: relative;
        display: inline-block;
        /* inline-block for ie7 */
        zoom: 1;
        *display: inline;
        vertical-align: middle;
    }
    
    .select2-container,
    .select2-drop,
    .select2-search,
    .select2-search input{
      /*
        Force border-box so that % widths fit the parent
        container without overlap because of margin/padding.
    
        More Info : http://www.quirksmode.org/css/box.html
      */
      -webkit-box-sizing: border-box; /* webkit */
       -khtml-box-sizing: border-box; /* konqueror */
         -moz-box-sizing: border-box; /* firefox */
          -ms-box-sizing: border-box; /* ie */
              box-sizing: border-box; /* css3 */
    }
    
    .select2-container .select2-choice {
        display: block;
        height: 26px;
        padding: 0 0 0 8px;
        overflow: hidden;
        position: relative;
    
        border: 1px solid #aaa;
        white-space: nowrap;
        line-height: 26px;
        color: #444;
        text-decoration: none;
    
        -webkit-border-radius: 4px;
           -moz-border-radius: 4px;
                border-radius: 4px;
    
        -webkit-background-clip: padding-box;
           -moz-background-clip: padding;
                background-clip: padding-box;
    
        -webkit-touch-callout: none;
          -webkit-user-select: none;
           -khtml-user-select: none;
             -moz-user-select: none;
              -ms-user-select: none;
                  user-select: none;
    
        background-color: #fff;
        background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eeeeee), color-stop(0.5, white));
        background-image: -webkit-linear-gradient(center bottom, #eeeeee 0%, white 50%);
        background-image: -moz-linear-gradient(center bottom, #eeeeee 0%, white 50%);
        background-image: -o-linear-gradient(bottom, #eeeeee 0%, #ffffff 50%);
        background-image: -ms-linear-gradient(top, #ffffff 0%, #eeeeee 50%);
        filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0);
        background-image: linear-gradient(top, #ffffff 0%, #eeeeee 50%);
    }
    
    .select2-container.select2-drop-above .select2-choice {
        border-bottom-color: #aaa;
    
        -webkit-border-radius:0 0 4px 4px;
           -moz-border-radius:0 0 4px 4px;
                border-radius:0 0 4px 4px;
    
        background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eeeeee), color-stop(0.9, white));
        background-image: -webkit-linear-gradient(center bottom, #eeeeee 0%, white 90%);
        background-image: -moz-linear-gradient(center bottom, #eeeeee 0%, white 90%);
        background-image: -o-linear-gradient(bottom, #eeeeee 0%, white 90%);
        background-image: -ms-linear-gradient(top, #eeeeee 0%,#ffffff 90%);
        filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#eeeeee',GradientType=0 );
        background-image: linear-gradient(top, #eeeeee 0%,#ffffff 90%);
    }
    
    .select2-container.select2-allowclear .select2-choice span {
        margin-right: 42px;
    }
    
    .select2-container .select2-choice span {
        margin-right: 26px;
        display: block;
        overflow: hidden;
    
        white-space: nowrap;
    
        -ms-text-overflow: ellipsis;
         -o-text-overflow: ellipsis;
            text-overflow: ellipsis;
    }
    
    .select2-container .select2-choice abbr {
        display: inline-block;
        width: 12px;
        height: 12px;
        position: absolute;
        right: 24px;
        top: 8px;
    
        font-size: 1px;
        text-decoration: none;
    
        border: 0;
        background: url('select2.png') right top no-repeat;
        cursor: pointer;
        outline: 0;
    }
    .select2-container .select2-choice abbr:hover {
        background-position: right -11px;
        cursor: pointer;
    }
    
    .select2-drop-mask {
        position: absolute;
        left: 0;
        top: 0;
        z-index: 9998;
        background-color: #fff;
        opacity: 0;
        -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /* works in IE 8 */
            filter: "alpha(opacity=0)"; /* expected to work in IE 8 */
            filter: alpha(opacity=0); /* IE 4-7 */
    }
    
    .select2-drop {
        width: 100%;
        margin-top:-1px;
        position: absolute;
        z-index: 9999;
        top: 100%;
    
        background: #fff;
        color: #000;
        border: 1px solid #aaa;
        border-top: 0;
    
        -webkit-border-radius: 0 0 4px 4px;
           -moz-border-radius: 0 0 4px 4px;
                border-radius: 0 0 4px 4px;
    
        -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
           -moz-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
                box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
    }
    
    .select2-drop-auto-width {
        border-top: 1px solid #aaa;
        width: auto;
    }
    
    .select2-drop-auto-width .select2-search {
        padding-top: 4px;
    }
    
    .select2-drop.select2-drop-above {
        margin-top: 1px;
        border-top: 1px solid #aaa;
        border-bottom: 0;
    
        -webkit-border-radius: 4px 4px 0 0;
           -moz-border-radius: 4px 4px 0 0;
                border-radius: 4px 4px 0 0;
    
        -webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
           -moz-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
                box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
    }
    
    .select2-container .select2-choice div {
        display: inline-block;
        width: 18px;
        height: 100%;
        position: absolute;
        right: 0;
        top: 0;
    
        border-left: 1px solid #aaa;
        -webkit-border-radius: 0 4px 4px 0;
           -moz-border-radius: 0 4px 4px 0;
                border-radius: 0 4px 4px 0;
    
        -webkit-background-clip: padding-box;
           -moz-background-clip: padding;
                background-clip: padding-box;
    
        background: #ccc;
        background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));
        background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%);
        background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);
        background-image: -o-linear-gradient(bottom, #ccc 0%, #eee 60%);
        background-image: -ms-linear-gradient(top, #cccccc 0%, #eeeeee 60%);
        filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0);
        background-image: linear-gradient(top, #cccccc 0%, #eeeeee 60%);
    }
    
    .select2-container .select2-choice div b {
        display: block;
        width: 100%;
        height: 100%;
        background: url('select2.png') no-repeat 0 1px;
    }
    
    .select2-search {
        display: inline-block;
        width: 100%;
        min-height: 26px;
        margin: 0;
        padding-left: 4px;
        padding-right: 4px;
    
        position: relative;
        z-index: 10000;
    
        white-space: nowrap;
    }
    
    .select2-search-hidden {
        display: block;
        position: absolute;
        left: -10000px;
    }
    
    .select2-search input {
        width: 100%;
        height: auto !important;
        min-height: 26px;
        padding: 4px 20px 4px 5px;
        margin: 0;
    
        outline: 0;
        font-family: sans-serif;
        font-size: 1em;
    
        border: 1px solid #aaa;
        -webkit-border-radius: 0;
           -moz-border-radius: 0;
                border-radius: 0;
    
        -webkit-box-shadow: none;
           -moz-box-shadow: none;
                box-shadow: none;
    
        background: #fff url('select2.png') no-repeat 100% -22px;
        background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee));
        background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, white 85%, #eeeeee 99%);
        background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%);
        background: url('select2.png') no-repeat 100% -22px, -o-linear-gradient(bottom, white 85%, #eeeeee 99%);
        background: url('select2.png') no-repeat 100% -22px, -ms-linear-gradient(top, #ffffff 85%, #eeeeee 99%);
        background: url('select2.png') no-repeat 100% -22px, linear-gradient(top, #ffffff 85%, #eeeeee 99%);
    }
    
    .select2-drop.select2-drop-above .select2-search input {
        margin-top: 4px;
    }
    
    .select2-search input.select2-active {
        background: #fff url('select2-spinner.gif') no-repeat 100%;
        background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee));
        background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, white 85%, #eeeeee 99%);
        background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%);
        background: url('select2-spinner.gif') no-repeat 100%, -o-linear-gradient(bottom, white 85%, #eeeeee 99%);
        background: url('select2-spinner.gif') no-repeat 100%, -ms-linear-gradient(top, #ffffff 85%, #eeeeee 99%);
        background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(top, #ffffff 85%, #eeeeee 99%);
    }
    
    .select2-container-active .select2-choice,
    .select2-container-active .select2-choices {
        border: 1px solid #5897fb;
        outline: none;
    
        -webkit-box-shadow: 0 0 5px rgba(0,0,0,.3);
           -moz-box-shadow: 0 0 5px rgba(0,0,0,.3);
                box-shadow: 0 0 5px rgba(0,0,0,.3);
    }
    
    .select2-dropdown-open .select2-choice {
        border-bottom-color: transparent;
        -webkit-box-shadow: 0 1px 0 #fff inset;
           -moz-box-shadow: 0 1px 0 #fff inset;
                box-shadow: 0 1px 0 #fff inset;
    
        -webkit-border-bottom-left-radius: 0;
            -moz-border-radius-bottomleft: 0;
                border-bottom-left-radius: 0;
    
        -webkit-border-bottom-right-radius: 0;
            -moz-border-radius-bottomright: 0;
                border-bottom-right-radius: 0;
    
        background-color: #eee;
        background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, white), color-stop(0.5, #eeeeee));
        background-image: -webkit-linear-gradient(center bottom, white 0%, #eeeeee 50%);
        background-image: -moz-linear-gradient(center bottom, white 0%, #eeeeee 50%);
        background-image: -o-linear-gradient(bottom, white 0%, #eeeeee 50%);
        background-image: -ms-linear-gradient(top, #ffffff 0%,#eeeeee 50%);
        filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#ffffff',GradientType=0 );
        background-image: linear-gradient(top, #ffffff 0%,#eeeeee 50%);
    }
    
    .select2-dropdown-open.select2-drop-above .select2-choice,
    .select2-dropdown-open.select2-drop-above .select2-choices {
        border: 1px solid #5897fb;
        border-top-color: transparent;
    
        background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, white), color-stop(0.5, #eeeeee));
        background-image: -webkit-linear-gradient(center top, white 0%, #eeeeee 50%);
        background-image: -moz-linear-gradient(center top, white 0%, #eeeeee 50%);
        background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);
        background-image: -ms-linear-gradient(bottom, #ffffff 0%,#eeeeee 50%);
        filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#ffffff',GradientType=0 );
        background-image: linear-gradient(bottom, #ffffff 0%,#eeeeee 50%);
    }
    
    .select2-dropdown-open .select2-choice div {
        background: transparent;
        border-left: none;
        filter: none;
    }
    .select2-dropdown-open .select2-choice div b {
        background-position: -18px 1px;
    }
    
    /* results */
    .select2-results {
        max-height: 200px;
        padding: 0 0 0 4px;
        margin: 4px 4px 4px 0;
        position: relative;
        overflow-x: hidden;
        overflow-y: auto;
        -webkit-tap-highlight-color: rgba(0,0,0,0);
    }
    
    .select2-results ul.select2-result-sub {
        margin: 0;
    }
    
    .select2-results ul.select2-result-sub > li .select2-result-label { padding-left: 20px }
    .select2-results ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 40px }
    .select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 60px }
    .select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 80px }
    .select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 100px }
    .select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 110px }
    .select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 120px }
    
    .select2-results li {
        list-style: none;
        display: list-item;
        background-image: none;
    }
    
    .select2-results li.select2-result-with-children > .select2-result-label {
        font-weight: bold;
    }
    
    .select2-results .select2-result-label {
        padding: 3px 7px 4px;
        margin: 0;
        cursor: pointer;
    
        min-height: 1em;
    
        -webkit-touch-callout: none;
          -webkit-user-select: none;
           -khtml-user-select: none;
             -moz-user-select: none;
              -ms-user-select: none;
                  user-select: none;
    }
    
    .select2-results .select2-highlighted {
        background: #3875d7;
        color: #fff;
    }
    
    .select2-results li em {
        background: #feffde;
        font-style: normal;
    }
    
    .select2-results .select2-highlighted em {
        background: transparent;
    }
    
    .select2-results .select2-highlighted ul {
        background: white;
        color: #000;
    }
    
    
    .select2-results .select2-no-results,
    .select2-results .select2-searching,
    .select2-results .select2-selection-limit {
        background: #f4f4f4;
        display: list-item;
    }
    
    /*
    disabled look for disabled choices in the results dropdown
    */
    .select2-results .select2-disabled.select2-highlighted {
        color: #666;
        background: #f4f4f4;
        display: list-item;
        cursor: default;
    }
    .select2-results .select2-disabled {
      background: #f4f4f4;
      display: list-item;
      cursor: default;
    }
    
    .select2-results .select2-selected {
        display: none;
    }
    
    .select2-more-results.select2-active {
        background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%;
    }
    
    .select2-more-results {
        background: #f4f4f4;
        display: list-item;
    }
    
    /* disabled styles */
    
    .select2-container.select2-container-disabled .select2-choice {
        background-color: #f4f4f4;
        background-image: none;
        border: 1px solid #ddd;
        cursor: default;
    }
    
    .select2-container.select2-container-disabled .select2-choice div {
        background-color: #f4f4f4;
        background-image: none;
        border-left: 0;
    }
    
    .select2-container.select2-container-disabled .select2-choice abbr {
        display: none;
    }
    
    
    /* multiselect */
    
    .select2-container-multi .select2-choices {
        height: auto !important;
        height: 1%;
        margin: 0;
        padding: 0;
        position: relative;
    
        border: 1px solid #aaa;
        cursor: text;
        overflow: visible;
    
        display: inline-block;
        min-width: 200px;
    
        background-color: #fff;
        background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
        background-image: -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
        background-image: -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
        background-image: -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
        background-image: -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%);
        background-image: linear-gradient(top, #eeeeee 1%, #ffffff 15%);
    }
    
    .select2-locked {
      padding: 3px 5px 3px 5px !important;
    }
    
    .select2-container-multi .select2-choices {
        min-height: 26px;
    }
    
    .select2-container-multi.select2-container-active .select2-choices {
        border: 1px solid #5897fb;
        outline: none;
    
        -webkit-box-shadow: 0 0 5px rgba(0,0,0,.3);
           -moz-box-shadow: 0 0 5px rgba(0,0,0,.3);
                box-shadow: 0 0 5px rgba(0,0,0,.3);
    }
    .select2-container-multi .select2-choices > li {
        float: left;
        list-style: none;
    }
    .select2-container-multi .select2-choices .select2-search-field {
        margin: 0;
        padding: 0;
        white-space: nowrap;
    }
    
    .select2-container-multi .select2-choices .select2-search-field input {
        padding: 5px;
        margin: 1px 0;
    
        font-family: sans-serif;
        font-size: 100%;
        color: #666;
        outline: 0;
        border: 0;
        -webkit-box-shadow: none;
           -moz-box-shadow: none;
                box-shadow: none;
        background: transparent !important;
    }
    
    .select2-container-multi .select2-choices .select2-search-field input.select2-active {
        background: #fff url('select2-spinner.gif') no-repeat 100% !important;
    }
    
    .select2-default {
        color: #999 !important;
    }
    
    .select2-container-multi .select2-choices .select2-search-choice {
        padding: 3px 5px 3px 18px;
        margin: 3px 0 3px 5px;
        position: relative;
    
        line-height: 13px;
        color: #333;
        cursor: default;
        border: 1px solid #aaaaaa;
    
        -webkit-border-radius: 3px;
           -moz-border-radius: 3px;
                border-radius: 3px;
    
        -webkit-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);
           -moz-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);
                box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);
    
        -webkit-background-clip: padding-box;
           -moz-background-clip: padding;
                background-clip: padding-box;
    
        -webkit-touch-callout: none;
          -webkit-user-select: none;
           -khtml-user-select: none;
             -moz-user-select: none;
              -ms-user-select: none;
                  user-select: none;
    
        background-color: #e4e4e4;
        filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0 );
        background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
        background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
        background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
        background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
        background-image: -ms-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
        background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
    }
    .select2-container-multi .select2-choices .select2-search-choice span {
        cursor: default;
    }
    .select2-container-multi .select2-choices .select2-search-choice-focus {
        background: #d4d4d4;
    }
    
    .select2-search-choice-close {
        display: block;
        width: 12px;
        height: 13px;
        position: absolute;
        right: 3px;
        top: 4px;
    
        font-size: 1px;
        outline: none;
        background: url('select2.png') right top no-repeat;
    }
    
    .select2-container-multi .select2-search-choice-close {
        left: 3px;
    }
    
    .select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover {
      background-position: right -11px;
    }
    .select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close {
        background-position: right -11px;
    }
    
    /* disabled styles */
    .select2-container-multi.select2-container-disabled .select2-choices{
        background-color: #f4f4f4;
        background-image: none;
        border: 1px solid #ddd;
        cursor: default;
    }
    
    .select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {
        padding: 3px 5px 3px 5px;
        border: 1px solid #ddd;
        background-image: none;
        background-color: #f4f4f4;
    }
    
    .select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close {    display: none;
        background:none;
    }
    /* end multiselect */
    
    
    .select2-result-selectable .select2-match,
    .select2-result-unselectable .select2-match {
        text-decoration: underline;
    }
    
    .select2-offscreen {
        border: 0;
        clip: rect(0 0 0 0);
        height: 1px;
        margin: -1px;
        overflow: hidden;
        padding: 0;
        position: absolute;
        width: 1px;
    }
    
    .select2-display-none {
        display: none;
    }
    
    .select2-measure-scrollbar {
        position: absolute;
        top: -10000px;
        left: -10000px;
        width: 100px;
        height: 100px;
        overflow: scroll;
    }
    /* Retina-ize icons */
    
    @media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi)  {
      .select2-search input, .select2-search-choice-close, .select2-container .select2-choice abbr, .select2-container .select2-choice div b {
          background-image: url('select2x2.png') !important;
          background-repeat: no-repeat !important;
          background-size: 60px 40px !important;
      }
      .select2-search input {
          background-position: 100% -21px !important;
      }
    }
    

    25 Nisan 2013 Perşembe

    jQuery üzerinden observer pattern oluşturulması

    $ içinde tanımlı olan ve jQuery nesnelerine sarılan on, off, trigger metotları vardır. trigger Metodu bir tetikleyicidir ve hangi olayın tetiklenmesini istiyorsak, ilgili değişkenleri ikinci parametrede vererek çalıştırırız.


    on Metodu bir olayın tetiklenmesi halinde çalışır. Birinci parametre hangi event durumunda çalışacağını, ikinci parametre ise hangi fonksiyonun çalışacağını gösterir.


    off Metodu ise daha önce bir olaya eklenmiş bir metodun kaldırılması esasına dayanır.


    Yukarıdaki bu metotların çalışabilmesi için önce hangi nesneye kilitlediğinizi seçmelisiniz ve bu nesne tabii ki jQuery örneği olmalı. Mesela her div'e tıklandığında zapa zupa olsun: $('div').on('click',zapaZupaFonksiyonunuCagir());
    Eğer bir tıklama olmadan programatik olarak çağırmak isterseniz $('div').trigger('click',['extra parametreler']); ile çağırabilirsiniz olayları.

    Şimdi biliyoruzki jQuery nesneleri on,off,trigger metotlarına sahiplerken $ buna sahip değil. Bunu sağlamak için bir jQuery nesnesi yaratalım:
    var o = $({});
    Bu nesneden o.trigger() diyerek metot çağırmakla o['trigger']() diyerek metot çağırmak arasında bir fark yoktur. Neticede javascript nesnesinin bir özelliğini çağırıyoruz ve fonksiyonlarda bu nesnelerin bir propertysi gibidirler.


    Peki 'on' metodunun içeriği zaten jQuery içinde tanımlanmış ve sadece nesnelere bağlanabiliyorsa biz jQuery örneğimiz için on fonksiyonunun adını değiştirebilir miyiz?
    o['hebeleOlsun'] = function(){ o.on.apply(o, arguments); }; burası azıcık karışık gelebilir. Baş taraf çok basit. hebeleOlsun diye bir özellik ekliyoruz "o" nesnemize. Bu nesneye anonymous bir function atıyoruz. Bu durumda o['hebeleOlsun']() ya da o.hebeleOlsun() çağrıları bu anonymous fonksiyona çağrı yapacak ve tüm parametrelerde bu metot içinde arguments dendiğinde elde edilebilecek. Şimdi sırada apply var. apply da bir metot çağrısı ama kime yapılıyor? Bir başka metotan yapılabiliyor ki burada bizim "on" metodumuzun üstünden yapıldığını farketmişsinizdir. Peki parametrelerin anlamı ne? Birinci parametre bu fonksiyon içinde this diyerek elde edebileceğimiz değişken olacak. Ki; biz burada o nesnesini gönderdik. Böylece apply ile çağırdığımız on fonksiyonu içinde artık this = o olmuştur. ON fonksiyonunun içine diğer diğer parametreleride arguments ile gönderiyoruz.

    Peki biz jQuery içinden özelleştirilmiş bir olay oluşturma, bu olaya abone olma ve aboneliği silmek konusununu nasıl yazabiliriz:
    <script>
            var o = $({});
    
            jQuery['yayinYap'] = function () {
                o.trigger.apply(o, arguments);
            };
    
            jQuery['uyeOl'] = function () {
                o['on'].apply(o, arguments);
            };
    
            jQuery['uyeOlma'] = function () {
                o['off'].apply(o, arguments);
            };
    
            $.yayinYap('onBasimKasindi',['bu bir event parametresi','bu da digeri',2,3,{oz:'el',li:'ck'}]);
    
            $.uyeOl('onBasimKasindi',function(e){ console.log('Başı kaşınan birisi var'); console.log(e); $.uyeOlma('onBasimKasindi','**'); });
    

    Bunun pratik halleride var ama bu şeklini anladığınızda diğerleri daha anlamlı gelecektir.

    Geç oldu, ben gider...

    6 Nisan 2013 Cumartesi

    Düzenlediğim resimler

    Transparan(transparent) e-imza (e-signature) usb flash parmak bellek

    5 Nisan 2013 Cuma

    WCF incelemesi

    WCF çağrısı:


    Behaviour eklemek:



    public class CustomBehaviour : IEndpointBehavior
    {
        public void Validate(ServiceEndpoint endpoint)
        {
    


    public class CustomBehaviour : IEndpointBehavior
    {
        public void Validate(ServiceEndpoint endpoint)
        {
        }
        public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
        {
    

    bindingParameters:


    endpoint:

    public class CustomBehaviour : IEndpointBehavior
    {
        public void Validate(ServiceEndpoint endpoint)
        {
        }
        public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
        {
        }
        public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
        {
            CustomBehaviour custom = ((CustomBehaviour)(endpoint.Behaviors[typeof(CustomBehaviour)]));
            MessageInspector mi = new MessageInspector()
                {
                    M_Key = custom.M_Key,
                    M_Value = custom.M_Value
                };
                
            clientRuntime.MessageInspectors.Add(mi);
        }
    
    clientRuntime:

    4 Nisan 2013 Perşembe

    Code First ile Migration

    Context sınıfınızın default yapıcısı olmalı ve doğru dbnin adını vermelisiniz.


    PM konsolunuzda ilgili projenizin(context'i barındıran) kök klasörüne gelmelisiniz ve "Enable-Migrations –EnableAutomaticMigrations" kodunu çalıştırmalısınız. Bu kodu bulamadım diyerek çalışmazsa entity framework'ünüzü güncellemeyi deneyin. Enable-Migrations –EnableAutomaticMigrations çalıştıktan sonra Migrations diye bir klasör ve içinde Configuration.cs sınıfının oluştuğunu göreceksiniz.


    Ardından "Update-Database -Verbose" kodunu kullanrak kodunuzdaki güncellemeyi veritabanınıza yansıtabilirsiniz. -Verbose parametresi ile çalıştırılan SQL ifadelerini gözlemleyebilirsiniz.


    Son olarak hem PM de hangi klasörede olduğumuzu hemde update sonucundaki sql ifadelerini görebileceğiniz ekran:

    2 Nisan 2013 Salı

    Action kullanarak multi thread sql update

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Text;
    using System.Threading;
    
    namespace caThreadSqlUpdate
    {
        class Program
        {
            private static SqlConnection cnn = new SqlConnection("Data Source=10.130.214.200,8585;Initial Catalog=ERecete;User Id=kullanici;Password=sifre;");
            static void Main(string[] args)
            {
                if (cnn.State != ConnectionState.Open)
                {
                    cnn.Open();
                }
    
                SqlCommand cmd = cnn.CreateCommand();
                cmd.CommandText = "select ereceteIlacListe_id,barkod FROM dbo.EReceteIlacListesi";
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                da.Fill(ds);
    
                Dictionary<IAsyncResult, Action<int, string>> li = new Dictionary<IAsyncResult, Action>();
                int i = 0;
                foreach (DataRow row in ds.Tables[0].Rows)
                {
                    i++;
                    Action<int, string> act = f_BarkodGuncelle;
                    IAsyncResult ai = act.BeginInvoke((int)row[0], (string)row[1], delegate { Console.WriteLine("Bitti: " + row[0] + " ve " + row[1]); }, null);
                    li.Add(ai, act);
                    if (i == 5)
                    {
                        break;
                    }
                }
                while (true)
                {
                    foreach (var key in li.Keys)
                    {
                        if (key.IsCompleted && li[key] == null)
                        {
                            Console.WriteLine("End invoke çağırdım");
                            li[key].EndInvoke(key);
                            li[key] = null;
                        }
                    }
                    Thread.Sleep(1000);
                }
    
            }
    
            static public void f_BarkodGuncelle(int _iIlacId, string _sBarkod)
            {
                SqlCommand cmd = cnn.CreateCommand();
                cmd.CommandText = String.Format("UPDATE dbo.yedekEReceteIlaclari SET barkod={0} WHERE refEreceteIlacListe_id={1} ", _sBarkod, _iIlacId);
                cmd.ExecuteNonQuery();
            }
        }
    }
    

    22 Mart 2013 Cuma

    XXX to FLAC, to WAV, to MP3, to OGG, to APE

    Basit bir ses dosyası dönüştürülme işlemi için iki program denedim.
    1- Flac To Mp3 ü indirdim ama serial istiyordu:


    2- Bedava kolay ve küçük bir portable program FlicFlac.

    Audio File
    to FLAC
    to WAV
    to MP3
    to OGG
    to APE

    19 Mart 2013 Salı

    SimpleCursorAdapter vs CursorAdapter

    Not olsun:
    Tüm satırları tutacak olan LinearLayout:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <TableRow
            android:id="@+id/trHeader"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >
    
            <TextView
                android:id="@+id/tvAdiSoyadi"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/kisi_adi_soyadi" />
    
            <TextView
                android:id="@+id/tvAlani"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/kisi_alani" />
        </TableRow>
    
        <ListView
            android:id="@+id/lvKisiler"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
            
        </ListView>
    
    </LinearLayout>
    Her bir ListView item satırı:
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <CheckBox
            android:id="@+id/cbKisiId"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
        <TextView
            android:id="@+id/tvKisiId"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/rbKisi"
            android:layout_alignBottom="@+id/rbKisi"
            android:layout_toRightOf="@+id/rbKisi"
            android:text="ID"
            android:visibility="invisible" />
    
        <TextView
            android:id="@+id/tvAdi"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/tvKisiId"
            android:layout_alignBottom="@+id/tvKisiId"
            android:layout_marginLeft="15dp"
            android:layout_toRightOf="@+id/tvKisiId"
            android:text="Adi" />
    
        <TextView
            android:id="@+id/tvAlani"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/rbKisi"
            android:layout_toRightOf="@+id/rbKisi"
            android:text="Alani" />
    
        <TextView
            android:id="@+id/tvSoyadi"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/tvAdi"
            android:layout_alignBottom="@+id/tvAdi"
            android:layout_marginLeft="10dp"
            android:layout_toRightOf="@+id/tvAdi"
            android:text="Soyadi" />
    
    </RelativeLayout>
    SimpleCursorAdapter ile bağlanması:
      ListView lvKisiler = (ListView) getActivity().findViewById(R.id.lvKisiler);
      Cursor crs = KisiDataSource.fetchAllKisiler(getActivity());
    
      String[] fields = new String[] { VTHelper.COL_KISILER_ID,
              VTHelper.COL_KISILER_ADI,
              VTHelper.COL_KISILER_SOYADI,
              VTHelper.COL_KISILER_ALANI };
    
      int[] toWidgets = new int[] { R.id.tvKisiId,
              R.id.tvAdi,
              R.id.tvSoyadi,
              R.id.tvAlani };
      
      SimpleCursorAdapter sca = new SimpleCursorAdapter(getActivity(), R.layout.kisi_satir, crs, fields, toWidgets, 0);
      lvKisiler.setAdapter(sca);
    Custom CursorAdapter ile bağlanması:
    CursorAdapter ca = new CursorAdapter(getActivity(), crs) {
    
     @Override
     public View newView(Context _ctx, Cursor _crs, ViewGroup _parent) {
      LayoutInflater inflater = LayoutInflater.from(_ctx);
      View v = inflater.inflate(R.layout.kisi_satir, _parent, false);
      bindView(v, _ctx, _crs);
      return v;
     }
    
     @Override
     public void bindView(View _view, Context _ctx, Cursor _crs) {
      CheckBox cbKisiId = (CheckBox)_view.findViewById(R.id.cbKisiId);
      TextView tvKisiId = (TextView)_view.findViewById(R.id.tvKisiId);
      tvKisiId.setText(_crs.getString(_crs.getColumnIndex(VTHelper.COL_KISILER_ID)));
      cbKisiId.setOnCheckedChangeListener(fk);
      TextView tvAdi = (TextView)_view.findViewById(R.id.tvAdi);
      tvAdi.setText(_crs.getString(_crs.getColumnIndex(VTHelper.COL_KISILER_ADI)));
      TextView tvSoyadi = (TextView)_view.findViewById(R.id.tvSoyadi);
      tvSoyadi.setText(_crs.getString(_crs.getColumnIndex(VTHelper.COL_KISILER_SOYADI)));
      TextView tvAlani= (TextView)_view.findViewById(R.id.tvAlani);
      tvAlani.setText(_crs.getString(_crs.getColumnIndex(VTHelper.COL_KISILER_ALANI)));
    
     }
    };
    lvKisiler.setAdapter(ca);

    
    

    17 Mart 2013 Pazar

    öğrenme üzerine

    1. Algı
      • DuyuLarla
      • SezgiLerle
    2. Yargı
      • Duygusal
      • Mantıksal
     
    Algı-Yargı kombinasyonlarıyla değerlendiriyoruz
     
    Verileri alırken somutlaştıran, sezgisel algılayan tarafından abesle iştigal ediyor gibi algılanır.
    Arkadaşının hatasını 0 kırılmasın diye ikaz etmeyen(nezaketi önde tutan) duygularıyla yargılayan kişinin yöntemidir. Kusurunu, arkadaşını geliştirmek adına söyleyen kişi mantıksal,rasyonel kişidir. İkiside doğrudur.
    3. boyut Algı - Yargı içinde zıtlık içerir. Algılayan(algısallar) insanlar sürekli veri isteyen, karar erteleyerlerdir. Bu insanlar öğreneceğim çok şey vardır derler.
    Yargısallar için veri, zaten verdikleri kararı desteklemek içindir. Kararları sabittir. düzenli günleri düzenlidir haftaya yapacakları şeyler bellidir. AlgısallarAntalyaya giderken Ağrıya dönebilir. Yargısalar ise emin olduklarından değişmez ayrılmazlar.
    Sezgi algısallar soyut konular, duyusalar için somut konular çok kolay.
     
    Kişilik ve tercih değişimi her zaman mümkündür
    Algı-Yargı
    içe / dışa dönüklük
    Yazarak, dokunarak ya da dinleyerek öğrenmenin arkasında kişilik yatar.
    Parmak izi kadar eşsizdir insan, kategori edilemez.
     
    duyusal düşünenle X sezgisel hisseden
    duyusal hisseden X sezgisel düşünen
     
    Bir insanda sorun çözme becerisi varsa. o kişinin diplomalı olup olmaması anlamsızdır.
     
    Dağınık, düzenli çalışamayan dikkatini toplayamayan Sezgi - algısal bir karakterdir. Sezgi olgISaIı sabun gibidir. sezgi algısal kişiler düzenli çalişmak yerine işleri erteleyebilmek isterler.
     
    Eğer çocukla bir çatışma yaşanıyorsa, çocuk ne istediğini belli edecektir. Çocuk dediğin böyle olur, yatağını toplar, yemeğini kendi yer gibi yaklaşımlar yargısal yaklaşımdır. Yargısal lığın hafiflemesi gerekir.
    Algısallığımızda, onun kararlarını, kendi kararlarımızı değiştirdiğimiz için ON
    da dağıtacaktır.İstikrarsızlaştıracaktır.
     
    Yapmayı küçümsediği alaninda önemli olduğunu göstermeli. Dağınık bir çocuğa odasının düzenli olmasının faydasını anlatmak için odasının dekorasyonunu değiştirme imkanı vermeli. Çocuk değişikliği sevdiği için odayı değiştirmek isteyeadet
     
    Yargısallar ders programı yaptığında programa sadık kalır. Algısallar değişken oldukları için sadık kalamaz. Algısattığını, yargısallığa dönüştürmek gerekir. Bunun için son bir tarih verecek ama kısa bir aralıkta istediği zamanda bitirmesini sağlamak.Algısallarda uzun bir aralıkta hedefi yakalamaları mümkün olmaz. Onlara hedef koymak gerekir.
     
    Zor koşullar çocukların gelişiminde daha iyi etkendir. Nladdi imkanlar arttıkça öğrenme düşebilir.
     
    Dağınıklık, suç değildir bir yapıdır ve enerjisi yüksektir.
     
     
     
     
     
     
     
     
     
     
     
     

    14 Mart 2013 Perşembe

    Java'da Comparable ve Comparator ile kıyaslayarak sıralama


    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    class A implements Comparable<A>
    {
     public int a;
     public String b;
    
     public A(int _a, String _b) {
      a = _a;
      b = _b;
     }
    
     @Override
     public int compareTo(A _kiyaslanan)
     {
      return this.a - _kiyaslanan.a;
     }
    
     @Override
     public String toString()
     {
      return a + ":" + b;
     }
    }
    
    
    
    
    public class test
    {
     public static void main(String[] args)
     {
      A a = new A(10, "on");
      A b = new A(9, "dokuz");
      A c = new A(8, "sekiz");
      A d = new A(7, "yedi");
      A e = new A(6, "altı");
    
    
    
    
      final List list = new ArrayList<A>();
      list.add(a);
      list.add(c);
      list.add(b);
      list.add(e);
      list.add(d);
    
    
    
    
      System.out.println("// Kendi compareTo metoduyla sıralama");
      Collections.sort(list);
      yaz(list);
      System.out.println("// İnterface olarak eklenen compareTo metoduyla sıralama");
      Collections.sort(list, new Comparator<A>() {
       @Override
       public int compare(A a2, A a1)
       {
        // b, String tipinde ve String sınıfının compareTo metoduna göre
        // sıralama
        return a2.b.compareTo(a1.b);
       }
      });
      yaz(list);
     }
    
    
    
    
     public static void yaz(List list)
     {
      for (int i = 0; i < list.size(); i++)
      {
       System.out.println(list.get(i));
      }
     }
    }
    

    BaseAdapter içinde işlenen sıralı metotlar

    Daha önce bu yazımı okuyabilirsiniz: En Temel Generic Adapter


    package com.example.adapters;
    
    import java.util.ArrayList;
    import com.example.fragmentornegi.R;
    import android.content.Context;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    public class SunumAdapter extends BaseAdapter {
    
     Context ctx;
     ArrayList<SunumSinif> alSunumlar = new ArrayList<SunumSinif>();
     ArrayList<SunumSinif> alHD = null;
     ArrayList<SunumSinif> alPD = null;
     ArrayList<SunumSinif> alNC = null;
     ArrayList<SunumSinif> alRP = null;
     LayoutInflater inf;
    
     public SunumAdapter(Context _ctx) {
      ctx = _ctx;
      inf = LayoutInflater.from(_ctx);
     }
    
     public void Ekle(SunumSinif _sunum) {
      if (_sunum.AitOlduguKonu == SunumSinif.KonuHD) {
       if (alHD == null)
        alHD = new ArrayList<SunumSinif>();
       alHD.add(_sunum);
      } else if (_sunum.AitOlduguKonu == SunumSinif.KonuNC) {
       if (alNC == null)
        alNC = new ArrayList<SunumSinif>();
       alNC.add(_sunum);
      } else if (_sunum.AitOlduguKonu == SunumSinif.KonuPD) {
       if (alPD == null)
        alPD = new ArrayList<SunumSinif>();
       alPD.add(_sunum);
      } else {
       if (alRP == null)
        alRP = new ArrayList<SunumSinif>();
       alRP.add(_sunum);
      }
      alSunumlar.add(_sunum);
     }
    
     @Override
     public int getCount() {
      Log.w("Adapter", "getCount:int");
      return alSunumlar.size();
     }
    
     @Override
     public Object getItem(int position) {
      Log.w("Adapter", "getItem:Object");
      return alSunumlar.get(position);
     }
    
     @Override
     public long getItemId(int position) {
    
      Log.w("Adapter", "getItemId:long");
      return 0;
     }
    
     public static SunumAdapter getAdapter(Context _ctx) {
    
      SunumSinif HD1 = new SunumSinif();
      HD1.AitOlduguKonu = SunumSinif.KonuHD;
      HD1.Baslik = "Hemodiyaliz Sunum 1";
      HD1.Tipi = SunumSinif.SunumTipleri.Resim;
      HD1.DosyaYolu = "file:///android_asset/hd1/";
    
      SunumSinif HD2 = new SunumSinif();
      HD2.AitOlduguKonu = SunumSinif.KonuHD;
      HD2.Baslik = "Hemodiyaliz Sunum 2";
      HD2.Tipi = SunumSinif.SunumTipleri.Resim;
      HD2.DosyaYolu = "file:///android_asset/hd2/";
    
      SunumSinif HD3 = new SunumSinif();
      HD3.AitOlduguKonu = SunumSinif.KonuHD;
      HD3.Baslik = "Hemodiyaliz Sunum 3";
      HD3.Tipi = SunumSinif.SunumTipleri.Resim;
      HD3.DosyaYolu = "file:///android_asset/hd3/";
    
      SunumSinif HD4 = new SunumSinif();
      HD4.AitOlduguKonu = SunumSinif.KonuHD;
      HD4.Baslik = "Hemodiyaliz Sunum 4";
      HD4.Tipi = SunumSinif.SunumTipleri.Resim;
      HD4.DosyaYolu = "file:///android_asset/hd4/";
    
      SunumSinif HDhtml1 = new SunumSinif();
      HDhtml1.AitOlduguKonu = SunumSinif.KonuHD;
      HDhtml1.Baslik = "Ayı Videolu HTML";
      HDhtml1.Tipi = SunumSinif.SunumTipleri.Html;
      HDhtml1.DosyaYolu = "file:///android_asset/hdHtml1/index.html";
    
      SunumAdapter sa = new SunumAdapter(_ctx);
      sa.Ekle(HD1);
      // sa.Ekle(HD2);
      // sa.Ekle(HD3);
      // sa.Ekle(HD4);
      // sa.Ekle(HDhtml1);
      return sa;
     }
    
     static class ViewHolder {
      TextView tvBaslik;
      TextView tvKonu;
     }
    
     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
      ViewHolder holder;
      Log.w("Adapter", "getView:View");
      if (convertView == null) {
       convertView = inf.inflate(com.example.fragmentornegi.R.layout.sunum_satir, null);
       holder = new ViewHolder();
       convertView.setTag(holder);
       holder.tvBaslik = (TextView) convertView.findViewById(R.id.tvBaslik);
       holder.tvKonu = (TextView) convertView.findViewById(R.id.tvKonu);
      } else {
       holder = (ViewHolder) convertView.getTag();
      }
    
      holder.tvBaslik.setText(alSunumlar.get(position).Baslik);
      holder.tvKonu.setText(alSunumlar.get(position).AitOlduguKonu);
      return convertView;
     }
    
    }

    Eklemek istediğim şey ise, event sırası ve adediydi.
    Ama önce aşağıdaki statik sınıfı neden yarattığımızı(bak aklıma ne geldi, yarattık dedi diye Allah'a -haşa rakip değil kimse ama- kafir ilan ederdik milleti, bence kelimeyi kutsallaştırmak en tehlikelisi, neyse konuya döneyim)anlatayım. ListView içinde satır sayısı çok olacaksa sürekli findViewById ile satır elemanlarını bulmak yerine statik bir sınıfa bu elemanları bağlamak ideal olanı (bkz static sınıf tanımlanması). Adapter sınıfımız içindeki ViewHolde static sınıfından türettiğimiz her nesne, static sınıfın bellekte tanımlı aynı yerine işaret edeceği için bileşenleri bulup bu static sınıf nesnesine atıyoruz ve böylece her View(liste satırı) oluştururken tekrar tekrar findViewById işlemi yapmıyoruz.
    static class ViewHolder {
      TextView tvBaslik;
      TextView tvKonu;
    }
    Sınıf hazır ve getView içerisinde holder isminde değişken yaratıp eğer containerView boş ise değerini oluşturuyor değilse View sınıfının setTag metoduyla daha önce oluşturup atadığımız holder metodundan çekiyor ve satır bileşenlerinin değerlerini atıyoruz.
    İlk yüklemede getCount metoduna 4 kez giriyor ve peşine getView metodu ve bir kez daha getCount ve getView daha.
    Dokunduktan sonra ise getItem ve 3 kez getCount ardından iki kez getItemId .


    Ekran görüntüsü ise:

    13 Mart 2013 Çarşamba

    Android içinde WebView kullanarak HTML gösterimi

    Kendime not:
    Video oynatılamıyor çünkü droid web browserlar html5 video oynatmaya yeterli değil
    Android webview cannot render youtube video embedded via iframe

    <!DOCTYPE html>
    <html>
    <body>
    <img src="img/dac_logo.png"/>
    
    <video width="320" height="240" controls>
      <source src="mm/movie.mp4" type="video/mp4">
      <source src="mm/movie.ogg" type="video/ogg">
      Your browser does not support the video tag.
    </video>
    
    </body>
    </html>
    

    package com.example.fragmentornegi;
    
    import java.io.IOException;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    
    public class Sag extends Fragment {
     @Override
     public View onCreateView(LayoutInflater inflater, 
       ViewGroup container, 
       Bundle savedInstanceState) {
      return inflater.inflate(R.layout.sag, container, false);
     }
    
     @Override
     public void onStart() {
      super.onStart();
      try {
       String[] sarrH1Dosyalari = getActivity().getAssets().list("html");
       for (int i = 0; i < sarrH1Dosyalari.length; i++) {
        Log.w("HD 1 içindekiler", sarrH1Dosyalari[i]);
       }
    
       WebView wv = (WebView) getActivity().findViewById(R.id.webv);
       wv.getSettings().setJavaScriptEnabled(true);
       wv.getSettings().setPluginState(WebSettings.PluginState.ON);
       wv.loadUrl("file:///android_asset/html/index.html");
    
       final String mimetype = "text/html";
       final String encoding = "UTF-8";
      } catch (IOException e) {
       e.printStackTrace();
      }
     }
    }

    VMWare guest sanal makinesi yavaş kapanıyor

    Ref: communities.vmware.com
    Solution: VMWare Guest Shutdowns very slow

    In certain scenarios, you may find that shutting down a VM is very slow for no apparent reason. I found this to be true under the condition I’m running:
    Windows 7 64-Bit
    Utilizing an external USB drive to host the guest VHD
    8GB RAM
    Using a Dell laptop (tried on a D630 and Precision M4500)
    To fix this issue, navigate to the following file and add these settings:
    C:\ProgramData\VMware\VMware Workstation\config.ini AND C:\ProgramData\VMware\VMware Player
    prefvmx.minVmMemPct = "100"
    mainMem.useNamedFile = "FALSE"
    mainMem.partialLazySave = "FALSE"
    mainMem.partialLazyRestore = "FALSE"
    You should notice immediate improvement in shutdown speed.

    Peki VMWare içinde Config.ini bulamadıysanız:
    Ref: Creating and editing config.ini on Windows hosts
    Solution
    The config.ini file may not exist if you have not changed the default configuration setting from the Edit > Preferences menu.

    To see if the file already exists, look for it in:

    C:\Documents and Settings\All Users\Application Data\VMware\VMware_Product_Name

    Where VMware_Product_Name is the name of the product you are using.

    Notes:

    Make sure you are looking on the Windows host on which you have installed the VMware software. You should not look for this file in your virtual machine.
    On Windows Vista, Windows 7, Windows 8, Windows Server 2012, and Windows 2008 Server R2 hosts, look for the file in:

    C:\ProgramData\VMWare\VMware_Product_Name\config.ini

    Note: This folder is normally hidden by default. In order to make this folder viewable/accessible:

    Open a new folder.
    Go to Tools > Folder Options.
    Click the View tab, and select Show hidden files, folders and drives.
    To create the file if it does not exist:
    Open Notepad.

    Caution: Do not use Word or Wordpad, because these editors create extra characters in the text file that render the configuration settings that you add unreadable.

    Save a new, empty text file named config.ini in the location above.